Building VIBE2 Boot Image
Note : All steps are executed on the Ubuntu 16.04.2 LTS and as a root user. Most of the steps are similar Robert C Nelson BBB Wiki.
Contents
Basic Requirements
- Running a recent release of Debian, Fedora or Ubuntu; without OS Virtualization Software.
- ARM Cross Compiler – Linaro: http://www.linaro.org
- Linaro Toolchain Binaries: http://www.linaro.org/downloads/
- Bootloader
- Das U-Boot – the Universal Boot Loader: http://www.denx.de/wiki/U-Boot
- Source: http://git.denx.de/?p=u-boot.git;a=summary
- Linux Kernel
- Linus's Mainline tree: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git
- ARM based rootfs
- Debian : http://www.debian.org/
- Ubuntu: http://www.ubuntu.com
ARM Cross Compiler: GCC
Download and extract the ARM Cross compiler linaro gcc.
~/
wget -c https://releases.linaro.org/components/toolchain/binaries/5.4-2017.01/arm-linux-gnueabihf/gcc-linaro-5.4.1-2017.01-x86_64_arm-linux-gnueabihf.tar.xz tar xf gcc-linaro-5.4.1-2017.01-x86_64_arm-linux-gnueabihf.tar.xz export CC=`pwd`/gcc-linaro-5.4.1-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
Test:
~/
${CC}gcc --version arm-linux-gnueabihf-gcc (Linaro GCC 5.4-2017.01) 5.4.1 20161213 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Bootloader: U-Boot
Download :
~/
git clone https://github.com/u-boot/u-boot cd u-boot/ git checkout v2017.03 -b tmp
Patches :
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2017.03/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2017.03/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 :
~/u-boot
make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig make ARCH=arm CROSS_COMPILE=${CC}
Linux Kernel
TI BSP
Download
~/
git clone https://github.com/RobertCNelson/ti-linux-kernel-dev.git cd ti-linux-kernel-dev/
For TI v4.4.x:
~/ti-linux-kernel-dev
git checkout origin/ti-linux-4.4.y -b ti-linux-4.4.y
Update GCC cross compiler path in system.sh
cp system.sh.sample system.sh
Update CC variable with path with GCC compiler path set above
nano system.sh CC=/home/yantrr/gcc-linaro-5.4.1-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
Build
~/ti-linux-kernel-dev/
./build_kernel.sh
Update LINUX_GIT variable in system.sh
nano system.sh LINUX_GIT=/home/yantrr/ti-linux-kernel-dev/ignore/linux-src/
Change USB0 Mode :
For VIBE/VIBE2, very first you need to change the USB0 dr_mode from peripheral to host in Beaglebone Black kernel source file KERNEL/arch/arm/boot/dts/am335x-bone-common.dtsi while rebuilding the kernel
&usb0 { status = "okay"; dr_mode = "host"; };
ZTE and Telit modems driver are already in Beaglebone Black kernel source version 4.4, so no need of any patch for it.
USB Driver configuration for SEW modems:
|
Only needed for SEW modems. |
nano KERNEL/drivers/usb/serial/option.c /* Yantrr Strongrising products */ #define YANTRR_VENDOR_ID 0x21f5 #define YANTRR_PRODUCT_VAYU3GH 0x2012 #define YANTRR_PRODUCT_VAYU3GC 0x2009 #define YANTRR_DONGLE_ID 0x20a6 #define YANTRR_DONGLE_PRODUCT 0x1105
/*Also, add entries in struct usb_device_id option_ids[]*/ { USB_DEVICE(YANTRR_VENDOR_ID, YANTRR_PRODUCT_VAYU3GH) }, { USB_DEVICE(YANTRR_VENDOR_ID, YANTRR_PRODUCT_VAYU3GC) }, { USB_DEVICE(YANTRR_DONGLE_ID, YANTRR_DONGLE_PRODUCT) },
Rebuild Kernel
~/ti-linux-kernel-dev
./tools/rebuild.sh
Check for PPS support under Device Drivers ---> PPS Support
Final output on terminal :
----------------------------- 'arch/arm/boot/zImage' -> '/home/yantrr/ti-linux-kernel-dev/deploy/4.4.62-ti-r99.zImage' '.config' -> '/home/yantrr/ti-linux-kernel-dev/deploy/config-4.4.62-ti-r99' -rwxr-xr-x 1 root root 8.3M May 2 14:58 /home/yantrr/ti-linux-kernel-dev/deploy/4.4.62-ti-r99.zImage ----------------------------- Building modules archive... Compressing 4.4.62-ti-r99-modules.tar.gz... -rw-r--r-- 1 root root 22M May 2 14:58 /home/yantrr/ti-linux-kernel-dev/deploy/4.4.62-ti-r99-modules.tar.gz ----------------------------- Building firmware archive... Compressing 4.4.62-ti-r99-firmware.tar.gz... -rw-r--r-- 1 root root 1.2M May 2 14:58 /home/yantrr/ti-linux-kernel-dev/deploy/4.4.62-ti-r99-firmware.tar.gz ----------------------------- Building dtbs archive... Compressing 4.4.62-ti-r99-dtbs.tar.gz... -rw-r--r-- 1 root root 1.4M May 2 14:58 /home/yantrr/ti-linux-kernel-dev/deploy/4.4.62-ti-r99-dtbs.tar.gz ----------------------------- Script Complete eewiki.net: [user@localhost:~$ export kernel_version=4.4.62-ti-r99] -----------------------------
Setup microSD card
We are assuming the DISK=/dev/sdc, Please check the device id of SD-Card with lsblk
export DISK=/dev/sdc
Erase partition table/labels on microSD card:
dd if=/dev/zero of=${DISK} bs=1M
Install Bootloader:
~/
dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k
Create Partition Layout:
With util-linux v2.26, sfdisk was rewritten and is now based on libfdisk.
sfdisk --version sfdisk from util-linux 2.27.1
For sfdisk >= 2.26.x
sfdisk ${DISK} <<-__EOF__ 4M,,L,* __EOF__
For sfdisk <= 2.25.x
sfdisk --unit M ${DISK} <<-__EOF__ 4,,L,* __EOF__
Format Partition:
With mkfs.ext4 1.43, we need to make sure metadata_csum and 64bit are disabled.
As U-Boot CAN NOT currently handle reading files with these newer ext4 options and so Debian 8 (armel/armhf) and Ubuntu 16.04 (armhf) fsck tools will operate correctly.
mkfs.ext4 -V mke2fs 1.42.13 (17-May-2015) Using EXT2FS Library version 1.42.13
For mkfs.ext4 >= 1.43
for: DISK=/dev/mmcblk0 mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}p1 for: DISK=/dev/sdX mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}1
For mkfs.ext4 <= 1.42
for: DISK=/dev/mmcblk0 mkfs.ext4 -L rootfs ${DISK}p1 for: DISK=/dev/sdX mkfs.ext4 -L rootfs ${DISK}1
Mount Partition:
Normally these partitions will be auto-mounted.
mkdir -p /media/rootfs/ for: DISK=/dev/mmcblk0 mount ${DISK}p1 /media/rootfs/ for: DISK=/dev/sdX mount ${DISK}1 /media/rootfs/
Backup Bootloader
This version of MLO/u-boot.img will be used on the "eMMC" flasher script on this page.
~/
sudo mkdir -p /media/rootfs/opt/backup/uboot/ sudo cp -v ./u-boot/MLO /media/rootfs/opt/backup/uboot/ sudo cp -v ./u-boot/u-boot.img /media/rootfs/opt/backup/uboot/
Dealing with old Bootloader in eMMC
If you don't want to clear out the old Bootloader in eMMC add this uEnv.txt to /media/rootfs/
~/uEnv.txt
##This will work with: Angstrom's 2013.06.20 u-boot. loadaddr=0x82000000 fdtaddr=0x88000000 rdaddr=0x88080000 initrd_high=0xffffffff fdt_high=0xffffffff #for single partitions: mmcroot=/dev/mmcblk0p1 loadximage=load mmc 0:1 ${loadaddr} /boot/vmlinuz-${uname_r} loadxfdt=load mmc 0:1 ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile} loadxrd=load mmc 0:1 ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize} loaduEnvtxt=load mmc 0:1 ${loadaddr} /boot/uEnv.txt ; env import -t ${loadaddr} ${filesize}; loadall=run loaduEnvtxt; run loadximage; run loadxfdt; mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=${mmcroot} rootfstype=${mmcrootfstype} ${cmdline} uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} - ${fdtaddr};
~/
sudo cp -v ./uEnv.txt /media/rootfs/
Root File System
Debian 8
User | Password |
---|---|
debian | temppwd |
root | root |
Download:
~/
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-8.7-minimal-armhf-2017-03-02.tar.xz
Verify:
~/
sha256sum debian-8.7-minimal-armhf-2017-03-02.tar.xz 1ef9c2620ff3f26f7fab839e0a430426110de7dbc7a818d6d89d9abb239d4d23 debian-8.7-minimal-armhf-2017-03-02.tar.xz
Extract:
~/
tar xf debian-8.7-minimal-armhf-2017-03-02.tar.xz
Ubuntu 16.04 LTS
User | Password |
---|---|
ubuntu | temppwd |
Download:
~/
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/ubuntu-16.04.2-minimal-armhf-2017-03-02.tar.xz
Verify:
~/
sha256sum ubuntu-16.04.2-minimal-armhf-2017-03-02.tar.xz 294b2156f71f03a7a297cfaa3edcb6e63b6ad95d46969210e0af231e4e5dd098 ubuntu-16.04.2-minimal-armhf-2017-03-02.tar.xz
Extract:
~/
tar xf ubuntu-16.04.2-minimal-armhf-2017-03-02.tar.xz
Copy Root File System
~/
tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/ sync chown root:root /media/rootfs/ chmod 755 /media/rootfs/
Install Kernel
The kernel building/rebuilding scripts listed on this page will give you a hint of what kernel version was built.
----------------------------- Script Complete eewiki.net: [user@localhost:~$ export kernel_version=4.4.62-ti-r99] -----------------------------
Copy and paste that "export kernel_version=4.4.62-ti-r99" exactly as shown in your own build/desktop environment and hit enter to create an environment variable to be used later.
export kernel_version=4.4.62-ti-r99
Set uname_r in /boot/uEnv.txt
~/
sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"
Copy Kernel Image
~/
cp -v ./ti-linux-kernel-dev/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}
Copy Kernel Device Tree Binaries
~/
mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/ tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/
Copy Kernel Modules
~/ tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/
sync lsblk umount /dev/sdb1 eject /dev/sdb