设备树详讲
Posted linux-37ge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设备树详讲相关的知识,希望对你有一定的参考价值。
一. DTS 语法
1.1. dts 头文件
1.1.1. 可以使用#include来引用
1.2. 关于/dts-v1/;
1.2.1. 用于dts的版本信息,一般使用/dts-v1/版本
1.3. 设备节点
1.3.1. 分析下图节点
<1>. “/”是跟节点,每个设备树只有一个根节点
<2>.设备树中节点命名格式如下 :
node-name@unit-address
有时我们看到的是:label: node-name@unit-address;引入 label 的目的就是为了方便访问节点 比如通过&cpu0 就可以访问“cpu@0”这个节点,上图的chosen,memory都属于label。
<3>. 每个节点都有不同属性,不同的属性又有不同的内容,属性都是键值对,值可以为空或任意的字节流。设备树源码中常用的几种数据形式:字符串,u32,数组
1.3.2. 标准属性
1.3.2.1. compatible 属性
compatible 属性也叫做“兼容性”属性,这是非常重要的一个属性! compatible 属性的值是 一个字符串列表, compatible 属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序 ,compatible 属性的值格式 :"manufacturer,model" ,例如:
compatible = "fsl,imx6ull-14x14-evk", "fsl,imx6ull"; //此compatible是有两个属性,用分号隔开
PS:根节点“/” 下的compatible 属性 用于查看是否支持此设备 ,取代设备ID。在没有使用设备树以前, uboot 会向 Linux 内核传递一个叫做 machine id 的值, machine id
也就是设备 ID
1.3.2.2. model属性
model 属性值也是一个字符串,一般 model 属性描述设备模块信息,比如名字什么的,例如:model = "wm8960-audio";
1.3.2.3. status属性
status 属性看名字就知道是和设备状态有关的, status 属性值也是字符串,字符串是设备的状态信息,可选的状态如下
1.3.2.4. #address-cells和#size-cells属性
这两个属性的值都是无符号 32 位整形, #address-cells 和#size-cells 这两个属性可以用在 任何拥有子节点的设备中,用于描述子节点的地址信息,直接上示例
/ { #address-cells = <0x2>; // 在root node下使用2个u32来代表address。 #size-cells = <0x1>; // 在root node下使用1个u32来代表size。 ... ... memory { // memory device ... reg = <0x90000000 00000000 0x800000>; // 0x90000000 00000000 是存取memory的address // 0x800000 是memory的size。 ... }; ... ... }
1.3.2.5. reg属性
reg 属性前面已经提到过了, reg 属性的值一般是(address, length)对。 reg 属性一般用于描述设备地址空间资源信息,一般都是某个外设的寄存器地址范围信息
1.3.2.6. device_type属性
device_type 属性值为字符串, IEEE 1275 会用到此属性,用于描述设备的 FCode,但是设备树没有 FCode,所以此属性也被抛弃了。此属性只能用于 cpu 节点或者 memory 节点。imx6ull.dtsi 的 cpu0 节点用到了此属性
1.3.3. 向节点追加或修改
1.3.3.1. 先看一下 I2C1 接口对应的节点,打开文件 imx6ull.dtsi 文件,找到如下所示内容:
如果我们要添加直接的具体设备(mag311)以及修改参数,我们可以定义自己的dts文件,只要文件中#include “imx6ull.dtsi ”,
1.4. 文件系统中查看设备树属性
以上是关于设备树详讲的主要内容,如果未能解决你的问题,请参考以下文章