| --------------------------------------------- |
| Imximage Boot Image generation using mkimage |
| --------------------------------------------- |
| |
| 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. |
| |
| These processors can boot directly from NAND, SPI flash and SD card flash |
| using its internal boot ROM support. MX6 processors additionally support |
| boot from NOR flash and SATA disks. All processors can boot from an internal |
| 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 |
| -------------- ----------- |
| IMXIMAGE_VERSION 1/2 |
| 1 is for mx25/mx35/mx51 compatible, |
| 2 is for mx53/mx6 compatible, |
| others is invalid and error is generated. |
| This command need appear the fist before |
| other valid commands in configuration file. |
| |
| 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/\ |
| mach-imx/imximage.cfg |
| Example: |
| BOOT_OFFSET FLASH_OFFSET_STANDARD |
| |
| BOOT_FROM nand/spi/sd/onenand/nor/sata |
| |
| This command is parallel to BOOT_OFFSET and |
| is to be deprecated in favor of BOOT_OFFSET. |
| |
| Example: |
| BOOT_FROM spi |
| |
| 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 |
| |
| 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 |
| |
| The processor support up to 60 register programming commands for IMXIMAGE_VERSION 1 |
| and 220 register programming commands for IMXIMAGE_VERSION 2. |
| An error is generated if more commands are found in the configuration file. |
| |
| 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: |
| |
| cylinder = <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 |
| |
| Device Boot Start End Blocks Id System |
| /dev/mmcblk0p1 3 16 112455 83 Linux |
| |
| 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> |