1 ---------------------------------------------
2 Imximage Boot Image generation using mkimage
3 ---------------------------------------------
5 This document describes how to set up a U-Boot image that can be booted
6 by Freescale MX25, MX35, MX51, MX53 and MX6 processors via internal boot
9 These processors can boot directly from NAND, SPI flash and SD card flash
10 using its internal boot ROM support. MX6 processors additionally support
11 boot from NOR flash and SATA disks. All processors can boot from an internal
12 UART, if booting from device media fails.
13 Booting from NOR flash does not require to use this image type.
15 For more details refer Chapter 2 - System Boot and section 2.14
16 (flash header description) of the processor's manual.
20 ./tools/mkimage -l <mx u-boot_file>
21 to list the imx image file details
23 ./tools/mkimage -T imximage \
24 -n <board specific configuration file> \
25 -e <execution address> -d <u-boot binary> <output image file>
27 For example, for the mx51evk board:
28 ./tools/mkimage -n ./board/freescale/mx51evk/imximage.cfg \
29 -T imximage -e 0x97800000 \
30 -d u-boot.bin u-boot.imx
32 You can generate directly the image when you compile u-boot with:
36 The output image can be flashed on the board SPI flash or on a SD card.
37 In both cases, you have to copy the image at the offset required for the
38 chosen media devices (0x400 for both SPI flash or SD card).
40 Please check Freescale documentation for further details.
42 Board specific configuration file specifications:
43 -------------------------------------------------
44 1. This file must present in the $(BOARDDIR) and the name should be
45 imximage.cfg (since this is used in Makefile).
46 2. This file can have empty lines and lines starting with "#" as first
47 character to put comments.
48 3. This file can have configuration command lines as mentioned below,
49 any other information in this file is treated as invalid.
51 Configuration command line syntax:
52 ---------------------------------
53 1. Each command line is must have two strings, first one command or address
54 and second one data string
55 2. Following are the valid command strings and associated data strings:-
56 Command string data string
57 -------------- -----------
59 1 is for mx25/mx35/mx51 compatible,
60 2 is for mx53/mx6 compatible,
61 others is invalid and error is generated.
62 This command need appear the fist before
63 other valid commands in configuration file.
67 This command is parallel to BOOT_FROM and
68 is preferred over BOOT_FROM.
70 value: Offset of the image header, this
71 value shall be set to one of the
72 values found in the file:
73 arch/arm/include/asm/\
74 imx-common/imximage.cfg
76 BOOT_OFFSET FLASH_OFFSET_STANDARD
78 BOOT_FROM nand/spi/sd/onenand/nor/sata
80 This command is parallel to BOOT_OFFSET and
81 is to be deprecated in favor of BOOT_OFFSET.
88 Total size of CSF (Command Sequence File)
89 used for Secure Boot/ High Assurance Boot
92 Using this command will populate the IVT
93 (Initial Vector Table) CSF pointer and adjust
94 the length fields only. The CSF itself needs
95 to be generated with Freescale tools and
96 'manually' appended to the u-boot.imx file.
98 The CSF is then simply concatenated
99 to the u-boot image, making a signed bootloader,
100 that the processor can verify
101 if the fuses for the keys are burned.
103 Further infos how to configure the SOC to verify
104 the bootloader can be found in the "High
105 Assurance Boot Version Application Programming
106 Interface Reference Manual" as part of the
107 Freescale Code Signing Tool, available on the
108 manufacturer's website.
113 DATA type address value
115 type: word=4, halfword=2, byte=1
116 address: physycal register address
117 value: value to be set in register
118 All values are in in hexadecimal.
119 Example (write to IOMUXC):
120 DATA 4 0x73FA88a0 0x200
122 The processor support up to 60 register programming commands for IMXIMAGE_VERSION 1
123 and 121 register programming commands for IMXIMAGE_VERSION 2.
124 An error is generated if more commands are found in the configuration file.
126 3. All commands are optional to program.
128 Setup a SD Card for booting
129 --------------------------------
131 The following example prepare a SD card with u-boot and a FAT partition
132 to be used to stored the kernel to be booted.
133 I will set the SD in the most compatible mode, setting it with
134 255 heads and 63 sectors, as suggested from several documentation and
135 howto on line (I took as reference the preparation of a SD Card for the
136 Beagleboard, running u-boot as bootloader).
138 You should start clearing the partitions table on the SD card. Because
139 the u-boot image must be stored at the offset 0x400, it must be assured
140 that there is no partition at that address. A new SD card is already
141 formatted with FAT filesystem and the partition starts from the first
142 cylinder, so we need to change it.
144 You can do all steps with fdisk. If the device for the SD card is
145 /dev/mmcblk0, the following commands make the job:
147 1. Start the fdisk utility (as superuser)
150 2. Clear the actual partition
152 Command (m for help): o
156 Command (m for help): p
157 Disk /dev/mmcblk0: 1981 MB, 1981284352 bytes
159 In my case, I have a 2 GB card. I need the size to set later the correct value
162 4. Go to expert mode:
164 Command (m for help): x
168 Expert command (m for help): h
169 Number of heads (1-256, default 4): 255
171 Expert command (m for help): s
172 Number of sectors (1-63, default 16): 63
173 Warning: setting sector offset for DOS compatiblity
175 We have set 255 heads, 63 sector. We have to set the cylinder.
176 The value to be set can be calculated with:
178 cilynder = <total size> / <heads> / <sectors> / <blocksize>
181 1981284352 / 255 / 63 / 512 = 239.x = 239
184 Expert command (m for help): c
185 Number of cylinders (1-1048576, default 60032): 239
187 6. Leave the expert mode
188 Expert command (m for help): r
190 7. Set up a partition
192 Now set a partition table to store the kernel or whatever you want. Of course,
193 you can set additional partitions to store rootfs, data, etc.
194 In my example I want to set a single partition. I must take care
195 to not overwrite the space where I will put u-boot.
197 Command (m for help): n
200 p primary partition (1-4)
202 Partition number (1-4): 1
203 First cylinder (1-239, default 1): 3
204 Last cylinder, +cylinders or +size{K,M,G} (3-239, default 239): +100M
206 Command (m for help): p
208 Disk /dev/mmcblk0: 1967 MB, 1967128576 bytes
209 255 heads, 63 sectors/track, 239 cylinders
210 Units = cylinders of 16065 * 512 = 8225280 bytes
211 Disk identifier: 0xb712a870
213 Device Boot Start End Blocks Id System
214 /dev/mmcblk0p1 3 16 112455 83 Linux
216 I have set 100MB, leaving the first 2 sectors free. I will copy u-boot
219 8. Write the partition table and exit.
221 Command (m for help): w
222 The partition table has been altered!
224 Calling ioctl() to re-read partition table.
226 9. Copy u-boot.imx on the SD card
230 dd if=u-boot.imx of=/dev/mmcblk0 bs=512 seek=2
232 This command copies the u-boot image at the address 0x400, as required
235 Now remove your card from the PC and go to the target. If evrything went right,
236 the u-boot prompt should come after power on.
238 ------------------------------------------------
239 Author: Stefano babic <sbabic@denx.de>