【精读Uboot】its文件语法

news2024/9/22 10:00:41

前面我们分析了SPL汇编的执行过程,在SPL之后就要进入另一个loader加载镜像了。在正式分析跳转流程之前,我们需要搞清楚在我们平时下载的imx-boot-xxx这个镜像是如何组成的。

在编译完Uboot、optee和ATF之后,会产生u-boot-spl.binu-boot-nodtb.binimx8mp-evk.dtbbl31.bintee.bin。首先将ddr的固件和u-boot-spl.bin拼接为u-boot-spl-ddr.bin,这个bin文件就是SPL部分。其余的bin文件需要组装为一个含uboot.bin的文件,然后将这俩个bin组装起来,加上IVT等头信息就得到了最终可用的imx-boot-xxx

1 image source file

Linux kernel在ARM架构中引入device tree(全称是flattened device tree,后续将会以FDT代称)的时候,怀揣着一个Unify Kernel的梦想,即同一个Image,通过切换不同的dtb支持多个不同的平台。device tree在kernel中普及之后,Uboot也引入了device tree。因此为了和kernel类似,Uboot也需要一种新的image格式,这种格式需要支持以下特性:

  1. Image中需要包含多个dtb文件
  2. 可以方便的选择使用哪个dtb文件

结合以上两点需求,Uboot推出了新的image格式:FIT image,其中FIT是flattened image tree的简称。它利用了Device Tree Source files(DTS)的语法,生成的image文件也和dtb文件类似(从its编译为itb)。

1.1 image source file的语法分析

下面是i.MX8MP使用的its文件,在image标签中声明了uboot-1fdt-1atf-1tee-1子标签,分别代表uboot,dtb,atf和tee。

对于子标签当中的定义,description描述这个子标签是什么;data声明这个bin文件的位置和名称;type声明这个子标签的类型;arch表明最终固件运行的架构;compression表示是否是压缩格式;load声明这个固件在RAM中的加载地址,子固件需要被SPL拷贝到RAM中的对应地址;entry表示二进制文件入口地址。

configurations中声明你需要的配置选择项,可以是多个不同的配置。firmware声明uboot标签名, loadables声明可以跳转的其余固件,fdt声明dtb的标签名。

在SPL 阶段,首先优先加载firmware节点,将fdt加载到紧跟着firmware之后的位置,然后尝试加载kernel节点;失败了再去加载loadables节点里的固件。这里的加载是指加载到RAM的指定位置。

/dts-v1/;

/ {
	description = "Configuration to load ATF before U-Boot";
	#address-cells = <1>;

	images {
		uboot-1 {
			description = "U-Boot (64-bit)";
			data = /incbin/("u-boot-nodtb.bin");
			type = "standalone";
			arch = "arm64";
			compression = "none";
			load = <0x40200000>;
		};
		fdt-1 {
			description = "evk";
			data = /incbin/("evk.dtb");
			type = "flat_dt";
			compression = "none";
		};
		atf-1 {
			description = "ARM Trusted Firmware";
			data = /incbin/("bl31.bin");
			type = "firmware";
			arch = "arm64";
			compression = "none";
			load = <0x00970000>;
			entry = <0x00970000>;
		};
		tee-1 {
			description = "TEE firmware";
			data = /incbin/("tee.bin");
			type = "firmware";
			arch = "arm64";
			compression = "none";
			load = <0x56000000>;
			entry = <0x56000000>;
		};
	};
	configurations {
		default = "config-1";

		config-1 {
			description = "evk";
			firmware = "uboot-1";
			loadables = "atf-1", "tee-1";
			fdt = "fdt-1";
		};
	};
};

1.2 示意图

下图是i.MX8MP平台在SPL阶段解包FIT后存放各bin文件的示意图。

its.drawio

2. soc.mk

最终的imx-boot文件由 soc.mk制作。u-boot-spl-ddr.bin声明了如何将DDR的固件和u-boot-spl.bin拼接起来;u-boot.itb声明了如何制作fit文件;flash_evk_no_hdmi声明了如何制作最终的imx-boot-xxx

请自行理解这段Makefile语法。

SPL_LOAD_ADDR = 0x920000
SPL_FSPI_LOAD_ADDR = 0x920000
TEE_LOAD_ADDR =  0x56000000
ATF_LOAD_ADDR = 0x00970000

lpddr4_imem_1d = lpddr4_pmu_train_1d_imem$(LPDDR_FW_VERSION).bin
lpddr4_dmem_1d = lpddr4_pmu_train_1d_dmem$(LPDDR_FW_VERSION).bin
lpddr4_imem_2d = lpddr4_pmu_train_2d_imem$(LPDDR_FW_VERSION).bin
lpddr4_dmem_2d = lpddr4_pmu_train_2d_dmem$(LPDDR_FW_VERSION).bin

