blob: bc77ae317554abb4f01b05c866b711d61ec794a7 [file] [log] [blame]
Anand Moon9c150442018-11-12 10:32:43 +00001 U-Boot for Odroid X2/U3/XU3/XU4/HC1
Przemyslaw Marczak73eca212014-09-01 13:50:53 +02002========================
3
41. Summary
5==========
Hyungwon Hwangd10e9532014-12-12 14:45:46 +09006This is a quick instruction for setup Odroid boards.
7Board config: odroid_config for X2/U3
Anand Moon9c150442018-11-12 10:32:43 +00008Board config: odroid-xu3_config for XU3/XU4/HC1
Przemyslaw Marczak73eca212014-09-01 13:50:53 +02009
102. Supported devices
11====================
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090012This U-BOOT config can be used on three boards:
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020013- Odroid U3
14- Odroid X2
15with CPU Exynos 4412 rev 2.0 and 2GB of RAM
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090016- Odroid XU3
Shawn Guo3af65c32016-04-08 11:06:42 +080017- Odroid XU4
Anand Moon9c150442018-11-12 10:32:43 +000018- Odroid HC1
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090019with CPU Exynos5422 and 2GB of RAM
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020020
213. Boot sequence
22================
23iROM->BL1->(BL2 + TrustZone)->U-BOOT
24
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090025This 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:
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020030http://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
Shawn Guo3af65c32016-04-08 11:06:42 +080034<< XU3/XU4 >>
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090035It can be downloaded from:
Shawn Guo3af65c32016-04-08 11:06:42 +080036https://github.com/hardkernel/u-boot/tree/odroidxu3-v2012.07/sd_fuse/hardkernel_1mb_uboot
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090037
38
Przemyslaw Marczak73eca212014-09-01 13:50:53 +0200394. Boot media layout
40====================
Bin Menga1875592016-02-05 19:30:11 -080041The table below shows SD/eMMC cards layout for U-Boot.
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020042The 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) |
Bin Menga1875592016-02-05 19:30:11 -080049| U-Boot | 63 | 62 | 1 (boot) |
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020050| Tzsw | 2111 | 2110 | 1 (boot) |
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090051| Uboot Env | 2560 | 2560 | 0 (user) |
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020052 -------------------------------------
53
545. Prepare the SD boot card - with SD card reader
55=================================================
56To prepare bootable media you need boot binaries provided by hardkernel.
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090057From the downloaded files, You can find:
58- bl1.bin
59- tzsw.bin
60- bl2.bin
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020061- sd_fusing.sh
62- u-boot.bin
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090063(The file names can be slightly different, but you can distinguish what they are
64without problem)
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020065
66This is all you need to boot this board. But if you want to use your custom
Bin Menga1875592016-02-05 19:30:11 -080067U-Boot then you need to change u-boot.bin with your own U-Boot binary*
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020068and run the script "sd_fusing.sh" - this script is valid only for SD card.
69
70*note:
Bin Menga1875592016-02-05 19:30:11 -080071The proper binary file of current U-Boot is u-boot-dtb.bin.
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020072
73quick steps for Linux:
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090074- Download all files from the link at point 3 and extract it if needed.
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020075- 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)
Bin Menga1875592016-02-05 19:30:11 -080078Check if Hardkernel U-Boot is booting, and next do the same with your U-Boot.
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020079
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
Hyungwon Hwangd10e9532014-12-12 14:45:46 +090084which supports eMMC partition switch. All of the boot binaries are stored
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020085on 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
Bin Menga1875592016-02-05 19:30:11 -0800978. Prepare the boot media using Hardkernel U-Boot
Przemyslaw Marczak73eca212014-09-01 13:50:53 +020098=================================================
Bin Menga1875592016-02-05 19:30:11 -080099You can update the U-Boot to the custom one if you have a working bootloader
Hyungwon Hwangd10e9532014-12-12 14:45:46 +0900100delivered with the board on the eMMC/SD card. Then follow the steps:
Przemyslaw Marczak73eca212014-09-01 13:50:53 +0200101- install the android fastboot tool
102- connect a micro usb cable to the board
Bin Menga1875592016-02-05 19:30:11 -0800103- on the U-Boot prompt, run command: fastboot (as a root)
Przemyslaw Marczak73eca212014-09-01 13:50:53 +0200104- on the host, run command: "fastboot flash bootloader u-boot-dtb.bin"
Bin Menga1875592016-02-05 19:30:11 -0800105- the custom U-Boot should start after the board resets.
Przemyslaw Marczak73eca212014-09-01 13:50:53 +0200106
1079. Partition layout
108====================
Bin Menga1875592016-02-05 19:30:11 -0800109Default U-Boot environment is setup for fixed partition layout.
Przemyslaw Marczak73eca212014-09-01 13:50:53 +0200110
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
Hyungwon Hwangd10e9532014-12-12 14:45:46 +0900124- exynos5422-odroidxu3.dtb
Anand Moon9c150442018-11-12 10:32:43 +0000125- exynos5422-odroidxu3-lite.dtb
Shawn Guo3af65c32016-04-08 11:06:42 +0800126- exynos5422-odroidxu4.dtb
Anand Moon9c150442018-11-12 10:32:43 +0000127- exynos5422-odroidhc1.dtb
Przemyslaw Marczak73eca212014-09-01 13:50:53 +0200128
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
Suriyan Ramasamic8322be2014-11-20 17:26:29 -0800163
16411. USB host support
165====================
Hyungwon Hwangd10e9532014-12-12 14:45:46 +0900166NOTE: This section is only for Odroid X2/U3.
Suriyan Ramasamic8322be2014-11-20 17:26:29 -0800167
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.