Linux驱动设备树-工具使用

简介: 文件.dts是一种ASCII文本格式的设备树描述,由于其是纯文本形式的,所以十分适合开发人员阅读和修改。由于多个开发板会对应于同一款SoC,所以,可以将关于同一款SoC的DT配置提取成一个单独文件,称其为.dtsi文件。.dts和.dtsi文件类似于C语言的源文件和头文件的关系,所以.dtsi同样可以包含其他的.dtsi文件。

DTS文件


文件.dts是一种ASCII文本格式的设备树描述,由于其是纯文本形式的,所以十分适合开发人员阅读和修改。由于多个开发板会对应于同一款SoC,所以,可以将关于同一款SoC的DT配置提取成一个单独文件,称其为.dtsi文件。.dts和.dtsi文件类似于C语言的源文件和头文件的关系,所以.dtsi同样可以包含其他的.dtsi文件。


ARM平台下的.dts相关的文件描述,一般都放在/arch/arm/boot/dts子目录下。关于DT文件的基本语法的使用,可以参考


DTC


DTC(Device Tree Compiler)是DTS的编译/反编译的工具,同样,其非常类似于GNU的gcc编译器。它可以将.dts源文件编译成Linux内核可以识别的二进制文件.dtb。


Ubuntu系统下,DTC默认是没有安装的,可以通过如下命令进行安装:


sudo apt-get isntall device-tree-compiler


Linux内核编译过程中,我们可以使用make dtbs命令,对于.dts文件进行编译,编译出来的.dtb文件位于/arch/arm/boot/dts子目录下。


DTC也可以将.dtb文件反编译为.dts文件(在调试.dtb存在问题,可以通过DTC将其反编译为.dts文件,那么就可以进一步的确定问题的根源)。反编译的命令如下:


`dtc -I dtb -O dts -o ***.dts ***.dtb`


DTB


.dtb文件是.dts文件经过DTC进行编译后产生的二进制文件,该二进制文件为结构化的文件,其包括文件头、文件内容等其它内容。真实情况下,我们在制作电路板的NAND系统分区时,会为DTB文件单独保留一块分区。系统启动时,BootLoader(必须具有DT处理功能)会读取DTB分区中的数据,并将其加载到内存的固定区域,Linux内核会读取该区域的DTB数据,并将其进行解析成结构化的设备配置供内核使用。


对于不支持DT的BootLoader,可以将DTB与Linux kernel的image文件绑定为一个文件,这需要再配置内核时使能CONFIG_ARM_APPENDED_DTB选项。


Bindings文件


在Linux内核的./Documentation/devicetree/bindings/目录下,每个使用到了DT的驱动都定义了dts文件的配置方式。


bindings文件详细描述了设备如何在设备树中定义节点和属性,通过参考该文件基本可以写出针对于该设备的设备树描述。例如,对于gpio-fan的配置如下:


Bindings for fan connected to GPIO lines 
Required properties:
- compatible : "gpio-fan"
- gpios: Specifies the pins that map to bits in the control value,
  ordered MSB-->LSB.
- gpio-fan,speed-map: A mapping of possible fan RPM speeds and the 
  control value that should be set to achieve them. This array
  must have the RPM values in ascending order.
Optional properties:
- alarm-gpios: This pin going active indicates something is wrong with
  the fan, and a udev event will be fired.
Examples:
gpio_fan {
    compatible = "gpio-fan";
    gpios = <&gpio1 14 1
     &gpio1 13 1>; 
    gpio-fan,speed-map = <00   
      3000 1
      6000 2>; 
    alarm-gpios = <&gpio1 15 1>; 
};  


设备树的绑定文档主要包括如下内容:


  • 关于该模块最基本的描述


  • 必需属性描述(Required properties)


  • 可选属性描述(Optional properties)


  • 一个实例


编写bindings文件是编写设备驱动程序的好习惯,这样非常便于开发人员快速的编写出DT描述。


#BootLoader支持 U-boot从v1.1.3开始支持设备树功能,同时在ARM内核支持设备树时,U-Boot同样实现了对于ARM平台下的设备树支持。


U-Boot可以从NAND、SD或者TFTP中提取DTB文件到特定的内存中,而后Linux内核可以从该内存中读取DTB文件。U-boot在命令行下,可以使用fdt addr配置DTB在内存中的存放位置,如:


U-Boot> fdt addr 0x81000000



相关文章
|
6月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
470 4
|
10月前
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
|
6月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
502 16
|
6月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
290 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
8月前
|
缓存 监控 Linux
Linux系统性能调优技巧和相关工具
Linux 作为一种应用应展和系统服务的优选操作系统,在处理性能和端到端点评估上持有出色表现。但是,在处理进程或系统处于低效状态时,性能调优就显得十分重要。本文将探讨一些 Linux 系统性能调优的常用技巧,并介绍相关工具
223 0
Linux系统性能调优技巧和相关工具
|
8月前
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
855 16
|
7月前
|
数据采集 编解码 运维
一文讲完说懂 WowKey -- WowKey 是一款 Linux 类设备的命令行(CLT)运维工具
WowKey 是一款面向 Linux 类设备的命令行运维工具,支持自动登录、批量执行及标准化维护,适用于企业、团队或个人管理多台设备,显著提升运维效率与质量。
|
10月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
461 32
|
8月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
424 0