设备树compatible 属性

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"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值