1--------------------------------------------- 2Imximage Boot Image generation using mkimage 3--------------------------------------------- 4 5This document describes how to set up a U-Boot image that can be booted 6by Freescale MX25, MX35, MX51, MX53 and MX6 processors via internal boot 7mode. 8 9These processors can boot directly from NAND, SPI flash and SD card flash 10using its internal boot ROM support. MX6 processors additionally support 11boot from NOR flash and SATA disks. All processors can boot from an internal 12UART, if booting from device media fails. 13Booting from NOR flash does not require to use this image type. 14 15For more details refer Chapter 2 - System Boot and section 2.14 16(flash header description) of the processor's manual. 17 18This implementation does not use at the moment the secure boot feature 19of the processor. The image is generated disabling all security fields. 20 21Command syntax: 22-------------- 23./tools/mkimage -l <mx u-boot_file> 24 to list the imx image file details 25 26./tools/mkimage -T imximage \ 27 -n <board specific configuration file> \ 28 -e <execution address> -d <u-boot binary> <output image file> 29 30For example, for the mx51evk board: 31./tools/mkimage -n ./board/freescale/mx51evk/imximage.cfg \ 32 -T imximage -e 0x97800000 \ 33 -d u-boot.bin u-boot.imx 34 35You can generate directly the image when you compile u-boot with: 36 37$ make u-boot.imx 38 39The output image can be flashed on the board SPI flash or on a SD card. 40In both cases, you have to copy the image at the offset required for the 41chosen media devices (0x400 for both SPI flash or SD card). 42 43Please check Freescale documentation for further details. 44 45Board specific configuration file specifications: 46------------------------------------------------- 471. This file must present in the $(BOARDDIR) and the name should be 48 imximage.cfg (since this is used in Makefile). 492. This file can have empty lines and lines starting with "#" as first 50 character to put comments. 513. This file can have configuration command lines as mentioned below, 52 any other information in this file is treated as invalid. 53 54Configuration command line syntax: 55--------------------------------- 561. Each command line is must have two strings, first one command or address 57 and second one data string 582. Following are the valid command strings and associated data strings:- 59 Command string data string 60 -------------- ----------- 61 IMXIMAGE_VERSION 1/2 62 1 is for mx25/mx35/mx51 compatible, 63 2 is for mx53/mx6 compatible, 64 others is invalid and error is generated. 65 This command need appear the fist before 66 other valid commands in configuration file. 67 68 BOOT_FROM nand/spi/sd/onenand/nor/sata 69 Example: 70 BOOT_FROM spi 71 DATA type address value 72 73 type: word=4, halfword=2, byte=1 74 address: physycal register address 75 value: value to be set in register 76 All values are in in hexadecimal. 77 Example (write to IOMUXC): 78 DATA 4 0x73FA88a0 0x200 79 80The processor support up to 60 register programming commands for IMXIMAGE_VERSION 1 81and 121 register programming commands for IMXIMAGE_VERSION 2. 82An error is generated if more commands are found in the configuration file. 83 843. All commands are optional to program. 85 86Setup a SD Card for booting 87-------------------------------- 88 89The following example prepare a SD card with u-boot and a FAT partition 90to be used to stored the kernel to be booted. 91I will set the SD in the most compatible mode, setting it with 92255 heads and 63 sectors, as suggested from several documentation and 93howto on line (I took as reference the preparation of a SD Card for the 94Beagleboard, running u-boot as bootloader). 95 96You should start clearing the partitions table on the SD card. Because 97the u-boot image must be stored at the offset 0x400, it must be assured 98that there is no partition at that address. A new SD card is already 99formatted with FAT filesystem and the partition starts from the first 100cylinder, so we need to change it. 101 102You can do all steps with fdisk. If the device for the SD card is 103/dev/mmcblk0, the following commands make the job: 104 1051. Start the fdisk utility (as superuser) 106 fdisk /dev/mmcblk0 107 1082. Clear the actual partition 109 110Command (m for help): o 111 1123. Print card info: 113 114Command (m for help): p 115Disk /dev/mmcblk0: 1981 MB, 1981284352 bytes 116 117In my case, I have a 2 GB card. I need the size to set later the correct value 118for the cylinders. 119 1204. Go to expert mode: 121 122Command (m for help): x 123 1245. Set card geometry 125 126Expert command (m for help): h 127Number of heads (1-256, default 4): 255 128 129Expert command (m for help): s 130Number of sectors (1-63, default 16): 63 131Warning: setting sector offset for DOS compatiblity 132 133We have set 255 heads, 63 sector. We have to set the cylinder. 134The value to be set can be calculated with: 135 136 cilynder = <total size> / <heads> / <sectors> / <blocksize> 137 138in this example, 139 1981284352 / 255 / 63 / 512 = 239.x = 239 140 141 142Expert command (m for help): c 143Number of cylinders (1-1048576, default 60032): 239 144 1456. Leave the expert mode 146Expert command (m for help): r 147 1487. Set up a partition 149 150Now set a partition table to store the kernel or whatever you want. Of course, 151you can set additional partitions to store rootfs, data, etc. 152In my example I want to set a single partition. I must take care 153to not overwrite the space where I will put u-boot. 154 155Command (m for help): n 156Command action 157 e extended 158 p primary partition (1-4) 159p 160Partition number (1-4): 1 161First cylinder (1-239, default 1): 3 162Last cylinder, +cylinders or +size{K,M,G} (3-239, default 239): +100M 163 164Command (m for help): p 165 166Disk /dev/mmcblk0: 1967 MB, 1967128576 bytes 167255 heads, 63 sectors/track, 239 cylinders 168Units = cylinders of 16065 * 512 = 8225280 bytes 169Disk identifier: 0xb712a870 170 171 Device Boot Start End Blocks Id System 172/dev/mmcblk0p1 3 16 112455 83 Linux 173 174I have set 100MB, leaving the first 2 sectors free. I will copy u-boot 175there. 176 1778. Write the partition table and exit. 178 179Command (m for help): w 180The partition table has been altered! 181 182Calling ioctl() to re-read partition table. 183 1849. Copy u-boot.imx on the SD card 185 186I use dd: 187 188dd if=u-boot.imx of=/dev/mmcblk0 bs=512 seek=2 189 190This command copies the u-boot image at the address 0x400, as required 191by the processor. 192 193Now remove your card from the PC and go to the target. If evrything went right, 194the u-boot prompt should come after power on. 195 196------------------------------------------------ 197Author: Stefano babic <sbabic@denx.de> 198