rockchip 平台 linux FIT 打包格式介绍

2024-01-20 06:04

本文主要是介绍rockchip 平台 linux FIT 打包格式介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 基础介绍


FIT(flattened image tree)是U-Boot⽀持的⼀种新固件类型的引导⽅案,⽀持任意多个image打包和校
验。FIT 使⽤ its (image source file) ⽂件描述image信息,最后通过mkimage⼯具⽣成 itb (flattened image
tree blob) 镜像。its⽂件使⽤ DTS 的语法规则,⾮常灵活,可以直接使⽤libfdt 库和相关⼯具。
FIT 是U-Boot默认⽀持且主推的固件格式,SPL和U-Boot阶段都⽀持对FIT格式的固件引导。更多信息请
参考:
因为官⽅的FIT功能⽆法满⾜实际产品需求,所以RK平台对FIT进⾏了适配和优化。所以FIT⽅案中必须
使⽤RK U-Boot编译⽣的mkimage⼯具,不能使⽤PC⾃带的mkimage。


2 范例介绍


如下以u-boot.its和u-boot.itb作为范例进⾏介绍。
/images :静态定义了所有的资源,相当于⼀个 dtsi⽂件;
/configurations :每个 config 节点都描述了⼀套可启动的配置,相当于⼀个板级dts⽂件。
default = :指明默认启⽤的config;
./doc/uImage.FIT/
/dts-v1/;
/ {
description = "Simple image with OP-TEE support";
#address-cells = <1>;
images {
uboot {
description = "U-Boot";
data = /incbin/("./u-boot-nodtb.bin");
type = "standalone";
os = "U-Boot";
arch = "arm";
compression = "none";
使⽤mkimage⼯具和its⽂件可以⽣成itb⽂件:
fdtdump 命令可以查看 itb⽂件内容:
load = <0x00400000>;
hash {
algo = "sha256";
};
};
optee {
description = "OP-TEE";
data = /incbin/("./tee.bin");
type = "firmware";
arch = "arm";
os = "op-tee";
compression = "none";
load = <0x8400000>;
entry = <0x8400000>;
hash {
algo = "sha256";
};
};
fdt {
description = "U-Boot dtb";
data = /incbin/("./u-boot.dtb");
type = "flat_dt";
compression = "none";
hash {
algo = "sha256";
};
};
};
// configurations 节点下可以定义任意多个不同的conf节点,但实际产品⽅案上我们只需要⼀个
conf即可。
configurations {
default = "conf";
conf {
description = "Rockchip armv7 with OP-TEE";
rollback-index = <0x0>;
firmware = "optee";
loadables = "uboot";
fdt = "fdt";
signature {
algo = "sha256,rsa2048";
padding = "pss";
key-name-hint = "dev";
sign-images = "fdt", "firmware", "loadables";
};
};
};
};
            mkimage + dtc
[u-boot.its] + [images]  =========>   [u-boot.itb]
cjh@ubuntu:~/uboot-nextdev/u-boot$ fdtdump fit/u-boot.itb | less
/dts-v1/;
// magic: 0xd00dfeed
// totalsize: 0x600 (1536)
// off_dt_struct: 0x48
// off_dt_strings: 0x48c
// off_mem_rsvmap: 0x28
// version: 17
// last_comp_version: 16
// boot_cpuid_phys: 0x0
// size_dt_strings: 0xc3
// size_dt_struct: 0x444
/memreserve/ 7f34d3411000 600;
/ {
  version = <0x00000001>;        // 新增固件版本号
  totalsize = <0x000bb600>;       // 新增字段描述整个itb⽂件的⼤小
  timestamp = <0x5ecb3553>;       // 新增当前固件⽣成时刻的时间戳
  description = "Simple image with OP-TEE support";
  #address-cells = <0x00000001>;
  images {
    uboot {
      data-size = <0x0007ed54>;   // 新增字段描述固件⼤小
      data-position = <0x00000a00>; // 新增字段描述固件偏移
      description = "U-Boot";
      type = "standalone";
      os = "U-Boot";
      arch = "arm";
      compression = "none";
      load = <0x00400000>;
      hash {
        // 新增固件的sha256校验和
        value = <0xeda8cd52 0x8f058118 0x00000003 0x35360000 0x6f707465
0x0000009f 0x00000091 0x00000000>;
        algo = "sha256";
     };
   };
    optee {
      data-size = <0x0003a058>;
      data-position = <0x0007f800>;
      description = "OP-TEE";
      type = "firmware";
      arch = "arm";
      os = "op-tee";
      compression = "none";
      load = <0x08400000>;
      entry = <0x08400000>;
      hash {
        value = <0xa569b7fc 0x2450ed39 0x00000003 0x35360000 0x66647400
0x00001686 0x000b9a00 0x552d426f>;
        algo = "sha256";
     };
   };
    fdt {


3 itb结构


itb本质是fdt_blob + images的⽂件集合,有如下两种打包⽅式,RK平台⽅案采⽤结构2⽅式。
      data-size = <0x00001686>;
      data-position = <0x000b9a00>;
      description = "U-Boot dtb";
      type = "flat_dt";
      compression = "none";
      hash {
        value = <0x0f718794 0x78ece7b2 0x00000003 0x35360000 0x00000001
0x6e730000 0x636f6e66 0x00000000>;
        algo = "sha256";
     };
   };
 };
  configurations {
    default = "conf";
    conf {
      description = "Rockchip armv7 with OP-TEE";
      rollback-index = <0x00000001>; // 固件防回滚版本号,没有⼿动指定时默认为0
      firmware = "optee";
      loadables = "uboot";
      fdt = "fdt";
      signature {
        algo = "sha256,rsa2048";
        padding = "pss";
        key-name-hint = "dev";
        sign-images = "fdt", "firmware", "loadables";
     };
   };
 };
};
    fdt blob
|-----------------------------------|
|  |------|  |------|  |------|   |
|  | img0 |  | img1 |  | img2 |   | 结构1:image在fdt_blob内,即:itb = fdt_blob(含
img)
|  |------|  |------|  |------|   |
|-----------------------------------|
|--------------|------|------|------|
|        |    |    |    |
|  fdt blob  | img0 | img1 | img2 | 结构2:image在fdt_blob外,即itb = fdt_blob +
img
|        |    |    |    |
|--------------|------|------|------|

这篇关于rockchip 平台 linux FIT 打包格式介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625019

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动