123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- U-boot for Odroid X2/U3/XU3
- ========================
- 1. Summary
- ==========
- This is a quick instruction for setup Odroid boards.
- Board config: odroid_config for X2/U3
- Board config: odroid-xu3_config for XU3
- 2. Supported devices
- ====================
- This U-BOOT config can be used on three boards:
- - Odroid U3
- - Odroid X2
- with CPU Exynos 4412 rev 2.0 and 2GB of RAM
- - Odroid XU3
- with CPU Exynos5422 and 2GB of RAM
- 3. Boot sequence
- ================
- iROM->BL1->(BL2 + TrustZone)->U-BOOT
- This version of U-BOOT doesn't implement SPL. So, BL1, BL2, and TrustZone
- binaries are needed to boot up.
- << X2/U3 >>
- It can be found in "boot.tar.gz" from here:
- http://dev.odroid.com/projects/4412boot/wiki/FrontPage?action=download&value=boot.tar.gz
- or here:
- http://odroid.in/guides/ubuntu-lfs/boot.tar.gz
- << XU3 >>
- It can be downloaded from:
- https://github.com/hardkernel/u-boot/tree/odroidxu3-v2012.07/sd_fuse/hardkernel
- 4. Boot media layout
- ====================
- The table below shows SD/eMMC cards layout for U-boot.
- The block offset is starting from 0 and the block size is 512B.
- -------------------------------------
- | Binary | Block offset| part type |
- | name | SD | eMMC |(eMMC only)|
- -------------------------------------
- | Bl1 | 1 | 0 | 1 (boot) |
- | Bl2 | 31 | 30 | 1 (boot) |
- | U-boot | 63 | 62 | 1 (boot) |
- | Tzsw | 2111 | 2110 | 1 (boot) |
- | Uboot Env | 2560 | 2560 | 0 (user) |
- -------------------------------------
- 5. Prepare the SD boot card - with SD card reader
- =================================================
- To prepare bootable media you need boot binaries provided by hardkernel.
- From the downloaded files, You can find:
- - bl1.bin
- - tzsw.bin
- - bl2.bin
- - sd_fusing.sh
- - u-boot.bin
- (The file names can be slightly different, but you can distinguish what they are
- without problem)
- This is all you need to boot this board. But if you want to use your custom
- u-boot then you need to change u-boot.bin with your own u-boot binary*
- and run the script "sd_fusing.sh" - this script is valid only for SD card.
- *note:
- The proper binary file of current U-boot is u-boot-dtb.bin.
- quick steps for Linux:
- - Download all files from the link at point 3 and extract it if needed.
- - put any SD card into the SD reader
- - check the device with "dmesg"
- - run ./sd_fusing.sh /dev/sdX - where X is SD card device (but not a partition)
- Check if Hardkernel U-boot is booting, and next do the same with your U-boot.
- 6. Prepare the eMMC boot card
- with a eMMC card reader (boot from eMMC card slot)
- =====================================================
- To boot the device from the eMMC slot you should use a special card reader
- which supports eMMC partition switch. All of the boot binaries are stored
- on the eMMC boot partition which is normally hidden.
- The "sd_fusing.sh" script can be used after updating offsets of binaries
- according to the table from point 4. Be sure that you are working on the right
- eMMC partition - its size is usually very small, about 1-4 MiB.
- 7. Prepare the eMMC boot card
- with a SD card reader (boot from SD card slot)
- =================================================
- If you have an eMMC->microSD adapter you can prepare the card as in point 5.
- But then the device can boot only from the SD card slot.
- 8. Prepare the boot media using Hardkernel U-boot
- =================================================
- You can update the U-boot to the custom one if you have a working bootloader
- delivered with the board on the eMMC/SD card. Then follow the steps:
- - install the android fastboot tool
- - connect a micro usb cable to the board
- - on the U-boot prompt, run command: fastboot (as a root)
- - on the host, run command: "fastboot flash bootloader u-boot-dtb.bin"
- - the custom U-boot should start after the board resets.
- 9. Partition layout
- ====================
- Default U-boot environment is setup for fixed partition layout.
- Partition table: MSDOS. Disk layout and files as listed in the table below.
- ----- ------ ------ ------ -------- ---------------------------------
- | Num | Name | FS | Size | Offset | Reguired files |
- | | | Type | MiB | MiB | |
- ----- ------ ------ ------ -------- ---------------------------------
- | 1 | BOOT | fat | 100 | 2 | kernel, fdt** |
- | 2 | ROOT | ext4 | - | | any Linux system |
- ----- ------ ------ ------ -------- ---------------------------------
- **note:
- Supported fdt files are:
- - exynos4412-odroidx2.dtb
- - exynos4412-odroidu3.dtb
- - exynos5422-odroidxu3.dtb
- Supported kernel files are:
- - Image.itb
- - zImage
- - uImage
- The default environmental variable "dfu_alt_info" is set* for above layout.
- Each partition size is just an example, dfu_alt_info tries init two partitions.
- The size of each is not important.
- *note:
- $dfu_alt_info is set on a boot time and it is concatenated using two variables:
- - $dfu_alt_boot(set dynamically)
- - $dfu_alt_system(from current env).
- To add any changes to dfu_alt_info - please modify $dfu_alt_system only.
- Changes are visible after board reset.
- 10. The environment and booting the kernel
- ==========================================
- There are three macros defined in config for various boot options:
- Two for both, kernel with device tree support and also without it:
- - boot_uimg - load uImage
- - boot_zimg - load zImage
- If proper fdt file exists then it will be automatically loaded,
- so for old kernel types, please remove fdt file from boot partition.
- The third boot option for multi image support (more info: doc/uImage.FIT/)
- - boot_fit - for binary file: "Image.itb"
- Default boot command: "autoboot"
- And the boot sequence is:
- - boot_fit - if "Image.itb" exists
- - boot_zimg - if "zImage" exists
- - boot_uimg - if "uImage" exists
- 11. USB host support
- ====================
- NOTE: This section is only for Odroid X2/U3.
- The ethernet can be accessed after starting the USB subsystem in U-Boot.
- The adapter does not come with a preconfigured MAC address, and hence it needs
- to be set before starting USB.
- setenv usbethaddr 02:DE:AD:BE:EF:FF
- Note that in this example a locally managed MAC address is chosen. Care should
- be taken to make these MAC addresses unique within the same subnet.
- Start the USB subsystem:
- Odroid # setenv usbethaddr 02:DE:AD:BE:EF:FF
- Odroid # usb start
- (Re)start USB...
- USB0: USB EHCI 1.00
- scanning bus 0 for devices... 4 USB Device(s) found
- scanning usb for storage devices... 1 Storage Device(s) found
- scanning usb for ethernet devices... 1 Ethernet Device(s) found
- Odroid #
- Automatic IP assignment:
- ------------------------
- If the ethernet is connected to a DHCP server (router maybe with DHCP enabled),
- then the below will automatically assign an ip address through DHCP.
- setenv autoload no
- dhcp
- Odroid # setenv autoload no
- Odroid # dhcp
- Waiting for Ethernet connection... done.
- BOOTP broadcast 1
- DHCP client bound to address 192.168.1.10 (524 ms)
- Odroid #
- Note that this automatically sets the many IP address related variables in
- U-Boot that is obtained from the DHCP server.
- Odroid # printenv ipaddr netmask gatewayip dnsip
- ipaddr=192.168.1.10
- netmask=255.255.255.0
- gatewayip=192.168.1.1
- dnsip=192.168.1.1
- Ping example:
- The ping command can be used a test to check connectivity. In this example,
- 192.168.1.27 is a pingable server in the network.
- Odroid # ping 192.168.1.27
- Waiting for Ethernet connection... done.
- Using sms0 device
- host 192.168.1.27 is alive
- Odroid #
- Static IP assignment:
- ---------------------
- In the case where there are no DHCP servers in the network, or you want to
- set the IP address statically, it can be done by:
- Odroid # setenv ipaddr 192.168.1.10
- Odroid # ping 192.168.1.27
- Waiting for Ethernet connection... done.
- Using sms0 device
- host 192.168.1.27 is alive
- TFTP booting:
- -------------
- Say there exists a tftp server in the network with address 192.168.1.27 and
- it serves a kernel image (zImage.3.17) and a DTB blob (exynos4412-odroidu3.dtb)
- that needs to be loaded and booted. It can be accomplished as below:
- (Assumes that you have setenv usbethaddr, and have not set autoload to no)
- Odroid # setenv serverip 192.168.1.27
- Odroid # tftpboot 0x40080000 zImage.3.17
- Waiting for Ethernet connection... done.
- Using sms0 device
- TFTP from server 192.168.1.27; our IP address is 192.168.1.10
- Filename 'zImage.3.17'.
- Load address: 0x40080000
- Loading: #################################################################
- #################################################################
- #################################################################
- #######################
- 52.7 KiB/s
- done
- Bytes transferred = 3194200 (30bd58 hex)
- Odroid # tftpboot 0x42000000 exynos4412-odroidu3.dtb
- Waiting for Ethernet connection... done.
- Using sms0 device
- TFTP from server 192.168.1.27; our IP address is 192.168.1.10
- Filename 'exynos4412-odroidu3.dtb'.
- Load address: 0x42000000
- Loading: ####
- 40 KiB/s
- done
- Bytes transferred = 46935 (b757 hex)
- Odroid # printenv bootargs
- bootargs=Please use defined boot
- Odroid # setenv bootargs console=ttySAC1,115200n8 root=/dev/mmcblk0p2 rootwait
- Odroid # bootz 40080000 - 42000000
- Kernel image @ 0x40080000 [ 0x000000 - 0x30bd58 ]
- ## Flattened Device Tree blob at 42000000
- Booting using the fdt blob at 0x42000000
- Loading Device Tree to 4fff1000, end 4ffff756 ... OK
- Starting kernel ...
- [ 0.000000] Booting Linux on physical CPU 0xa00
- ... etc ...
- In the above example you can substitute 'dhcp' for 'tftpboot' as well.
- USB Storage booting:
- --------------------
- Similarly we can use the USB storage to load the kernel image/initrd/fdt etc
- and boot. For this example, there is a USB drive plugged in. It has a FAT
- 1st partition and an EXT 2nd partition. Using the generic FS (ls/load) makes
- it even easier to work with FAT/EXT file systems.
- For this example the second EXT partition is used for booting and as rootfs.
- The boot files - kernel and the dtb are present in the /boot directory of the
- second partition.
- Odroid # usb start
- (Re)start USB...
- USB0: USB EHCI 1.00
- scanning bus 0 for devices... 4 USB Device(s) found
- scanning usb for storage devices... 1 Storage Device(s) found
- scanning usb for ethernet devices...
- Error: sms0 address not set. <----- Note the error as usbethaddr
- Warning: failed to set MAC address <----- is not set.
- 1 Ethernet Device(s) found
- Odroid # usb part 0
- Partition Map for USB device 0 -- Partition Type: DOS
- Part Start Sector Num Sectors UUID Type
- 1 3072 263168 000c4046-01 06
- 2 266240 13457408 000c4046-02 83
- Odroid # ls usb 0:2 /boot
- <DIR> 4096 .
- <DIR> 4096 ..
- 353 boot.scr
- 281 boot.txt
- 101420 config-3.8.13.23
- 2127254 initrd.img-3.8.13.23
- 2194825 uInitrd
- 2194825 uInitrd-3.8.13.23
- 2453112 zImage
- 101448 config-3.8.13.26
- 2127670 uInitrd-3.8.13.26
- 2127606 initrd.img-3.8.13.26
- 3194200 zImage.3.17 <--- Kernel
- 46935 exynos4412-odroidu3.dtb <--- DTB
- Odroid # load usb 0:2 40080000 /boot/zImage.3.17
- 3194200 bytes read in 471 ms (6.5 MiB/s)
- Odroid # load usb 0:2 42000000 /boot/exynos4412-odroidu3.dtb
- 46935 bytes read in 233 ms (196.3 KiB/s)
- Odroid # setenv bootargs console=ttySAC1,115200n8 root=/dev/sda2 rootwait
- Odroid # bootz 40080000 - 42000000
- Kernel image @ 0x40080000 [ 0x000000 - 0x30bd58 ]
- ## Flattened Device Tree blob at 42000000
- Booting using the fdt blob at 0x42000000
- Loading Device Tree to 4fff1000, end 4ffff756 ... OK
- Starting kernel ...
- [ 0.000000] Booting Linux on physical CPU 0xa00
- Please refer to README.usb for additional information.
|