1.Linux内核DTB文件启动的源码几种方式
2.Linux驱动开发 - Linux 设备树学习 - DTS语法
Linux内核DTB文件启动的几种方式
Device Tree简介
Linus Torvalds在年提出Device Tree概念,作为一种硬件描述数据结构,源码它源于OpenFirmware。源码在Linux2.6中,源码ARM架构的源码板级硬件细节过多地被硬编码在内核中。Device Tree引入后,源码神途私服源码许多硬件细节可以直接传递给Linux,源码减少内核中的源码冗余编码。
Device Tree由结点和属性组成,源码描述硬件信息如CPU、源码总线、源码设备的源码连接关系。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文件。ce改源码启动时需要加载uImage和dtb文件。
设备树和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提供了一种灵活的硬件描述方式,使内核与硬件解耦。axure源码下载通过合并uImage和dtb文件,或使用FIT Image格式,可简化启动流程,支持不同硬件开发板。
Linux驱动开发 - Linux 设备树学习 - DTS语法
设备树(Device Tree)是一种描述硬件设备的树形结构文件,主要用于Linux系统中描述板级设备信息,如CPU数量、内存基地址、IIC接口和SPI接口所连接的设备等。设备树的主干是系统总线,IIC控制器、GPIO控制器、SPI控制器等设备是eclipse源码修改系统总线上的分支。例如,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的形式体现。通过该目录可以查看根节点的属性和子节点,如模型、兼容性、地址等信息。这些信息与设备树文件中的描述相匹配。