设备树属性
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
ARM&Linux基础





