123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- ---------------------------------------------
- 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/\
- imx-common/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:
- 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
- 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>
|