设备树compatible 属性

  • Post author:
  • Post category:其他


compatible 属性也叫做 “兼容性” 属性,这是非常重要的一个属性!compatible 属性的值是一个字符串列表, compatible 属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序。compatible 属性值的推荐格式:

"manufacturer,model"
① manufacturer : 表示厂商;
② model : 一般是模块对应的驱动名字。

例如:

compatible = "fsl,mpc8641", "ns16550";

上面的compatible有两个属性,分别是 “fsl,mpc8641” 和 “ns16550″;其中 “fsl,mpc8641” 的厂商是 fsl;设备首先会使用第一个属性值在 Linux 内核里面查找,看看能不能找到与之匹配的驱动文件;

如果没找到,就使用第二个属性值查找,以此类推,直到查到到对应的驱动程序 或者 查找完整个 Linux 内核也没有对应的驱动程序为止。

在驱动代码里,compatible的写法与设备树dts里写法有区别,举例如下:

		test_nodelabel: TEST_NODELABEL_ALLCAPS: test_gpio_1: gpio@deadbeef {
			compatible = "vnd,gpio";
			gpio-controller;
			reg = < 0xdeadbeef 0x1000 >;
			#gpio-cells = < 0x2 >;
			#foo-cells = < 0x1 >;
			label = "TEST_GPIO_1";
			interrupts = <4 3>;
			status = "okay";
		};
		test_phandles: phandle-holder-0 {
			compatible = "vnd,phandle-holder";
			gpios = <&test_gpio_1 10 20>, <&test_gpio_2 30 40>;
		};

对于上面的dts文件,如果不存在其他的compatible名字为 “vnd,phandle-holder”,那么可以通过下面代码获取到test_gpio_1的label属性值。

#define DT_DRV_COMPAT vnd_phandle_holder
DT_INST_GPIO_LABEL_BY_IDX(0, gpios, 0) //"TEST_GPIO_1"

这里定义

DT_DRV_COMPAT

的值为

vnd_phandle_holder

,注意,这里的下划线,对应在dts文件里有可能时

,

或者

-

,也就是对应于dts文件里的

compatible = "vnd,phandle-holder"。



版权声明:本文为ASCIIZUO原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。