Odroid XU-4 board with Samsung Exynos 5422 SoC Introduction ------------ The Odroid XU 4 board is developed and shipped by Hrdkernel (hardkernel.com). It uses the Samsung Exynos 5422 Soc. Odroid boot process ------------------- The odroid boot process requires three stages of boot plus trust zone: boot level 1 | V boot level 2 | V u-boot and they need to be raw copied to the SD card in the following order: +----------------+----------------+ | boot level 1 | 1 block | +----------------+----------------+ | boot level 2 | 31 block | +----------------+----------------+ | u-boot | 63 block | +----------------+----------------+ | trust zone | 2111 block | +----------------+----------------+ | boot partition | 4096 block | +----------------+----------------+ | rootfs | | +----------------+----------------+ How to build buildroot ---------------------- Forst of all configure the buildroot environment: $ make odroid-xu4_defconfig If needed personalize the build $ make menuconfig then hit $ make At the end of the build you should get in the output/images directory the following files: - bl1.bin.hardkernel Level 1 boot loader - bl2.bin.hardkernel.1mb_uboot Level 2 boot loader - exynos5422-odroidxu4.dtb Linux Kernel Device Tree blop - rootfs.tar Compressed root file system image - tzsw.bin.hardkernel ARM Truzt Zone - u-boot.bin u-boot image - zImage Linux Kernel Image Set up the bootloader --------------------- I will assume you will use an sd card which will have as mount point /dev/sdb. The above images need to be flashed to the SD card to specific addresses, as follows: # dd if=bl1.bin.hardkernel of=/dev/sdb seek=1 bs=512 # dd if=bl2.bin.hardkernel.1mb_uboot of=/dev/sdb seek=31 bs=512 # dd if=u-boot.bin of=/dev/sdb seek=63 bs=512 # dd if=tzsw.bin.hardkernel of=/dev/sdb seek=2111 bs=512 With the above we should be able to boot up to the u-boot bootloader. Set up the SD card ------------------ The SD card will need to partitions, which you can make with your favourite partitioner. At the end it should look like this: Device Boot Start End Sectors Size Id Type /dev/sdb1 4096 135167 131072 64M b W95 FAT32 /dev/sdb2 135168 15523839 15388672 7.3G 83 Linux IMPORTANT: Please note that the first partition starts at the block 4096 instead of the default 2048. This is due to the sizes of the binaries we flased earlier, which go over the 2048 block, therefore, you need to start the first partition at a further location, e.g. 4096. Now format the two partitions, the first as vfat FS type, the second as EXT3 or EXT4: # mkfs.vfat /dev/sdb1 # mkfs.ext4 /dev/sdb2 Finalize the SD card -------------------- Now it's time to move Kernel and File System to the SD card. We will start from the Kernel partition. First mount it: # mount /dev/sdb1/ /mnt/ and copy kernel and dtb # cp /output/images/zImage /mnt/ # cp /output/images/exynos5422-odroidxu4.dtb /mnt/ umount the partition # sync # umount /dev/sdb1 Mount the rootfs partition: # mount /dev/sdb2 /mnt/ # tar # cp /output/images/rootfs.tar -C /mnt/ Umount the partition # sync # umount /dev/sdb2 The SD card is ready, you can boot now your Odroid XU-4. Automate u-boot commands ------------------------ In order to avoid customizing u-boot from the u-boot system at boot time, you can use the boot.cmd file in board/odroid-xu4. Jut run $ mkimage -A arm -T script -C none -d boot.cmd boot.scr the output is an u-boot readable binary which needs to be copied in the first partition of the SD card: # mount /dev/sdb1 /mnt/ # cp boot.scr /mnt/sdb1 # sync # umount /dev/sdb1