1.u-boot使用make编译出现找不到dtc命令,源码如何解决啊
2.Linux内核DTB文件启动的源码几种方式
3.uboot fitimage签名分析
4.Linux驱动开发 - Linux 设备树学习 - DTS语法
u-boot使用make编译出现找不到dtc命令,如何解决啊
我在ubuntu.上编译uboot时也遇到了这个问题,源码dtc是源码device-tree-compiler的缩写,即设备树编译器,源码说明系统中没有安装这个编译器,源码libnet 源码分析我用的源码是apt-get install device-tree-compiler安装后就可以成功编译了哈。
Linux内核DTB文件启动的源码几种方式
Device Tree简介
Linus Torvalds在年提出Device Tree概念,作为一种硬件描述数据结构,源码它源于OpenFirmware。源码在Linux2.6中,源码ARM架构的源码板级硬件细节过多地被硬编码在内核中。Device Tree引入后,源码许多硬件细节可以直接传递给Linux,源码减少内核中的源码冗余编码。
Device Tree由结点和属性组成,描述硬件信息如CPU、总线、租房 app 源码设备的连接关系。Bootloader将Device Tree传递给内核,内核识别并展开硬件,创建如platform_device、i2c_client等设备对象。
Device Tree编译
Device Tree文件(dts)需编译为dtb格式,便于Linux和Bootloader识别。编译工具是dtc,可以通过在Linux源码目录下执行命令安装。
早期Linux内核启动
早期Linux内核通过硬编码的方式描述硬件信息,如在arch/arm/mach-xxx文件中。zImage文件需要通过u-boot转换为uImage后,通过bootm命令启动。
设备树启动
Linux-3.x后内核统一启用Device Tree,硬件信息描述在dts文件中。编译内核时使用make dtbs生成dtb文件。启动时需要加载uImage和dtb文件。exfat源码下载
设备树和uImage合并
dtb文件将硬件信息与内核分离,通过合并uImage和dtb文件,可为不同硬件开发板提供统一内核。例如,使用cat命令合并文件后,使用mkimage生成uImage文件。
u-boot FIT image合并
使用FIT Image格式合并uImage和dtb文件。FIT Image利用Device Tree Source files语法,通过mkimage命令生成itb文件。u-boot需要配置支持FIT Image启动。
总结
Device Tree提供了一种灵活的硬件描述方式,使内核与硬件解耦。通过合并uImage和dtb文件,或使用FIT Image格式,可简化启动流程,支持不同硬件开发板。
uboot fitimage签名分析
fitimage本质上是django框架源码dtb类型的结构,用于整合不同数据为一个文件,便于管理。例如,在使用bootm启动kernel时,可以通过特定命令将initramfs与fitimage结合,实现方便的SecureBoot实现,确保kernel, system.dtb, rootfs的安全性。《u-boot FIT image介绍》提供详尽的fitimage结构解析及制作方法。
制作签名的fitimage步骤如下:
1. 制作安全的its文件。例如,可以使用相关命令生成。
2. 创建test.bin文件,并确保其路径与its对应。
3. 根据its的描述创建key文件,使用RSA算法对文件进行SHA1签名。
4. 创建一个空dtb文件用于存放dev.crt公钥,并将test.dts转换为test.dtb。连锁系统源码
5. 使用特定命令制作符合要求的fitimage。
制作过程中的目录结构需按指定方式组织,如包含"-K test.dtb"参数指定公钥输入位置,uboot在启动fitimage时会验证其合法性。
签名后的fitimage结构可通过dtc命令转换,详细属性解析见《doc/uImage.FIT/signature.txt》。
签名过程涉及signature/hashed-nodes获取被签名区域及signature/value获取签名值,通过特定代码实现。
uboot验证签名的逻辑主要包括获取images偏移、计算image下每个子节点hash并添加hash node、对"/configurations"进行签名,使用fit_config_get_hash_list函数获取节点列表,fit_config_process_sig函数处理签名数据。
fitimage启动认证代码处理多conf配置,支持替换key实现签名替换或对不同区域进行单独签名,确保系统安全。
uboot在启动过程中进行签名验证,确保文件安全。详细源码参考uboot源码下的《doc/uImage.FIT/signature.txt》及《u-boot FIT image介绍》文档。
Linux驱动开发 - Linux 设备树学习 - DTS语法
设备树(Device Tree)是一种描述硬件设备的树形结构文件,主要用于Linux系统中描述板级设备信息,如CPU数量、内存基地址、IIC接口和SPI接口所连接的设备等。设备树的主干是系统总线,IIC控制器、GPIO控制器、SPI控制器等设备是系统总线上的分支。例如,IIC控制器分为IIC1和IIC2,其中IIC1连接了FT和ATC这两个IIC设备,IIC2仅连接了MPU一个设备。
在开发Linux设备驱动时,需要了解DTS(Device Tree Source)、DTB(Device Tree Binary)和DTC(Device Tree Compiler)之间的关系。DTC工具依赖于特定的源代码文件,最终生成主机文件DTC。要编译DTS文件,只需在Linux源码根目录下执行命令“make all”或“make dtbs”,后者仅编译设备树。
在开发板中,每个板子都对应一个DTS文件,以I.MX6ULL芯片为例,打开arch/arm/boot/dts/Makefile文件,可以找到特定编译配置。当选中I.MX6ULL芯片后,与该芯片相关的DTS文件会被编译成DTB文件。若要为新的板子编写DTS文件,只需新建此板子对应的DTS文件,并在dtb-$(CONFIG_SOC_IMX6ULL)下添加对应的DTB文件名,这样在编译设备树时会自动编译为二进制文件。
在Linux内核源码分析学习方面,可参考指定地址。此外,Linux内核源码分析交流群提供学习资源,包括书籍、视频等,通过加入该群可以获取这些资源。
在编写设备树文件时,需要了解DTS语法。DTS文件支持头文件,扩展名为.dtsi。设备树节点通过属性信息描述,属性是键值对形式。例如,在imx6ull.dtsi文件中,描述了CPU架构、频率、外设寄存器地址范围等信息。设备节点是树形结构中描述设备的节点,通过节点名字和地址来描述。
兼容性属性(compatible)是设备树中非常重要的属性,用于将设备与驱动绑定。属性值是一个字符串列表,格式为“厂商名称, 设备名称”。Linux下的外设驱动通常会使用这些兼容性属性来查找与设备匹配的驱动程序。
模型属性(model)描述设备模块信息,如设备名字。状态属性(status)记录设备状态,可选状态包括正在运行、已停止、错误等。地址属性(address-cells和size-cells)用于描述设备子节点的地址信息,reg属性用于描述设备地址空间资源信息。ranges属性用于描述设备子地址和父地址的映射关系。
在产品开发过程中,设备树文件需要随着硬件需求的变更而更新。例如,需要在I.MX6U-ALPHA开发板的I2C1接口上添加一个新设备时,需要在对应的DTS文件中向已有节点添加新子节点。
在Linux内核启动时,设备树信息会被解析并在根文件系统中以目录/proc/devicetree的形式体现。通过该目录可以查看根节点的属性和子节点,如模型、兼容性、地址等信息。这些信息与设备树文件中的描述相匹配。