FIT介绍-1

1、编译

FIT image 文件的编译过程很简单,根据实际情况,编写image source file之后(假设名称为u-boot.its),在命令行使用mkimage工具编译即可:

./tools/mkimage [-D dtc_options] [-f fit-image.its|-f auto|-f auto-conf|-F] [-b <dtb> [-b <dtb>]] [-E] [-B size] [-i <ramdisk.cpio.gz>] fit-image<dtb> file is used with -f auto, it may occur multiple times.-D => set all options for device tree compiler-f => input filename for FIT source-i => input filename for ramdisk file-E => place data outside of the FIT structure-B => align size in hex for FIT structure and header-b => append the device tree binary to the FIT-t => update the timestamp in the FIT

其中:

-D:指定 DTC(Device Tree Compiler)编译器的选项;
-f :指定需要编译的image source file,并在后面指定需要生成的image文件(一般以.itb为后缀,例如u-boot.itb)。
-i:指定用于创建 FIT 镜像的 RAM disk 文件名;
-E:将image data file放置在FIT结构外的选项;
-B:指定 FIT 结构和头的对齐大小;
-b:支持将一个或多个设备树二进制文件附加到 FIT 文件中(可使用 -b <dtb> 多次指定);
-t:更新 FIT 文件中的时间戳;
其中-E这个字段比较重要,它会影响生成的itb的文件布局;
如果没有指定该选项,其生成的itb文件格式和dts文件编译生成的dtb文件布局一样,包括data属性指定的/incbin/("bl31_0x00040000.bin")文件也会以二进制数据格式的形式放到FIT结构内;
如果指定了该选项,会为data属性指向的文件扩充data-offset(指定文件的偏移,这个偏移是以FIT结构结束地址下一扇区起始地址开始计算的)、以及data-size(指定文件的大小)属性,而在data属性指向的二进制数据文件将会被追加到FIT结构的尾部(也是扇区对齐);下面我们分析的itb文件布局格式就是这种;

因此我们可以采用如下方式生成u-boot.itb文件:

./tools/mkimage  -f  u-boot.its -E u-boot.itb

u-boot.itb生成后,也可以使用mkimage命令查看它的信息:

