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