====== U-boot ======
===== Toolchain =====
Click one of the site to download toolchain to build U-boot. Please note that this toolchain is for U-boot, there is another toolchain to build Linux kernel.
* [[http://dn.odroid.com/toolchains/arm-eabi-4.4.3.tar.gz|Download Bootloader Toolchain(arm-eabi-4.4.3)]]
Once the download is done, extract the tarball to **/opt/toolchains/**.
If the '/opt/toolchains' directory does not exist in host pc, then create the directory.
$ sudo mkdir -p /opt/toolchains
$ sudo tar xzvf arm-eabi-4.4.3.tar.gz -C /opt/toolchains/
In order to add the toolchain path to PATH, paste below lines to **$HOME/.bashrc**.
export PATH=/opt/toolchains/arm-eabi-4.4.3/bin:$PATH
export CROSS_COMPILE=arm-eabi-
You can apply the change if you login again or import
to apply this change, login again or evaluate **$HOME/.bashrc** with source command.
$ source ~/.bashrc
You can check if the toolchain installed above works properly while checking the version of toolchain. If you can find **gcc version 4.4.3(GCC)** at the end of the line, the toolchain is well installed.
$ arm-eabi-gcc -v
Using built-in specs.
Target: arm-eabi
Configured with: /home/jingyu/projects/gcc/android-toolchainsrc/build/../gcc/gcc-4.4.3/configure --prefix=/usr/local --target=arm-eabi
--host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/home/jingyu/projects
/gcc/toolchain_build/obj/temp-install --with-mpfr=/home/jingyu/projects/gcc/toolchain_build/obj/temp-install --disable-libssp --enable
-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disa
ble-tls --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --with-abi=aapcs --with-gcc-version=4.4.3 --with
-binutils-version=2.19 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 --with-gdb-version=7.1.x --with-arch=armv5te --with-multilib
-list=mandroid --with-sysroot=/usr/local/google/home/android/cupcake_rel_root --program-transform-name='s&^&arm-eabi-&'
Thread model: single
gcc version 4.4.3 (GCC)
===== Checkout & compile =====
You can checkout **U-boot** source tree from **[[https://github.com/hardkernel/u-boot/tree/odroidc-v2011.03|Hardkernel's Github]]**.
$ git clone https://github.com/hardkernel/u-boot.git -b odroid-v2015.10
Before you compile **U-boot**, you must configure for **ODROID-U3** with following command.
$ cd u-boot
$ make smdk4412_config
And finally you can compile **U-boot**.
$ make
Then you can start to build u-boot image, **u-boot.bin**. This will create **u-boot/u-boot.bin**. You can also add **-j** option for fast compile.
===== Installation =====
ODROID-U3 boot load must have the secure booting process and there are 4 binary files.(bl1.HardKernel, bl2.HardKernel, u-boot.bin, tzsw.HardKernel)\\
The u-boot.bin file can be generated by compiling the u-boot source code.\\
bl1.HardKernel, bl2.HardKernel and tzsw.HardKernel blobs can be found in "u-boot/sd_fuse" directory.
* If you don't change the early H/W initialization code, you don't need to change the bl2.bin. Updating the u-boot.bin should be enough most cases.
* bl1.bin.hardkernel and tzsw.bin.hardkernel are supplied only in binary format due to Samsung's polish.
* **You need to sign the bl2.bin with Hardkernel's private key to make it bootable.**
* **If you want to contribute your patch, apply it to our u-boot github admin. Or, contact "odroid.uboot@gmail.com"**
* **And we will publically release the signed bl2 image within 48 hours if there is any update.**
* To flash the updated images on your MicroSD card, refer the scriptor file sd_fusing.sh in sd_fuse directory.
* ** To update the boot loader in the eMMC, you must use the fastboot protocol. [[en:adb_fastboot_install|Fastboot Tool]]. **
* ** When the boot loader in the eMMC is corrupted, Recover it with this instruction. [[emmc_recovery_u3|eMMC Recovery]]. **
* For eMMC update, you need a fastboot driver and micro-USB cable.
==== Installation to blank card ====
We provide the script, **sd_fuse/sd_fusing.sh**, this helps you to install the bootloader into your blank card MicroSD.
- Insert your card to USB card reader and attach to USB host port of your desktop.
- Check the device path of your USB card reader.
- Install the bootloader binaries using **sd_fuse/sd_fusing.sh**.
$ cd sd_fuse
$ ./sd_fusing.sh
==== Installation using fastboot ====
If you can boot your **ODROID-U3** already and want to install a new **u-boot.bin** built by you. Fastboot helps you to install a **u-boot.bin** into your board.
u-boot.bin install
$ sudo fastboot flash bootloader u-boot.bin
bl1.bin install
$ sudo fastboot flash fwbl1 sd_fuse/bl1.HardKernel
bl2.bin install
$ sudo fastboot flash bl2 sd_fuse/bl2.HardKernel
tzsw.bin install
$ sudo fastboot flash tzsw sd_fuse/tzsw.HardKernel
If installation is done, you care reboot your **ODROID-U3** with fastboot.
$ sudo fastboot reboot
==== Updating from Linux ====
You also can update U-boot from Linux with **dd** command. After building U-boot, copy **u-boot.bin** into your **ODROID-U3**. Then do the command below in order to flash your U-boot image to MicroSD.
$ sudo dd if=u-boot.bin of= seek=63
$ sudo sync
==== A tip for the TFTP booting ====
Here is a modified u-boot to support the TFTP booting.
Special thanks to Surian and kangur91 in our community forum.
[[http://forum.odroid.com/viewtopic.php?f=82&t=9128|Uboot-for-TFTP]]