(08)ATF工具

FIP

固件镜像包FIP(Firmware Image Package)是用于将启动的所有镜像打包到一个文件中,以便于启动从存储介质中加载。TF-A中定义的存储抽象层可以从FIP中加载镜像,而FIP是从存储介质中加载。

FIP布局由目录表(ToC)和负载数据组成。ToC Header是头部标记信息;ToC Entry是每个镜像的入口信息,Data就是对应的镜像负载数据;ToC End Marker是结束标记。

------------------
| ToC Header     |
|----------------|
| ToC Entry 0    |
|----------------|
| ToC Entry 1    |
|----------------|
| ToC End Marker |
|----------------|
|                |
|     Data 0     |
|                |
|----------------|
|                |
|     Data 1     |
|                |
------------------

ToC header和Entry格式如下,每个镜像都是由toc_entry来标记,通过toc_entry就可找到实际的镜像负载数据。

typedef struct fip_toc_header {
	uint32_t	name;				/* ToC名,验证header的有效性 */
	uint32_t	serial_number;		/* 非零序列号 */
	uint64_t	flags;				/* 相关的标志 */
} fip_toc_header_t;

typedef struct fip_toc_entry {
	uuid_t		uuid;				/* UUID,标记镜像的唯一性 */
	uint64_t	offset_address;		/* 镜像在FIP中的偏移地址 */
	uint64_t	size;				/* 镜像大小 */
	uint64_t	flags;				/* 镜像标志 */
} fip_toc_entry_t;

FIP工具源码位于tools/fiptool,可以单独编译出fiptool。

$ make PLAT=qemu fiptool
$ ./fiptool
usage: fiptool [--verbose] <command> [<args>]
Global options supported:
  --verbose     Enable verbose output for all commands.

Commands supported:
  info          List images contained in FIP.
  create        Create a new FIP with the given images.
  update        Update an existing FIP with the given images.
  unpack        Unpack images from FIP.
  remove        Remove images from FIP.
  version       Show fiptool version.
  help          Show help for given command.

fiptool支持infocreate等如上命令,例如将BL2、BL31镜像进行打包,命令如下。

$ ./fiptool create --tb-fw bl2.bin --soc-fw bl31.bin fip.bin

证书工具

证书工具cert_create在安全启动的流程中需要使用。工具源码位于tools/cert_create,同理也可以单独编译出cert_create,由于其依赖于openssl版本,最好指定其源码路径。

$ make PLAT=qemu certtool \
OPENSSL_DIR=/home/xieli/project/6---ATF/openssl-3.0.8
$ ./cert_ceate -h
...
--tb-fw-cert <arg>               Trusted Boot FW Certificate (output file)
--rot-key <arg>                  Root Of Trust key (input/output file)
...

证书工具加载镜像和密钥,并生成信任链中所有需要用的X509证书。

加密工具

加密工具enctool是用于对镜像进行加密的。工具源码位于tools/encrypt_fw,同理也可以单独编译出cert_create。

$ make PLAT=qemu enctool
$ ./encrypt_fw -h


The firmware encryption tool loads the binary image and
outputs encrypted binary image using an encryption key
provided as an input hex string.

Usage:
        ./encrypt_fw [OPTIONS]

Available options:
        -h,--help                        Print this message and exit
        -f,--fw-enc-status <arg>         Firmware encryption status flag (with SSK=0 or BSSK=1).
        -a,--key-alg <arg>               Encryption key algorithm: 'gcm' (default)
        -k,--key <arg>                   Encryption key (for supported algorithm).
        -n,--nonce <arg>                 Nonce or Initialization Vector (for supported algorithm).
        -i,--in <arg>                    Input filename to be encrypted.
        -o,--out <arg>                   Encrypted output filename.

encrypt_fw工具使用加密密钥,加密镜像,目前仅支持AES_GCM算法。

欢迎关注“安全有理”微信公众号。

(08)ATF工具_第1张图片

你可能感兴趣的:(ATF,ATF)