blob: 25847c9c739d41b2c93b543f352930838f92d94d [file] [log] [blame]
Doimage tool
============
Doimage tool is used for preparation of binary image of boot loader for
a various types of supported boot media.
The tool is supplied in source code adopted for Linux compilation.
Supported boot media types:
- SPI flash
- NAND flash
- SATA
- PEX
- TWSI
- UART
Doimage supports a special secure boot mode. In this mode image and its headers
are signed using private RSA key (up to 2048 bit).
An appropriate signatures and public RSA key needed for verification are
embedded in the image header preventing unauthorized boot image replacement.
The validity of supplied RSA public key is then verified against eFuse values
stored in SOC. Additionally the binary image can be encrypted using AES-128-CBC
algorithm and then decrypted by the HW using key stored in SOC eFuse.
Usage:
======
Doimage uses list of parameters supplied in command line.
Some parameters are mandatory and some are optional.
Below is the command line format used by doimage utility:
doimage <mandatory parameters> [optional parameters] image_in image_out [header_out]
Mandatory parameters:
=====================
-T image_type One of the following types:
sata\uart\flash\bootrom\nand\hex\pex
The "flash" type should be used for SPI flash images.
If "sata" type is selected the command output will produce two
files - header and image.
-D image_dest Hexadecimal RAM destination address used for copying the binary
image during the boot stage.
-E image_exec Hexadecimal address in system RAM used for image execution
(entry point). If selected image is "flash" and the image
destination address is 0xFFFFFFFF then the image will be
executed directly from flash media bypassing copy to RAM stage.
In this case the execution address should be locates in SPI
flash memory space.
-S image_source Hexadecimal byte offset of image from the boot media device
start point. For sata devices the meaning is LBA offset in
sectors from the beginning of disk.
The parameter is mandatory only for sata and ignored for pex
and twsi boot devices. If omitted, it assumed equal to 0 and
the binary image is located next to the image headers.
The offset must be aligned to 512 bytes boundary for nand boot
devices. Typical offset value for sata devices is 0x3F
-W hex_width Mandatory only for "hex" image type.
Possible values are 8,16,32,64 bytes.
Mandatory parameters for NAND boot source:
=========================================
-L nand_blk_size
NAND block size in KBytes (decimal int in range 64-16320).
This parameter is ignored for flashes with 512B pages.
Such small page flashes always use 16K block sizes
-N nand_cell_typ
NAND cell technology type (char: M for MLC, S for SLC)
-P nand_pg_size
NAND page size: (decimal 512, 2048, 4096 or 8192)\n");
-C nand_ecc
Option is IGNORED in this release (1=Hamming, 2=RS, 3=None)
Optional parameters:
===================
-M twsi_file ASCII file name that contains the list of I2C init registers
to be set by the HW.
See the example file supplied with this utility
-G exec_file ascii file name that contains binary routine (ARM 5TE THUMB)
to run before the bootloader image execution. The routine must contain
an appropriate code for saving all registers at the routine start and
restore them before return from the routine.
-R regs_file ASCII file name that contains the list of address-value
pairs used for configuring the device registers before
the binary image execution. Usually used for DRAM configuration.
-X pre_pad Hexadecimal number of bytes to be placed before the binary image.
-X post_pad Hexadecimal number of bytes to be placed after the binary image.
-H header_mode The header mode. Supported modes:
-H 1 : creates one file (image_out) for header and image
-H 2 : creates two files - (image_out) for image and
(header_out) for header
-H 3 : creates one file (image_out) for header only
-H 4 : creates one file (image_out) for image only
Secure mode parameters:
======================
-Z prv_key ASCII file name containing RSA private key up to 2048 bit length.
The RSA key is used for creating signatures for the image header
and binary image. Additionally it allows generation of public RSA
key, which is embedded in the image header.
The key file must be in TXT format - see the example key supplied
with this utility.
This parameter activates secure boot mode and enables all other
secure mode parameters usage.
-A aes_key ASCII file name containing AES-128 symmetric key.
The boot image (execpting the header) will be encrypted using
AES-128-CBC algorithm. The key file must be in binary format
(array of 16 bytes).
See the example key file supplied with this utility.
-J jtag_delay Enable JTAG and delay the boot sequence execution
by <jtag_delay> * 10 seconds.
Used for overriding the eFuse value for devices with
disabled JTAG functionality.
-B hex_box_id Hexadecimal Box ID in range of 0 to 0xffffffff
F hex_flash_id Hexadecimal Flash ID in range of 0 to 0xffff
Usage examples:
==============
1. Image for SPI flash. Secure mode is enabled. JTAG support is enabled.
Delay boot execution by 10 sec for JTAG probe connection.
Run custom executable with 2 parameters and DRAM registers configuration
before running U-boot. Load U-boot into DRAM address 0x600000,
entry point is 0x670000.
doimage -T flash -D 0x600000 -E 0x670000 -Z rsa_priv.txt -A aes128.bin \
-J 1 -B 0xDEADBEEF -F 0xBABE -R dramregs_400db_A.txt -G binhdr.bin -K 2 \
u-boot-db88f6281abp.bin u-boot-db88f6281abp_400db_flash_secure.bin
2. Image for NAND flash. Flash page size is 2K. Secure mode is enabled.
JTAG support is enabled. Delay boot execution by 10 sec for JTAG probe connection.
Run custom executable with 2 parameters and DRAM registers configuration
before running U-boot. Load U-boot into DRAM address 0x600000,
entry point is 0x670000.
doimage -T nand -D 0x600000 -E 0x670000 -P 2048 -Z rsa_priv.txt -A aes128.bin \
-J 1 -B 0xDEADBEEF -F 0xBABE -R dramregs_400db_A.txt -G binhdr.bin -K 2 \
u-boot-db88f6281abp.bin u-boot-db88f6281abp_400db_nand_secure.bin
3. Image for UART. Secure mode is disabled.
doimage -T uart -D 0x600000 -E 0x670000 -R dramregs_400db_A.txt \
u-boot-db88f6281abp.bin u-boot-db88f6281abp_400db_uart.bin
4. Image for SATA disk. Secure mode is enabled. JTAG support is enabled.
Delay boot execution by 10 sec for JTAG probe connection.
Run custom executable with 2 parameters and DRAM registers configuration
before running U-boot. Load U-boot into DRAM address 0x600000,
entry point is 0x670000. U-boot image is located at LBA sector 0x3F.
Create two images - one for header and one for application.
doimage -T sata -D 0x600000 -E 0x670000 -S 0x3F -Z rsa_priv.txt -A aes128.bin \
-J 1 -B 0xDEADBEEF -F 0xBABE -R dramregs_400db_A.txt -G binhdr.bin -K 2 \
u-boot-db88f6281abp.bin u-boot-db88f6281abp_400db_sata_img_secure.bin \
u-boot-db88f6281abp_400db_sata_hdr_secure.bin
In order to copy SATA boot image and header to disk the following technique is used:
1. Copy the header (first SATA device /dev/sda is uses as example)
dd if=<header file name> of=/dev/sda seek=1
2. Copy the boot image (u-boot) to the first partition (starting by default at LBAsector 63)
dd if=<uboot with checksum> of=/dev/sda1