Table of Contents

Preface

This page will explain how the boot sequence on Exynos 4412 occurs. Covers the following products: ODROID-X/X2/U/U2/U3/Q/Q2

Boot Media

ODROID-U/U2/U3

On ODROID-U/U2/U3 There's no method to select the boot media. It will attempt first a eMMC boot if eMMC isn't found it will attempt the SDCard Boot

ODROID-Q/Q2

On ODROID-Q/Q2 It will always default to eMMC boot. However if you want to boot of the SDCard use the supplied debug board and change the first jumper on the right. Upon doing that it will change to sdcard boot. The debug board must be present if you want to boot of SDCard

ODROID-X/X2

On ODROID-X/X2 there's a jumper (JP2) to select the boot media. If you have it connected it will boot of SDCard, if its not connected it will boot of eMMC

Boot Sequence

Upon power on the board/tablet will search for the boot media. It will perform the following: * 1) iROM (Code inside the SoC) will attempt to read the boot media at the first 512 bytes of it. On those first 512 bytes fwbl1 should exist. * 2) fwbl1 will load bl2 (SPL) that is part of the U-Boot. * 3) bl2 will load U-boot * 4) U-Boot will do whats left, such as handle TrustZone, load kernel image and Ramdisk if setted.

fwbl1

This blob is the first thing that CPU will call, we don't have much information on it since its provided by Samsung. Position on SD: 1

bl2

This is the SPL, part of the U-Boot, upon building U-Boot you'll have the mkspl program what will extract it from the u-boot.bin Position on SD: 31

u-boot.bin

This is the U-Boot itself built. For more information about U-Boot please check their website: http://www.denx.de/wiki/U-Boot Position on SD: 63

TrustZone Software

This is the blob done by Samsung/ARM to support Trustzone platform. Position on SD: 2111

Default Env

The default env provided in U-Boot will attempt the following:

Download

This package below packs all needed files above and a shell script to flash them to your SDCard. * Official Download: boot.tar.gz

* Mirror: http://www.mdrjr.net/odroid/mirror/BSPs/Alpha4/unpacked/boot.tar.gz

How to build u-boot

Download the cross tool chain package

[http://www.codesourcery.com/sgpp/lite/arm/portal/release1294]

or

[http://code.google.com/p/acoral-hg/downloads/detail?name=arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2&can=2&q= ]

Note this tool chain can be used to build the Android kernel.

Copy the cross tool package to /opt/toolchains

If the '/opt/toolchains' directory does not exist in host pc, then create the directory.

# sudo mkdir /opt/toolchains
# sudo cp arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 /opt/toolchains

Uncompress the cross tool with tar command

# cd /opt/toolchains
# sudo tar xjf arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

Add Path in your environment file

Modify your ~/.bashrc file to add a new path with editor (gedit or vi)

PATH=$PATH:/opt/toolchains/arm-2010q1/bin

To apply this change, login again or restart the .bashrc

# source ~/.bashrc

Check the tool-chain path to see if it is set up correctly or not.

# arm-none-eabi-gcc -v
Using built-in specs.
Target: arm-none-eabi
Configured with: /scratch/julian/2010q1-release-eabi-lite/src/gcc-4.4-2010q1/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu
--target=arm-none-eabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs
--with-gnu-as --with-gnu-ld --with-specs='%{O2:%{!fno-remove-local-statics: -fremove-local-statics}}
%{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics\}\}\}' --enable-languages=c,c++ --disable-shared
--disable-lto --with-newlib --with-pkgversion='Sourcery G++ Lite 2010q1-188' --with-bugurl=https://support.codesourcery.com/GNUToolchain/
 --disable-nls --prefix=/opt/codesourcery --with-headers=yes --with-sysroot=/opt/codesourcery/arm-none-eabi
--with-build-sysroot=/scratch/julian/2010q1-release-eabi-lite/install/arm-none-eabi
--with-gmp=/scratch/julian/2010q1-release-eabi-lite/obj/host-libs-2010q1-188-arm-none-eabi-i686-pc-linux-gnu/usr
 --with-mpfr=/scratch/julian/2010q1-release-eabi-lite/obj/host-libs-2010q1-188-arm-none-eabi-i686-pc-linux-gnu/usr
--with-ppl=/scratch/julian/2010q1-release-eabi-lite/obj/host-libs-2010q1-188-arm-none-eabi-i686-pc-linux-gnu/usr
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'
--with-cloog=/scratch/julian/2010q1-release-eabi-lite/obj/host-libs-2010q1-188-arm-none-eabi-i686-pc-linux-gnu/usr
--disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/2010q1-release-eabi-lite/install/arm-none-eabi/bin
--with-build-time-tools=/scratch/julian/2010q1-release-eabi-lite/install/arm-none-eabi/bin
Thread model: single
gcc version 4.4.1 (Sourcery G++ Lite 2010q1-188)

Where is the latest u-boot source code

https://github.com/hardkernel/u-boot.git Branch : odroid-v2010.12

How to configure and compile

# cd uboot
# make distclean       --> This is only used to clean up files from the source code
# make smdk4412_config --> common use for ODROID-X, ODROID-X2, ODROID-Q, ODROID-Q2, ODROID-U, ODROID-U2
# make

* You will have bl2.bin and u-boot.bin, if you build it.

Note

* 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@hardkernel.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 SD card, refer the scriptor file sd_fusing.sh in sd_fuse directory.

* To flash the updated images on your eMMC moduel, refer the scriptor file emmc_fastboot_fusing.sh in sd_fuse directory.

* For eMMC update, you need a fastboot driver and micro-USB cable.