ARM&Linux基础
+ -

设备树属性

2025-11-17 18 0
  • 设备树以根节点/为开始,多个相同节点的路径会自动合并,比如有多个根节点,就会合并在一起。
  • 设备节点以“Label:nodeName@address”的形式显示,其中Lable用于其它地方快速引用NodeName@address,引用方式为&Lable
i2c1: i2c@021a0000 {
    #address-cells = <1>;
    #size-cells = <0>;
...
}

在别的文件中引用,并追加或修改内容

&i2c1 {
     /* 要追加或修改的内容 */
    };

标准属性compatible

compatible用于驱动匹配。
compatible 属性也叫做“兼容性”属性,一般格式为”manufacturer,model”.manufacturer 表示厂商, model 一般是模块对应的驱动名字。

compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";

属性值有两个,分别为“fsl,imx6ul-evk-wm8960”和“fsl,imx-audio-wm8960”,其中“fsl”表示厂商是飞思卡尔,“imx6ul-evk-wm8960”和“imx-audio-wm8960”表示驱动模块名字。

一般驱动程序文件都会有一个 OF 匹配表,此 OF 匹配表保存着一些 compatible 值,如果设备节点的 compatible 属性值和 OF 匹配表中的任何一个值相等,那么就表示设备可以使用这个驱动。

static const struct of_device_id imx_wm8960_dt_ids[] = {
     { .compatible = "fsl,imx-audio-wm8960", },
     { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, imx_wm8960_dt_ids);

 static struct platform_driver imx_wm8960_driver = {
     .driver = {
         .name = "imx-wm8960",
         .pm = &snd_soc_pm_ops,
         .of_match_table = imx_wm8960_dt_ids,
     },
     .probe = imx_wm8960_probe,
     .remove = imx_wm8960_remove,
 };

model 属性

model 属性值也是一个字符串,一般 model 属性描述设备模块信息,比如名字什么的,比如:

model = "wm8960-audio";

status 属性

描述
“okay” 表明设备是可操作的。
“disabled” 表明设备当前是不可操作的,但是在未来可以变为可操作的,比如热插拔设备插入以后。至于 disabled 的具体含义还要看设备的绑定文档。
“fail” 表明设备不可操作,设备检测到了一系列的错误,而且设备也不大可能变得可操作。
“fail-sss” 含义和“fail”相同,后面的 sss 部分是检测到的错误内容。

#address-cells 和#size-cells 属性

  • #address-cells 属性值决定了子节点 reg 属性中地址信息所占用的字长(32 位)
  • #size-cells 属性值决定了子节点 reg 属性中长度信息所占的长度。
spi4 {
     compatible = "spi-gpio";
     #address-cells = <1>;//说明起始地址为1
     #size-cells = <0>; //说明长度为0

    gpio_spi: gpio_spi@0 {
        compatible = "fairchild,74hc595";
        reg = <0>;//只设置了起始地址,没有长度,见reg属性
        };
 }

reg属性

一般 reg 属性都是和地址有关的内容,和地址相关的信息有两种:起始地址和地址长度, reg 属性的格式一为:

reg = <address1 length1 address2 length2 address3 length3……>

dcp: dcp@02280000 {
    compatible = "fsl,imx6sl-dcp";
    reg = <0x02280000 0x4000>; //起始地址,长度
};

ranges属性

ranges用于子设备地二转换的。
ranges为空,表示子设备的地址空间和父设备的地址空间完全相同.

soc{
    compatible = "simple-bus";
    ranges;
}

不为空时,格式为:子地址起始 父地址起始 长度

soc{
    ranges = <0x0 0xe0000000 0x00100000>;
    serial {
        reg = <0x4600 0x100>;//相对父的偏移地址
    }
}

则说明serial的起始地址为0xe0000000+0x4600=0xe0004600

0 篇笔记 写笔记

Linux Kernel映射文件vmlinux、Image、zImage、uImage及设备树
config文件make zImage 命令默认会使用.config文件进行编译。make menuconfig 命令默认也是打开的是.config文件如果要使用指定的config文件make imx_v7_defconfig正点原子IMX6UL开发板默认的配置文件为imx_v7_defco......
设备树
DTS:原始的设备树文件,扩展名为dts,dts文件也可以有头文件,dtsiDTC:设备树文件编译工具DTB:DTS经过DTC编译后的文件编译设备树make dtbs //编译aarcharmootdts下所有设备树make all是编计的事情有的东西,包括zImage,ko,当......
设备树属性
设备树以根节点/为开始,多个相同节点的路径会自动合并,比如有多个根节点,就会合并在一起。设备节点以“Label:nodeName@address”的形式显示,其中Lable用于其它地方快速引用NodeName@address,引用方式为&Lablei2c1: i2c@021a0000 {......
设备树of函数及示例
of函数分为以下几类:查找节点的函数of_find_node_by_name:节点名字查找指定的节点of_find_node_by_type:通过 device_type 属性查找指定的节点of_find_compatible_node:据 device_type 和 compatible 这两......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!