u-boot-spl-ddr.bin: u-boot-spl.bin $(lpddr4_imem_1d) $(lpddr4_dmem_1d) $(lpddr4_imem_2d) $(lpddr4_dmem_2d)
	@objcopy -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 $(lpddr4_imem_1d) lpddr4_pmu_train_1d_imem_pad.bin
	@objcopy -I binary -O binary --pad-to 0x4000 --gap-fill=0x0 $(lpddr4_dmem_1d) lpddr4_pmu_train_1d_dmem_pad.bin
	@objcopy -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 $(lpddr4_imem_2d) lpddr4_pmu_train_2d_imem_pad.bin
	@cat lpddr4_pmu_train_1d_imem_pad.bin lpddr4_pmu_train_1d_dmem_pad.bin > lpddr4_pmu_train_1d_fw.bin
	@cat lpddr4_pmu_train_2d_imem_pad.bin $(lpddr4_dmem_2d) > lpddr4_pmu_train_2d_fw.bin
	@dd if=u-boot-spl.bin of=u-boot-spl-pad.bin bs=4 conv=sync
	@cat u-boot-spl-pad.bin lpddr4_pmu_train_1d_fw.bin lpddr4_pmu_train_2d_fw.bin > u-boot-spl-ddr.bin
	@rm -f u-boot-spl-pad.bin lpddr4_pmu_train_1d_fw.bin lpddr4_pmu_train_2d_fw.bin lpddr4_pmu_train_1d_imem_pad.bin lpddr4_pmu_train_1d_dmem_pad.bin lpddr4_pmu_train_2d_imem_pad.bin

u-boot.itb: $(dtb)
	./$(PAD_IMAGE) $(TEE)
	./$(PAD_IMAGE) bl31.bin
	./$(PAD_IMAGE) u-boot-nodtb.bin $(dtb)
	BL32=$(TEE) DEK_BLOB_LOAD_ADDR=$(DEK_BLOB_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) ../$(SOC_DIR)/mkimage_fit_atf.sh $(dtb) > u-boot.its
	mkimage -E -p 0x3000 -f u-boot.its u-boot.itb
	@rm -f u-boot.its $(dtb)
	

flash_evk_no_hdmi: $(MKIMG) u-boot-spl-ddr.bin u-boot.itb
	./mkimage_imx8 -version $(VERSION) -fit -loader u-boot-spl-ddr.bin $(SPL_LOAD_ADDR) -second_loader u-boot.itb 0x40200000 0x60000 -out $(OUTIMG)

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

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

相关文章

element-plus 踩的坑

原来node版本是16.17.0,装element-plus死活装不上&#xff0c;结果要把node版本升级到18以上&#xff0c;真坑呀&#xff0c;也没人告诉我要这么干

如何调用Zabbix API获取主机信息

自Zabbix 1.8版本被引进以后&#xff0c;Zabbix API开始扮演着越来越重要的角色&#xff0c;它可以为批量操作、第三方软件集成以及其他应用提供可编程接口。 在运维实践中&#xff0c;Zabbix API还有更多巧妙的应用。 面对规模庞大的监控设备&#xff0c;可能会出现某台机器发…

Python接口自动化测试 —— logging日志

logging模块的日志级别&#xff1a;日志级别一共有5个从低到高如下&#xff0c; 作用是在当你给python函数赋予日志器时&#xff0c; 需要自己标记日志级别&#xff08;后面会用到&#xff09; debug&#xff08;调试级别&#xff09;&#xff1a;严重程度最低级别&#xff0c…

2.6 PE结构:导出表详细解析

导出表&#xff08;Export Table&#xff09;是Windows可执行文件中的一个结构&#xff0c;记录了可执行文件中某些函数或变量的名称和地址&#xff0c;这些名称和地址可以供其他程序调用或使用。当PE文件执行时Windows装载器将文件装入内存并将导入表中登记的DLL文件一并装入&…

三显智能氮气柜温度、湿度和氧含量控制介绍

三显智能氮气柜是用来存放易氧化物料&#xff0c;利用氮气达到防潮防氧化目的的柜体&#xff0c;通过多种技术实现温度、湿度和氧含量的显示和控制。 一、温度控制&#xff1a;智能氮气柜一般配备温度传感器和恒温控制装置。温度传感器会实时监测柜内温度&#xff0c;并将数据反…

【Spring AOP】

目录 &#x1f957;1 AOP 的思想 &#x1f35a;2 AOP 的组成 &#x1f95a;2.1 切面 &#x1f359;3 AOP 的实现 &#x1f364;3.1 添加 Spring AOP 依赖 &#x1f96b;3.2 定义切面 &#x1f363;3.3 定义切点 &#x1f373;3.4 实现通知 &#x1f354;4 AOP 实现的一个例子 1…

算法通关村第十七关:白银挑战-贪心高频问题

白银挑战-贪心高频问题 1. 区间问题 所有的区间问题&#xff0c;参考下面这张图 1.1 判断区间是否重叠 LeetCode252 https://leetcode.cn/problems/meeting-rooms/ 思路分析 因为一个人在同一时刻只能参加一个会议&#xff0c;因此题目的本质是判断是否存在重叠区间 将区…

