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 打包格式介绍
1 基础介绍 FIT(flattened image tree)是U-Boot⽀持的⼀种新固件类型的引导⽅案,⽀持任意多个image打包和校 验。FIT 使⽤ its (image source file) ⽂件描述image信息,最后通过mkimage⼯具⽣成 itb (flattened image tree blob) …...
 
虚拟机安装宝塔的坑
问题: 在虚拟机中centos7和centos8中安装宝塔之后,无法访问面板。 解决: 1.先关闭防火墙(如果本机能够ping通相关端口,则不用关闭防火墙) 2.最新的宝塔会自动开启ssl协议,需要手动关闭。…...
 
Ubuntu使用QtCreator + CMake 开发C/C++程序
平台 OS: Ubuntu 20.04 cmake: 3.16.3 IDE: Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Built on Feb 5 2020 12:48:30 From revision b2ddeacfb5 Copyright 2008-2019 The Qt Company Ltd. All rights reserved. The program …...
 
【分布式监控】zabbix与grafana连接
1.在zabbix- server服务端安装grafana,并启动服务 先在官网下载软件 https://grafana.com/grafana/download/9.4.7?editionenterprise&pggraf&plcmtdeploy-box-1#可以翻译成中文介绍,很详细的教程 yum install -y https://dl.grafana.com/ent…...
 
02-编程猜谜游戏
本章通过演示如何在实际程序中使用 Rust,你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。 本章将实现一个经典的初学者编程问题:猜谜游戏。 工作原理如下:程序将随机生成一个介于 1 和 100 之间的整数。然后,程序…...
 
Web3解密:区块链技术如何颠覆传统互联网
随着区块链技术的崛起,Web3正逐渐成为新一代互联网的代名词。它不再依赖中心化的权威机构,而是通过去中心化、透明、安全的特性,为用户带来更为开放和公正的互联网体验。本文将深入解密Web3,揭示区块链技术如何颠覆传统互联网的基…...
 
java小项目:简单的收入明细记事本,超级简单(不涉及数据库,通过字符串来记录)
一、效果 二、代码 2.1 Acount类 package com.demo1;public class Acount {public static void main(String[] args) {String details "收支\t账户金额\t收支金额\t说 明\n"; //通过字符串来记录收入明细int balance 10000;boolean loopFlag true;//控制循…...
 
域环境权限提升
Windows系统配置错误 在Windows系统中,攻击者通常会通过系统内核溢出漏来提权,但是如果碰到无法通过系统内核溢出漏洞法国提取所在服务器权限的情况,就会系统中的配置错误来提权。Windows系统中常见哦欸之错误包括管理员凭证配置错误&#x…...
 
【Debian】非图形界面Debian10.0.0安装xfce和lxde桌面
一、安装 1. Debian10.0.0安装xfce桌面 sudo apt update sudo apt install xfce4 startxfce4 2. Debian10.0.0安装lxde桌面 sudo apt-get install lxde安装后重启电脑。 二、说明 XFCE、LXDE 和 GNOME 是三个流行的桌面环境,它们都是为类 Unix 操作系统设计…...
 
极狐GitLab 线下『 DevOps专家训练营』成都站开班在即
成都机器人创新中心联合极狐(GitLab)隆重推出极狐GitLab DevOps系列认证培训课程。该课程主要面向使用极狐GitLab的DevOps工程师、安全审计人员、系统运维工程师、系统管理员、项目经理或项目管理人员,完成该课程后,学员将达到DevOps的专家级水平&#x…...
 
片外存储器_FLASH的页、扇区、块介绍
目录标题 1、什么是FLASH存储器?2、Flash中页、扇区、块是什么意思?有什么区别?2.1、芯片内部框图2.2、页2.3、扇区2.4、块2.5、包含示意图 3、使用FLASH 时候,必须知道的事。 1、什么是FLASH存储器? FLASH属于广义的ROM&#x…...
Python——字符串的基本操作
⼀、 创建 s1 lenovo s2 "QF" s3 """hello lenovo""" s4 hello 亮 s5 """hello shark """ s6 hello world ⼆、简单使⽤ 1.\ 转义符 testimony This shirt doesn\t fit me words hello \ns…...
【cuda】四、基础概念:Cache Tiled 缓存分块技术
缓存分块是一种内存优化技术,主要用于提高数据的局部性(Locality),以减少缓存未命中(Cache Miss)的次数。在现代计算机体系结构中,处理器(CPU)的速度通常比内存快得多。因…...
 
[C#]winform部署openvino官方提供的人脸检测模型
【官方框架地址】 https://github.com/sdcb/OpenVINO.NET 【框架介绍】 OpenVINO(Open Visual Inference & Neural Network Optimization)是一个由Intel推出的,针对计算机视觉和机器学习任务的开源工具套件。通过优化神经网络ÿ…...
Java中对日期的处理
Java中对日期的处理 这个案例主要掌握: 1.怎么获取系统当前时间 2.String-->Date 3.Date-->String Import java.text.SimpleDateFormat; Import java.util.Date; public class DateTest01{ public static void main(String[] args) throws Exception{ //获取…...
 
【Linux install】Ubuntu和win双系统安装及可能遇到的所有问题
文章目录 1.前期准备1.1 制作启动盘1.2关闭快速启动、安全启动、bitlocker1.2.1 原因1.2.2 进入BIOSshell命令行进入BIOSwindows设置中高级启动在开机时狂按某个键进入BIOS 1.2.3 关闭Fast boot和Secure boot 1.3 划分磁盘空间1.3.1 查看目前的虚拟内存大小 2.开始安装2.1 使用…...
 
Helm Dashboard — Kubernetes 中管理 Helm 版本的 GUI
Helm Dashboard 通过提供图形用户界面,使在 Kubernetes 中管理 Helm 版本变得更加容易,这是许多开发人员所期望的。它可用于在 Kubernetes 中创建、部署和更新应用程序的版本,并跟踪其状态。 本文将探讨 Helm Dashboard 提供的特性和优势&am…...
【Guava笔记01】Guava Cache本地缓存的常用操作方法
这篇文章,主要介绍Guava Cache本地缓存的常用操作方法。 目录 一、Guava Cache本地缓存 1.1、引入guava依赖 1.2、CacheBuilder类 1.3、Guava-Cache使用案例...
 
Flink(十三)【Flink SQL(上)SqlClient、DDL、查询】
前言 最近在假期实训,但是实在水的不行,三天要学完SSM,实在一言难尽,浪费那时间干什么呢。SSM 之前学了一半,等后面忙完了,再去好好重学一遍,毕竟这玩意真是面试必会的东西。 今天开始学习 Flin…...
 
Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲
写本章前想起题主初学Labview时面对一个位移台程序,傻傻搞不清局部变量和属性节点值有什么区别,概念很模糊。所以更新这篇文章让大家更具象和深刻的去理解这几个概念,看完记得点赞加关注喔~ 本文程序源代码附在后面,大家可以自行下…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
 
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
 
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
 
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
