Building U-Boot & Linux For The Beagle Bone Black (BBB)
Also want to checkout the following: https://unix.stackexchange.com/questions/457109/beaglebone-black-running-upstream-stable-kernel-u-boot-without-any-patches
Reference: This is just a copy (with some minor mods) of the instructions found here.
Build U-Boot, Linux Kernel, Create Bootable SD Card
The following worked fine on a Virtual Box Ubuntu VM running on Windows (didn't have a native linux box available :().
## ## Create a working directory mkdir ~/bbb_build cd ~/bbb_build ## ## Download the compiler wget -c https://releases.linaro.org/components/toolchain/binaries/6.4-2018.05/arm-linux-gnueabihf/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz # OR... /7.3-2018.05/arm-linux-gnueabihf/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz # Browse https://releases.linaro.org/components/toolchain/binaries for the latest and greatest... tar xf gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz export CC=`pwd`/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- export PATH=$PATH:`pwd`/gcc-linaro-6.4.1-2018.05-x86_64_arm-linux-gnueabihf/bin ## ## Download and build U-Boot git clone https://github.com/u-boot/u-boot cd u-boot/ git checkout v2018.09 -b tmp #<< Check for latest ## ## Get and apply patches wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.09/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.09/0002-U-Boot-BeagleBone-Cape-Manager.patch patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch patch -p1 < 0002-U-Boot-BeagleBone-Cape-Manager.patch ## ## Configure and build make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig make ARCH=arm CROSS_COMPILE=${CC} ## ## Clone and build Linux Kernel ## The clone actually checks out Robert Nelson's scripts and patches repository. It is the script build_kernel.sh ## that actually clones the linux kernel and then applies the relevant patches, downloads the cross compiler and ## then builds the kernel. ## NOTE: This bit might fail if you don't have all the dependencies installed... a few sudo apt installs will solve this cd ~/bbb_build git clone https://github.com/RobertCNelson/bb-kernel cd bb-kernel/ git checkout origin/am33x-v4.9 -b tmp ./build_kernel.sh ## ## Get Root File System (Debian) cd ~/bbb_build wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-9.5-minimal-armhf-2018-07-30.tar.xz tar xf debian-9.5-minimal-armhf-2018-07-30.tar.xz ## ## Setup microSD card (Mine was /dev/sdb) export DISK=/dev/sdb #<< Note this is NOT /dev/sdbX where X is the parition sudo dd if=/dev/zero of=${DISK} bs=1M count=10 #<< Erase partition table sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k #<< Install Bootloader sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k #<< Install Bootloader ## ## Create partition (sfdisk >= 2.26.x) sudo sfdisk ${DISK} <<-__EOF__ 4M,,L,* __EOF__) ## ## Format Partition (mkfs.ext4 <= 1.42) sudo mkfs.ext4 -L rootfs ${DISK}1 ## ## Mount Partition sudo mkdir -p /media/rootfs/ sudo mount ${DISK}1 /media/rootfs/ ## Install Kernel and Root File System export kernel_version=4.X.Y-Z #<< Taken from Linux Kernel Build Script Output sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/ sync sudo chown root:root /media/rootfs/ sudo chmod 755 /media/rootfs/ sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt" sudo cp -v ./bb-kernel/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version} sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/ sudo tar xfv ./bb-kernel/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/ sudo tar xfv ./bb-kernel/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/ sudo sh -c "echo '/dev/mmcblk0p1 / auto errors=remount-ro 0 1' >> /media/rootfs/etc/fstab"
Building New Device Trees and Linux Kernels
Don't use the ./build_kernel.sh
script again... this will clobber any changes you've made
and start from scratch.
To rebuild the kernel:
cd ~/bbb/bb-kernel/KERNEL export CROSS_COMPILE=arm-linux-gnueabihf- export ARCH=arm make -j8 [V=1]#<< Build the kernel and device tree make -j8 dtbs #<< OR just build the device tree
Once the kernel is built, copy to your sd card like this:
cp arch/arm/boot/zImage /media/your-sd-card/boot/vmlinuz-4.4.145-bone23 # Take kernel version from build script output in setup stage