报错解决:RuntimeError: expected scalar type Long but found Float

文章目录 报错信息原因代码示例错误版改正 报错信息 RuntimeError: expected scalar type Long but found Float原因 nn.Linear需要作用于浮点数&#xff0c;这里可能输入了整数类型的张量作为参数。 代码示例 错误版 import torch import torch.nn as nn a torch.tensor…

53、springboot对websocket的支持有两种方式-------1、基于注解开发 WebSocket ,简洁实现多人聊天界面

基于注解开发 WebSocket –注解就是&#xff1a; OnOpen、 OnClose 、 OnMessage 、OnError这些 ★ WebSocket的两种开发方式 ▲ Spring Boot为WebSocket提供了两种开发方式&#xff1a; 基于spring-boot-starter-websocket.jar开发WebSocket 基于Spring WebFlux开发WebSoc…

常用消息中间件有哪些

RocketMQ 阿里开源&#xff0c;阿里参照kafka设计的&#xff0c;Java实现 能够保证严格的消息顺序 提供针对消息的过滤功能 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RabbitMQ Erlang实现&#xff0c;非常重量级&#xff0c;更适…

只依赖OPENCV的工作服安全帽检测YOLOV8S

工地安全帽工作服检测Y8S&#xff0c;采用YOLOV8S训练模型&#xff0c;然后使用OPENCV的DNN调用&#xff0c;彻底拜托PYTORCH依赖&#xff0c;可以在C,PYTHON,ANDROID上跑。附件是C生成的效果测试&#xff08;只需解压将图片或者视频放入VIDEOS文件夹&#xff0c;文件夹没图片或…

宝宝餐椅儿童商品认证和ASTM F404检测标准的重要性

大家都知道儿童餐椅是宝宝饮食的重要伙伴。它们为宝宝提供了一个舒适的环境&#xff0c;让宝宝在吃饭的时候更愉快&#xff0c;更健康。然而&#xff0c;许多家长可能不知道&#xff0c;亚马逊美国站售卖的儿童餐椅需要进行一系列严格的认证&#xff0c;以保护我们宝贝们的安全…

平板触控笔哪款好用?好用的第三方apple pencil

而对于那些把ipad当做学习工具的人而言&#xff0c;苹果Pencil就成了必备品。但因为苹果Pencil太贵了&#xff0c;不少的学生们买不起。因此&#xff0c;最佳的选择还是平替电容笔&#xff0c;今天在这里整理了一些高性价比的电容笔&#xff01; 一、挑选电容笔的要点&#xf…

视频云存储/安防监控/AI分析/视频AI智能分析网关:占道经营算法

在国家倡导“地摊经济”的发展下&#xff0c;越来越多的人们投身于摆摊大潮&#xff0c;街道上都是随处可见的流动摊贩。虽然“地摊经济”有利于个人的经济增长&#xff0c;但有很多流动摊贩无视法规&#xff0c;随意摆摊或占道经营&#xff0c;这种行为不仅影响城市容貌&#…

Excel怎么批量生成文件夹

Excel怎么批量生成文件夹的链接: https://jingyan.baidu.com/article/ea24bc398d9dcb9b63b3312f.html

提升网络安全防御能力的几个方面

提升网络安全防御能力对于个人和组织来说都至关重要。网络安全是一个全面的概念&#xff0c;包括保护个人信息、防止恶意攻击和确保网络资源的安全。在这篇文章中&#xff0c;我将介绍几个方面来提高网络安全防御能力其中包括IP地址查询。 首先&#xff0c;IP地址查询是一种网…

Uniapp中使用uQRCode二维码跳转小程序页面

下载插件 uQRCode官网地址 引入插件 文件如下 //--------------------------------------------------------------------- // github https://github.com/Sansnn/uQRCode //---------------------------------------------------------------------let uQRCode = {};(functio…

colab使用(基础入门)——随手记

挂载到google drive 挂载目录/content/drive from google.colab import drive drive.mount(/content/drive) 图解colab读取Google Drive 文件 - 知乎 下载文件 !curl -L https://dl.fbaipublicfiles.com/imagebind/imagebind_huge.pth -o imagebind_ckpt参数&#xff1a;[-…

案例精选|菏泽公共交通集团日志审计系统建设方案

菏泽公共交通集团有限公司成立于1977年&#xff0c;是市属国有大型公益性企业。随着公交优先政策的出台和企业内部改革的不断深化&#xff0c;菏泽公交集团事业有了飞速发展。 随着5G、大数据、人工智能等数字化技术不断深化应用&#xff0c;近年来菏泽公交集团持续推进智慧公…

简述视频智能分析EasyCVR视频汇聚平台如何通过“AI+视频融合”技术规避八大特殊作业风险

视频智能分析EasyCVR视频汇聚平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储磁盘阵列、录…