tools/mkimage -l u-boot.itb
2,源文件its
/dts-v1/;/ {description = "Configuration to load ATF before U-Boot";#address-cells = <1>;images {uboot {description = "U-Boot (64-bit)";data = /incbin/("u-boot-nodtb.bin");type = "standalone";os = "U-Boot";arch = "arm64";compression = "none";load = <0x00200000>;hash {algo = "sha256";};};atf@1 {description = "ARM Trusted Firmware";data = /incbin/("bl31_0x00040000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0x00040000>;entry = <0x00040000>;hash {algo = "sha256";};};atf@2 {description = "ARM Trusted Firmware";data = /incbin/("bl31_0xff3b0000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xff3b0000>;hash {algo = "sha256";};};atf@3 {description = "ARM Trusted Firmware";data = /incbin/("bl31_0xff8c0000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xff8c0000>;hash {algo = "sha256";};};atf@4 {description = "ARM Trusted Firmware";data = /incbin/("bl31_0xff8c1000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xff8c1000>;hash {algo = "sha256";};};atf@5 {description = "ARM Trusted Firmware";data = /incbin/("bl31_0xff8c2000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xff8c2000>;hash {algo = "sha256";};};fdt {description = "U-Boot device tree blob";data = /incbin/("u-boot.dtb");type = "flat_dt";arch = "arm64";compression = "none";hash {algo = "sha256";};};};configurations {default = "config";config {description = "Rockchip armv8 with ATF";rollback-index = <0x0>;firmware = "atf@1";loadables = "uboot", "atf@2" , "atf@3" , "atf@4" , "atf@5" , "atf@6" ;fdt = "fdt";signature {algo = "sha256,rsa2048";padding = "pss";key-name-hint = "dev";sign-images = "fdt", "firmware", "loadables";};};};};

由于configs/xx_defconfig中配置了CONFIG_SPL_FIT_GENERATOR,因此这里会通过脚本生成u-boot.its;

CONFIG_SPL_FIT_GENERATOR=“arch/arm/mach-rockchip/make_fit_atf.py”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/734951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenFeign的学习总结

1.Fegin调用只有在微服务之间才会使用&#xff0c;以前的单体项目用不到&#xff0c;因为单体项目不会涉及到分库的概念&#xff0c;并且单体项目就一个应用&#xff0c;想用的功能都可以直接方法调用&#xff0c;但是微服务就不行&#xff0c;跨服务的调用只能通过http的操作&…

Google浏览器122.下载驱动

打开网址&#xff1a;Chrome for Testing availability (googlechromelabs.github.io) 选择stable 选择对应的驱动就行

flink重温笔记(十四): flink 高级特性和新特性(3)——数据类型及 Avro 序列化

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 14 天啦&#xff01;学习了 flink 高级特性和新特性之数据类型及 avro 序列化&#xff0c;主要是解决大数据领域数据规范化写入和规范化读取的问题&#xff0c;avro 数据结构可以节约存储空间&#xff0c;本文中结合企业真…

JVM运行时数据区概述以及分别存放的内容

JVM的运行时数据区是JVM在执行Java程序时用于存储数据和状态信息的内存区域。它分为多个部分&#xff0c;每个部分都有其特定的作用和存放的内容。 1. 方法区&#xff08;Method Area&#xff09; 作用&#xff1a;方法区是所有线程共享的内存区域&#xff0c;用于存放已被虚…

Java面试题总结9:mybatis

mybatis的优缺点 优点&#xff1a; 基于SQL语句编程&#xff0c;不会对应用程序或者数据库的现有设计造成任何影响&#xff0c;SQL写在XML里&#xff0c;解除sql与程序代码的耦合&#xff0c;便于统一管理&#xff0c;提供XML标签&#xff0c;支持编写动态SQL语句&#xff0c…

开源向量数据库介绍

在开源矢量数据库的世界里&#xff0c;有些名字因其性能、灵活性和健壮性而脱颖而出。 1. Milvus Milvus 由 Zilliz 推出&#xff0c;是一款高度可定制的开源矢量数据库&#xff0c;在处理大规模数据方面大放异彩。由于其出色的可扩展性&#xff0c;当你需要处理大量数据时&a…

判断链表回文

题目&#xff1a; //方法一&#xff0c;空间复杂度O(n) class Solution { public:bool isPalindrome(ListNode* head) {vector<int> nums; //放进数组后用双指针判断ListNode* cur head;while(cur){nums.emplace_back(cur->val);cur cur->next;}for(int i0…

如何在非spring环境中调用service中的方法

什么是非spring环境 非Spring环境指的是不使用Spring框架来管理和配置应用程序的运行时环境。在Spring框架中&#xff0c;开发者可以利用依赖注入、面向切面编程&#xff08;AOP&#xff09;、事务管理、安全性、数据访问等特性来简化企业级应用程序的开发。当应用程序不依赖于…

力扣同类题:重排链表

很明显做过一次 class Solution { public:void reorderList(ListNode* head) {if(!head||!head->next)return;ListNode *fasthead,*lowhead;ListNode *prenullptr,*curnullptr,*nextnullptr;while(fast->next!nullptr){fastfast->next;if(fast->next)fastfast->…

深入理解操作系统Operator System(2)

目录 操作系统对上的管理 系统调用接口 用户操作接口&#xff08;库函数&#xff09; 系统调用和库函数的概念 结构层次示意图 总结 为什么要有操作系统❓ 上次主要介绍了操作系统的"管理"和操作系统对下的管理。本篇主要是对上的管理。 操作系统对上的管理 …

04-ESP32S3-GPIO

ESP32S3-IDF GPIO GPIO简介 ESP32S3提供了多达45个物理GPIO管脚&#xff0c;这些管脚不仅可以作为通用的输入输出接口&#xff0c;还可以连接到内部外设信号。通过GPIO交换矩阵、IO MUX和RTC IO MUX&#xff0c;可以灵活地配置外设模块的输入信号来源于任何GPIO管脚&#xff0…

k8s存储

目录 前瞻 emptyDir存储卷 hostPath存储卷 nfs共享存储卷 PVC 和 PV NFS使用PV和PVC 配置nfs存储 定义PV 定义PVC 测试访问 搭建 StorageClass nfs-client-provisioner &#xff0c;实现 NFS 的动态 PV 创建 在192.168.75.40节点上安装nfs&#xff0c;并配置nfs服务 …

python:标准正态同质性检验(Standard Normal Homogeneity Test,SNHT) 突变点检测(以NDVI时间序列为例)

作者:CSDN @ _养乐多_ 本文将介绍标准正态同质性检验(Standard Normal Homogeneity Test,SNHT) 突变点检测代码。以 NDVI 时间序列为例。输入数据可以是csv,一列NDVI值,一列时间。代码可以扩展到遥感时间序列突变检测(突变年份、突变幅度等)中。 结果如下图所示, 文…

k8s中的service组件

背景 service组件是k8s中类似于nginx网关的入口&#xff0c;通过它可以访问到背后的pod提供的服务&#xff0c;并且自带负载均衡的功能&#xff0c;本文就简单看下service组件 k8s中的service组件 假设我们要配置一个tomcat的service集群&#xff0c;配置步骤如下 1.首先我们…

【UE5】映射方式:动作映射(Action Mappings) 与 轴映射(Axis Mappings)

在游戏中有很多功能需要键盘按键触发&#xff0c;接下来我们会制作键盘输入设置 项目资源文末百度网盘自取 打开项目设置面板 选择Input 按键的映射方式有两种&#xff1a; 一种是动作映射 / 操作映射(Action Mappings)&#xff0c;这种方式可以响应按键的按下和抬起。当键盘…

AI安全白皮书 | “深度伪造”产业链调查以及四类防御措施

以下内容&#xff0c;摘编自顶象防御云业务安全情报中心正在制作的《“深度伪造”视频识别与防御白皮书》&#xff0c;对“深度伪造”感兴趣的网友&#xff0c;可在文章留言中写下邮箱&#xff0c;在该白皮书完成后&#xff0c;会为您免费寄送一份电子版。 “深度伪造”就是创建…

关于安卓ZXing条码识别(一)引入源码

背景 从0-1引入安卓zxing&#xff0c;实现条码识别 环境 win10 as4 jdk8 引入 首先&#xff0c;官方网站&#xff0c;就是源码。链接 选择你要引入的分支&#xff0c;这里博主选择的是最近更新的分支&#xff0c;如下图&#xff1a; 上图中&#xff0c;1和2都需要引入&am…

新能源汽车结构组成

01 车身 新能源汽车的车身结构与传统燃油车有很大不同。一般来说&#xff0c;新能源汽车会采用轻量化车身设计&#xff0c;例如使用大量铝合金、高强度钢和其它轻量材料制作车身。这些材料相比传统钢材更轻盈&#xff0c;从而可以减轻整个车辆的重量&#xff0c;提高车辆的续…

mysql笔记:6. 存储引擎

文章目录 查看引擎信息常用引擎介绍InnoDBMyISAMMEMORY存储引擎的选择 数据库存储引擎是数据库底层组件&#xff0c;数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等&#xff0c;使用不同的存储引擎&#…

MySQL客户端和服务器进程通信的几种方式

TCP/IP 真实环境中&#xff0c;数据库服务器进程和客户端进程可能运行在不同的主机中&#xff0c;它们之间必须通过网络来进行通讯。MySQL采用TCP作为服务器和客户端之间的网络通信协议。在网络环境下&#xff0c;每台计算机都有一个唯一的IP地址&#xff0c;如果某个进程有需…