资源描述:
《设备节点兼容性.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2.设备节点兼容性在.dts文件的每个设备节点中,都有一个兼容属性,兼容属性用于驱动和设备的绑定。兼容属性是一个字符串的列表,列表中的第一个字符串表征了节点代表的确切设备,形式为",",其后的字符串表征可兼容的其他设备。可以说前面的是特指,后面的则涵盖更广的范围。如在vexpress-v2m.dtsi中的Flash节点如下:flash@0,00000000{patible="arm,vexpress-flash","cfi-flash";reg=<00x000000000x04000000>
2、,<10x000000000x04000000>;b1ank-width=<4>;};兼容属性的第2个字符串"cfi-flash"明显比第1个字符串"arm,vexpress-flash"涵盖的范围更广。再如,FreescaleMPC8349SoC含一个串口设备,它实现了国家半导体(NationalSem-iconductor)的NS16550寄存器接口。则MPC8349串口设备的兼容属性为patible="fsl,mpc8349-uart","ns16550"。其中,fsl,mpc8349-uart指代了确切的设备,ns16550代
3、表该设备与NS16550UART保持了寄存器兼容。因此,设备节点的兼容性和根节点的兼容性是类似的,都是“从具体到抽象”。使用设备树后,驱动需要与.dts中描述的设备节点进行匹配,从而使驱动的probe()函数执行。对于platform_driver而言,需要添加一个OF匹配表,如前文的.dts文件的"acme,a1234-i2c-bus"兼容I2C控制器节点的OF匹配表,具体代码如下所示。1staticconststructof_device_ida1234_i2c_of_match[]={2{.patible="acme,a1234
4、-i2c-bus",},3{},4};5MODULE_DEVICE_TABLE(of,a1234_i2c_of_match);67staticstructplatform_driveri2c_a1234_driver={8.driver={9.name="a1234-i2c-bus",10.owner=THIS_MODULE,11.of_match_table=a1234_i2c_of_match,12},13.probe=i2c_a1234_probe,14.remove=i2c_a1234_remove,15};16module_
5、platform_driver(i2c_a1234_driver);对于I2C和SPI从设备而言,同样也可以通过of_match_ta-ble添加匹配的.dts中的相关节点的兼容属性,如sound/soc/codecs/wm8753.c中的针对WolfsonWM8753的of_match_ta-ble,具体代码如下所示。1staticconststructof_device_idwm8753_of_match[]={2{.patible="wlf,wm8753",},3{}4};5MODULE_DEVICE_TABLE(of,wm87
6、53_of_match);6staticstructspi_driverwm8753_spi_driver={7.driver={8.name="wm8753",9.owner=THIS_MODULE,10.of_match_table=wm8753_of_match,11},12.probe=wm8753_spi_probe,13.remove=wm8753_spi_remove,14};15staticstructi2c_driverwm8753_i2c_driver={16.driver={17.name="wm8753",18
7、.owner=THIS_MODULE,19.of_match_table=wm8753_of_match,20},21.probe=wm8753_i2c_probe,22.remove=wm8753_i2c_remove,23.id_table=wm8753_i2c_id,24};上述代码中的第2行显示WM8753的供应商是“wlf”,它其实是对应于WolfsonMicroe-lectronics的前缀。详细的前缀可见于内核文档:Documentation/devicetree/bindings/vendor-pre-fixes.tx
8、t对于I2C、SPI还有一点需要提醒的是,I2C和SPI外设驱动和设备树中设备节点的兼容属性还有一种弱式匹配方法,就是“别名”匹配。兼容属性的组织形式为,,别名其实就是去掉兼容属