README.imximage 7.37 KB
Newer Older
1 2 3 4
---------------------------------------------
Imximage Boot Image generation using mkimage
---------------------------------------------

Dirk Behme's avatar
Dirk Behme committed
5 6 7
This document describes how to set up a U-Boot image that can be booted
by Freescale MX25, MX35, MX51, MX53 and MX6 processors via internal boot
mode.
8 9

These processors can boot directly from NAND, SPI flash and SD card flash
Dirk Behme's avatar
Dirk Behme committed
10 11
using its internal boot ROM support. MX6 processors additionally support
boot from NOR flash and SATA disks. All processors can boot from an internal
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
UART, if booting from device media fails.
Booting from NOR flash does not require to use this image type.

For more details refer Chapter 2 - System Boot and section 2.14
(flash header description) of the processor's manual.

Command syntax:
--------------
./tools/mkimage -l <mx u-boot_file>
		to list the imx image file details

./tools/mkimage -T imximage \
		-n <board specific configuration file> \
		-e <execution address> -d <u-boot binary>  <output image file>

For example, for the mx51evk board:
./tools/mkimage -n ./board/freescale/mx51evk/imximage.cfg \
		-T imximage -e 0x97800000  \
		-d u-boot.bin u-boot.imx

You can generate directly the image when you compile u-boot with:

$ make u-boot.imx

The output image can be flashed on the board SPI flash or on a SD card.
In both cases, you have to copy the image at the offset required for the
chosen media devices (0x400 for both SPI flash or SD card).

Please check Freescale documentation for further details.

Board specific configuration file specifications:
-------------------------------------------------
1. This file must present in the $(BOARDDIR) and the name should be
	imximage.cfg (since this is used in Makefile).
2. This file can have empty lines and lines starting with "#" as first
	character to put comments.
3. This file can have configuration command lines as mentioned below,
	any other information in this file is treated as invalid.

Configuration command line syntax:
---------------------------------
1. Each command line is must have two strings, first one command or address
	and second one data string
2. Following are the valid command strings and associated data strings:-
	Command string		data string
	--------------		-----------
58 59
	IMXIMAGE_VERSION        1/2
				1 is for mx25/mx35/mx51 compatible,
Dirk Behme's avatar
Dirk Behme committed
60
				2 is for mx53/mx6 compatible,
61 62 63 64
				others is invalid and error is generated.
				This command need appear the fist before
				other valid commands in configuration file.

65 66 67 68 69 70 71 72 73 74 75 76 77
	BOOT_OFFSET		value

				This command is parallel to BOOT_FROM and
				is preferred over BOOT_FROM.

				value:  Offset of the image header, this
					value shall be set to one of the
					values found in the file:
						arch/arm/include/asm/\
						imx-common/imximage.cfg
				Example:
				BOOT_OFFSET FLASH_OFFSET_STANDARD

Dirk Behme's avatar
Dirk Behme committed
78
	BOOT_FROM		nand/spi/sd/onenand/nor/sata
79 80 81 82

				This command is parallel to BOOT_OFFSET and
				is to be deprecated in favor of BOOT_OFFSET.

83 84
				Example:
				BOOT_FROM spi
85

86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
	CSF			value

				Total size of CSF (Command Sequence File)
				used for Secure Boot/ High Assurance Boot
				(HAB).

				Using this command will populate the IVT
				(Initial Vector Table) CSF pointer and adjust
				the length fields only. The CSF itself needs
				to be generated with Freescale tools and
				'manually' appended to the u-boot.imx file.

				The CSF is then simply concatenated
				to the u-boot image, making a signed bootloader,
				that the processor can verify
				if the fuses for the keys are burned.

				Further infos how to configure the SOC to verify
				the bootloader can be found in the "High
				Assurance Boot Version Application Programming
				Interface Reference Manual" as part of the
				Freescale Code Signing Tool, available on the
				manufacturer's website.

				Example:
				CSF 0x2000

113 114 115 116 117 118 119 120 121
	DATA			type address value

				type: word=4, halfword=2, byte=1
				address: physycal register address
				value: value to be set in register
				All values are in in hexadecimal.
				Example (write to IOMUXC):
				DATA 4 0x73FA88a0 0x200

122
The processor support up to 60 register programming commands for IMXIMAGE_VERSION 1
123
and 220 register programming commands for IMXIMAGE_VERSION 2.
124
An error is generated if more commands are found in the configuration file.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212

3. All commands are optional to program.

Setup a SD Card for booting
--------------------------------

The following example prepare a SD card with u-boot and a FAT partition
to be used to stored the kernel to be booted.
I will set the SD in the most compatible mode, setting it with
255 heads and 63 sectors, as suggested from several documentation and
howto on line (I took as reference the preparation of a SD Card for the
Beagleboard, running u-boot as bootloader).

You should start clearing the partitions table on the SD card. Because
the u-boot image must be stored at the offset 0x400, it must be assured
that there is no partition at that address. A new SD card is already
formatted with FAT filesystem and the partition starts from the first
cylinder, so we need to change it.

You can do all steps with fdisk. If the device for the SD card is
/dev/mmcblk0, the following commands make the job:

1. Start the fdisk utility (as superuser)
	fdisk /dev/mmcblk0

2. Clear the actual partition

Command (m for help): o

3. Print card info:

Command (m for help): p
Disk /dev/mmcblk0: 1981 MB, 1981284352 bytes

In my case, I have a 2 GB card. I need the size to set later the correct value
for the cylinders.

4. Go to expert mode:

Command (m for help): x

5. Set card geometry

Expert command (m for help): h
Number of heads (1-256, default 4): 255

Expert command (m for help): s
Number of sectors (1-63, default 16): 63
Warning: setting sector offset for DOS compatiblity

We have set 255 heads, 63 sector. We have to set the cylinder.
The value to be set can be calculated with:

	cilynder = <total size> / <heads> / <sectors> / <blocksize>

in this example,
	1981284352 / 255 / 63 / 512 = 239.x = 239


Expert command (m for help): c
Number of cylinders (1-1048576, default 60032): 239

6. Leave the expert mode
Expert command (m for help): r

7. Set up a partition

Now set a partition table to store the kernel or whatever you want. Of course,
you can set additional partitions to store rootfs, data, etc.
In my example I want to set a single partition. I must take care
to not overwrite the space where I will put u-boot.

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-239, default 1): 3
Last cylinder, +cylinders or +size{K,M,G} (3-239, default 239): +100M

Command (m for help): p

Disk /dev/mmcblk0: 1967 MB, 1967128576 bytes
255 heads, 63 sectors/track, 239 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xb712a870

Wolfgang Denk's avatar
Wolfgang Denk committed
213 214
	Device Boot	 Start	       End	Blocks	 Id  System
/dev/mmcblk0p1		     3		16	112455	 83  Linux
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239

I have set 100MB, leaving the first 2 sectors free. I will copy u-boot
there.

8. Write the partition table and exit.

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

9. Copy u-boot.imx on the SD card

I use dd:

dd if=u-boot.imx of=/dev/mmcblk0 bs=512 seek=2

This command copies the u-boot image at the address 0x400, as required
by the processor.

Now remove your card from the PC and go to the target. If evrything went right,
the u-boot prompt should come after power on.

------------------------------------------------
Author: Stefano babic <sbabic@denx.de>