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



相关文章
|
4天前
|
数据挖掘 大数据 Linux
探索Linux中的snice命令:一个虚构但启发性的数据分析工具
`snice`是一个想象中的Linux命令,用于低优先级地从大数据集中抽样数据。它结合`nice`和`sampling`,支持多种抽样策略,如随机和分层。参数包括指定样本数、策略、输入输出文件和进程优先级。示例:`snice -n 1000 -s random -i large_log.txt -o sample_log.txt`。使用时注意资源管理、数据完整性及权限,并与其它工具结合使用。虽然虚构,但体现了Linux工具在数据分析中的潜力。
|
10天前
|
缓存 网络协议 算法
【Linux系统编程】深入剖析:四大IO模型机制与应用(阻塞、非阻塞、多路复用、信号驱动IO 全解读)
在Linux环境下,主要存在四种IO模型,它们分别是阻塞IO(Blocking IO)、非阻塞IO(Non-blocking IO)、IO多路复用(I/O Multiplexing)和异步IO(Asynchronous IO)。下面我将逐一介绍这些模型的定义:
|
23天前
|
存储 Prometheus 监控
Linux技术工具:bpftrace介绍
Linux技术工具:bpftrace介绍
29 7
|
25天前
|
监控 算法 Linux
探索Linux中的lz4命令:高效的数据压缩工具
**探索Linux中的LZ4工具:快速数据压缩。LZ4算法提供高速压缩与解压缩,适合实时数据处理。命令行工具如`lz4c`用于文件压缩(`lz4c file.txt compressed.lz4`)和解压缩(`lz4c -d compressed.lz4 decompressed.txt`)。特点是速度快、低内存占用,可选压缩级别。注意命令的实际形式取决于安装的实现,使用前应查阅文档。**
|
21天前
|
Linux 数据处理
Linux中的numfmt命令:数字格式化的强大工具
**numfmt命令在Linux中用于数字格式化,如转换进制、添加千位分隔符、处理字节单位。它支持从文件读取数字并能自定义分隔符、小数位数。例如:`numfmt 12345` 输出12,345(十进制),`numfmt -b 255` 输出11111111(二进制),`numfmt --to=iec 1000000` 输出976.6K(字节单位)。使用时注意选项组合及单位标准。**
|
28天前
|
Linux 数据处理
Linux命令`install`详解:不仅仅是安装工具
`install`命令在Linux中并非仅用于安装软件,而是用于精确复制文件和目录,设置权限及所有权。它能创建目标目录、处理符号链接并保留时间戳。例如,`install -m 644 source.txt /dest`用于复制文件并设置权限,`install -d -m 755 /dest/dir`创建目录。使用时要注意权限设置,避免误操作,并记录命令以备恢复。
|
28天前
|
Linux 程序员 芯片
【Linux驱动】普通字符设备驱动程序框架
【Linux驱动】普通字符设备驱动程序框架
|
10天前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed &#39;s/apple/orange/g&#39; example.txt`替换文本,`/error/d`删除包含&quot;error&quot;的行,`a\---`在每行后加&quot;---&quot;。使用时注意备份、测试命令和理解正则表达式。
|
10天前
|
Linux 开发者
Linux底层驱动社区饮水机系统详解
在Linux驱动开发中,入门时通常会关注驱动程序的三大核心步骤:入口函数、出口函数和声明许可证。这些步骤构成了驱动程序的基本结构,是驱动与内核交互的基础。下面是对这三个步骤的简要说明:
|
12天前
|
监控 算法 Linux
Linux下工具tc详细讲解及限制IP和端口实例
TC (Traffic Control) 是Linux内核中提供的一个用于控制和管理网络流量的强大工具,它允许用户实现QoS(Quality of Service)策略,包括带宽限制、优先级控制、延迟保证等。TC基于内核的队列 discipline (qdisc) 和流量类别(class) 体系结构,允许对进入或离开网络接口的数据流进行复杂的整形和过滤。