i.MX6ULL终结者设备树下的Platform设备

在Linux系统中,platform框架的设备和驱动管理在支持设备树的内核中简化了,无需手动实现platform_device。设备信息直接在设备树文件中添加,重点在于compatible属性用于驱动匹配。例如,在LED灯设备的设备节点配置中,通过of_match_table在platform_driver中设置兼容性值,完成驱动与设备的连接。
摘要由CSDN通过智能技术生成

Linux系统中platform平台框架包括总线、设备和驱动,其中总线不用我们去操心,Linux内核中会自动管理,我们只需要关系设备和驱动如何实现。在不支持设备树的内核中,我们需要分别实现 platform_device 和 platform_driver,其中platform_device是在平台文件中实现的。在支持设备树的内核中,我们就不用实现platform_device了,而是在设备树文件中添加设备信息。下面看一下在设备树文件中添加设备信息。
在之前关于设备树语法的章节中,我们学习了如何在根节点“/”下去添加一个设备节点信息。其中最重要的就是compatible 属性值,compatible 属性使用来和驱动进行匹配的。下面是本实验用到的LED灯设备的设备节点:

1 gpioled { 
2 		#address-cells = <1>; 
3 		#size-cells = <1>; 
4 		compatible = "gpioled"; 
5 		pinctrl-names = "default"; 
6 		pinctrl-0 = <&pinctrl_led>; 
7 		led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; 
8 		status = "okay"; 
9 }; 

在使用设备树的时候 platform 驱动会通过 of_match_table 来保存兼容性值,也就是表明此驱动兼容哪些设备。所以,of_match_table 将会尤为重要,比如本实验的 platform 驱动中 platform_driver 就可以按照如下所示设置:

1 static const struct of_device_id leds_of_match[] = { 
2      { .compatible = "gpioled" }, /* 兼容属性 */ 
3      { /* Sentinel */ } 
4 }; 
5 
6 MODULE_DEVICE_TABLE(of, leds_of_match); 
7 
8 static struct platform_driver leds_platform_driver = { 
9      .driver = { 
10                 .name = "imx6ul-led", 
11                 .of_match_table = leds_of_match, 
12         },
13         .probe = leds_probe, 
14     .remove = leds_remove, 
15 }; 

第2行,指定compatible匹配信息。
第 6 行,通过 MODULE_DEVICE_TABLE 声明一下 leds_of_match 这个设备匹配表。
第 11 行,设置 platform_driver 中的 of_match_table 匹配表为上面创建的leds_of_match,至此我们就设置好了 platform 驱动的匹配表了。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值