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