uboot/doc/README.odroid
<<
>>
Prefs
   1 U-Boot for Odroid X2/U3/XU3/XU4/HC1
   2========================
   3
   41. Summary
   5==========
   6This is a quick instruction for setup Odroid boards.
   7Board config: odroid_config for X2/U3
   8Board config: odroid-xu3_config for XU3/XU4/HC1
   9
  102. Supported devices
  11====================
  12This U-BOOT config can be used on three boards:
  13- Odroid U3
  14- Odroid X2
  15with CPU Exynos 4412 rev 2.0 and 2GB of RAM
  16- Odroid XU3
  17- Odroid XU4
  18- Odroid HC1
  19with CPU Exynos5422 and 2GB of RAM
  20
  213. Boot sequence
  22================
  23iROM->BL1->(BL2 + TrustZone)->U-BOOT
  24
  25This version of U-BOOT doesn't implement SPL. So, BL1, BL2, and TrustZone
  26binaries are needed to boot up.
  27
  28<< X2/U3 >>
  29It can be found in "boot.tar.gz" from here:
  30http://dev.odroid.com/projects/4412boot/wiki/FrontPage?action=download&value=boot.tar.gz
  31or here:
  32http://odroid.in/guides/ubuntu-lfs/boot.tar.gz
  33
  34<< XU3/XU4 >>
  35It can be downloaded from:
  36https://github.com/hardkernel/u-boot/tree/odroidxu3-v2012.07/sd_fuse/hardkernel_1mb_uboot
  37
  38
  394. Boot media layout
  40====================
  41The table below shows SD/eMMC cards layout for U-Boot.
  42The block offset is starting from 0 and the block size is 512B.
  43 -------------------------------------
  44|  Binary   | Block offset| part type |
  45|   name    | SD   | eMMC |(eMMC only)|
  46 -------------------------------------
  47| Bl1       | 1    | 0    |  1 (boot) |
  48| Bl2       | 31   | 30   |  1 (boot) |
  49| U-Boot    | 63   | 62   |  1 (boot) |
  50| Tzsw      | 2111 | 2110 |  1 (boot) |
  51| Uboot Env | 2560 | 2560 |  0 (user) |
  52 -------------------------------------
  53
  545. Prepare the SD boot card - with SD card reader
  55=================================================
  56To prepare bootable media you need boot binaries provided by hardkernel.
  57From the downloaded files, You can find:
  58- bl1.bin
  59- tzsw.bin
  60- bl2.bin
  61- sd_fusing.sh
  62- u-boot.bin
  63(The file names can be slightly different, but you can distinguish what they are
  64without problem)
  65
  66This is all you need to boot this board. But if you want to use your custom
  67U-Boot then you need to change u-boot.bin with your own U-Boot binary*
  68and run the script "sd_fusing.sh" - this script is valid only for SD card.
  69
  70*note:
  71The proper binary file of current U-Boot is u-boot-dtb.bin.
  72
  73quick steps for Linux:
  74- Download all files from the link at point 3 and extract it if needed.
  75- put any SD card into the SD reader
  76- check the device with "dmesg"
  77- run ./sd_fusing.sh /dev/sdX - where X is SD card device (but not a partition)
  78Check if Hardkernel U-Boot is booting, and next do the same with your U-Boot.
  79
  806. Prepare the eMMC boot card
  81   with a eMMC card reader (boot from eMMC card slot)
  82=====================================================
  83To boot the device from the eMMC slot you should use a special card reader
  84which supports eMMC partition switch. All of the boot binaries are stored
  85on the eMMC boot partition which is normally hidden.
  86
  87The "sd_fusing.sh" script can be used after updating offsets of binaries
  88according to the table from point 4. Be sure that you are working on the right
  89eMMC partition - its size is usually very small, about 1-4 MiB.
  90
  917. Prepare the eMMC boot card
  92   with a SD card reader (boot from SD card slot)
  93=================================================
  94If you have an eMMC->microSD adapter you can prepare the card as in point 5.
  95But then the device can boot only from the SD card slot.
  96
  978. Prepare the boot media using Hardkernel U-Boot
  98=================================================
  99You can update the U-Boot to the custom one if you have a working bootloader
 100delivered with the board on the eMMC/SD card. Then follow the steps:
 101- install the android fastboot tool
 102- connect a micro usb cable to the board
 103- on the U-Boot prompt, run command: fastboot (as a root)
 104- on the host, run command: "fastboot flash bootloader u-boot-dtb.bin"
 105- the custom U-Boot should start after the board resets.
 106
 1079. Partition layout
 108====================
 109Default U-Boot environment is setup for fixed partition layout.
 110
 111Partition table: MSDOS. Disk layout and files as listed in the table below.
 112 ----- ------ ------ ------ -------- ---------------------------------
 113| Num | Name |  FS  | Size | Offset |         Reguired files          |
 114|     |      | Type |  MiB |  MiB   |                                 |
 115 ----- ------ ------ ------ -------- ---------------------------------
 116|  1  | BOOT | fat  |  100 |   2    |  kernel, fdt**                  |
 117|  2  | ROOT | ext4 |   -  |        |  any Linux system               |
 118 ----- ------ ------ ------ -------- ---------------------------------
 119
 120**note:
 121Supported fdt files are:
 122- exynos4412-odroidx2.dtb
 123- exynos4412-odroidu3.dtb
 124- exynos5422-odroidxu3.dtb
 125- exynos5422-odroidxu3-lite.dtb
 126- exynos5422-odroidxu4.dtb
 127- exynos5422-odroidhc1.dtb
 128
 129Supported kernel files are:
 130- Image.itb
 131- zImage
 132- uImage
 133
 134The default environmental variable "dfu_alt_info" is set* for above layout.
 135Each partition size is just an example, dfu_alt_info tries init two partitions.
 136The size of each is not important.
 137
 138*note:
 139$dfu_alt_info is set on a boot time and it is concatenated using two variables:
 140- $dfu_alt_boot(set dynamically)
 141- $dfu_alt_system(from current env).
 142
 143To add any changes to dfu_alt_info - please modify $dfu_alt_system only.
 144Changes are visible after board reset.
 145
 14610. The environment and booting the kernel
 147==========================================
 148There are three macros defined in config for various boot options:
 149Two for both, kernel with device tree support and also without it:
 150- boot_uimg - load uImage
 151- boot_zimg - load zImage
 152If proper fdt file exists then it will be automatically loaded,
 153so for old kernel types, please remove fdt file from boot partition.
 154
 155The third boot option for multi image support (more info: doc/uImage.FIT/)
 156- boot_fit - for binary file: "Image.itb"
 157
 158Default boot command: "autoboot"
 159And the boot sequence is:
 160- boot_fit - if "Image.itb" exists
 161- boot_zimg - if "zImage" exists
 162- boot_uimg - if "uImage" exists
 163
 16411. USB host support
 165====================
 166NOTE: This section is only for Odroid X2/U3.
 167
 168The ethernet can be accessed after starting the USB subsystem in U-Boot.
 169The adapter does not come with a preconfigured MAC address, and hence it needs
 170to be set before starting USB.
 171setenv usbethaddr 02:DE:AD:BE:EF:FF
 172
 173Note that in this example a locally managed MAC address is chosen. Care should
 174be taken to make these MAC addresses unique within the same subnet.
 175
 176Start the USB subsystem:
 177Odroid # setenv usbethaddr 02:DE:AD:BE:EF:FF
 178Odroid # usb start
 179(Re)start USB...
 180USB0:   USB EHCI 1.00
 181scanning bus 0 for devices... 4 USB Device(s) found
 182       scanning usb for storage devices... 1 Storage Device(s) found
 183       scanning usb for ethernet devices... 1 Ethernet Device(s) found
 184Odroid #
 185
 186Automatic IP assignment:
 187------------------------
 188If the ethernet is connected to a DHCP server (router maybe with DHCP enabled),
 189then the below will automatically assign an ip address through DHCP.
 190setenv autoload no
 191dhcp
 192
 193Odroid # setenv autoload no
 194Odroid # dhcp
 195Waiting for Ethernet connection... done.
 196BOOTP broadcast 1
 197DHCP client bound to address 192.168.1.10 (524 ms)
 198Odroid #
 199
 200Note that this automatically sets the many IP address related variables in
 201U-Boot that is obtained from the DHCP server.
 202
 203Odroid # printenv ipaddr netmask gatewayip dnsip
 204ipaddr=192.168.1.10
 205netmask=255.255.255.0
 206gatewayip=192.168.1.1
 207dnsip=192.168.1.1
 208
 209Ping example:
 210The ping command can be used a test to check connectivity. In this example,
 211192.168.1.27 is a pingable server in the network.
 212Odroid # ping 192.168.1.27
 213Waiting for Ethernet connection... done.
 214Using sms0 device
 215host 192.168.1.27 is alive
 216Odroid #
 217
 218Static IP assignment:
 219---------------------
 220In the case where there are no DHCP servers in the network, or you want to
 221set the IP address statically, it can be done by:
 222Odroid # setenv ipaddr 192.168.1.10
 223Odroid # ping 192.168.1.27
 224Waiting for Ethernet connection... done.
 225Using sms0 device
 226host 192.168.1.27 is alive
 227
 228TFTP booting:
 229-------------
 230Say there exists a tftp server in the network with address 192.168.1.27 and
 231it serves a kernel image (zImage.3.17) and a DTB blob (exynos4412-odroidu3.dtb)
 232that needs to be loaded and booted. It can be accomplished as below:
 233(Assumes that you have setenv usbethaddr, and have not set autoload to no)
 234
 235Odroid # setenv serverip 192.168.1.27
 236Odroid # tftpboot 0x40080000 zImage.3.17
 237Waiting for Ethernet connection... done.
 238Using sms0 device
 239TFTP from server 192.168.1.27; our IP address is 192.168.1.10
 240Filename 'zImage.3.17'.
 241Load address: 0x40080000
 242Loading: #################################################################
 243         #################################################################
 244         #################################################################
 245         #######################
 246         52.7 KiB/s
 247done
 248Bytes transferred = 3194200 (30bd58 hex)
 249Odroid # tftpboot 0x42000000 exynos4412-odroidu3.dtb
 250Waiting for Ethernet connection... done.
 251Using sms0 device
 252TFTP from server 192.168.1.27; our IP address is 192.168.1.10
 253Filename 'exynos4412-odroidu3.dtb'.
 254Load address: 0x42000000
 255Loading: ####
 256         40 KiB/s
 257done
 258Bytes transferred = 46935 (b757 hex)
 259Odroid # printenv bootargs
 260bootargs=Please use defined boot
 261Odroid # setenv bootargs console=ttySAC1,115200n8 root=/dev/mmcblk0p2 rootwait
 262Odroid # bootz 40080000 - 42000000
 263Kernel image @ 0x40080000 [ 0x000000 - 0x30bd58 ]
 264## Flattened Device Tree blob at 42000000
 265   Booting using the fdt blob at 0x42000000
 266   Loading Device Tree to 4fff1000, end 4ffff756 ... OK
 267
 268Starting kernel ...
 269
 270[    0.000000] Booting Linux on physical CPU 0xa00
 271... etc ...
 272
 273In the above example you can substitute 'dhcp' for 'tftpboot' as well.
 274
 275USB Storage booting:
 276--------------------
 277Similarly we can use the USB storage to load the kernel image/initrd/fdt etc
 278and boot. For this example, there is a USB drive plugged in. It has a FAT
 2791st partition and an EXT 2nd partition. Using the generic FS (ls/load) makes
 280it even easier to work with FAT/EXT file systems.
 281For this example the second EXT partition is used for booting and as rootfs.
 282The boot files - kernel and the dtb are present in the /boot directory of the
 283second partition.
 284
 285Odroid # usb start
 286(Re)start USB...
 287USB0:   USB EHCI 1.00
 288scanning bus 0 for devices... 4 USB Device(s) found
 289       scanning usb for storage devices... 1 Storage Device(s) found
 290       scanning usb for ethernet devices...
 291Error: sms0 address not set.            <----- Note the error as usbethaddr
 292Warning: failed to set MAC address      <----- is not set.
 2931 Ethernet Device(s) found
 294Odroid # usb part 0
 295
 296Partition Map for USB device 0  --   Partition Type: DOS
 297
 298Part    Start Sector    Num Sectors     UUID            Type
 299  1     3072            263168          000c4046-01     06
 300  2     266240          13457408        000c4046-02     83
 301
 302Odroid # ls usb 0:2 /boot
 303<DIR>       4096 .
 304<DIR>       4096 ..
 305             353 boot.scr
 306             281 boot.txt
 307          101420 config-3.8.13.23
 308         2127254 initrd.img-3.8.13.23
 309         2194825 uInitrd
 310         2194825 uInitrd-3.8.13.23
 311         2453112 zImage
 312          101448 config-3.8.13.26
 313         2127670 uInitrd-3.8.13.26
 314         2127606 initrd.img-3.8.13.26
 315         3194200 zImage.3.17                    <--- Kernel
 316           46935 exynos4412-odroidu3.dtb        <--- DTB
 317Odroid # load usb 0:2 40080000 /boot/zImage.3.17
 3183194200 bytes read in 471 ms (6.5 MiB/s)
 319Odroid # load usb 0:2 42000000 /boot/exynos4412-odroidu3.dtb
 32046935 bytes read in 233 ms (196.3 KiB/s)
 321Odroid # setenv bootargs console=ttySAC1,115200n8 root=/dev/sda2 rootwait
 322Odroid # bootz 40080000 - 42000000
 323Kernel image @ 0x40080000 [ 0x000000 - 0x30bd58 ]
 324## Flattened Device Tree blob at 42000000
 325   Booting using the fdt blob at 0x42000000
 326   Loading Device Tree to 4fff1000, end 4ffff756 ... OK
 327
 328Starting kernel ...
 329
 330[    0.000000] Booting Linux on physical CPU 0xa00
 331
 332Please refer to README.usb for additional information.
 333