当前位置: 首页 > news >正文

Linux中设备树下的platform驱动编写

之前的文章是传统的,未采用设备树的方式去实现platfrom设备和驱动方式,在有设备树的时候,设备的描述就放在了设备树中去描述。

1、首先创造设备的pinctrl节点,

在platfrom框架下必须使用pinctrl来配置引脚的复用功能,下面以正点原子的rk3568上的led为例子,打开rk3568-pinctrl.dtsi文件,RK3568上的所有的引脚描述都是在该文件中。在文件中的pinctrl节点里面添加以下

led-gpios{ /omit-if-no-ref/ led_gpio: led-pin { rockchip,pins = <0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>; }; };

上述代码描述了 将GPIO0_C0 描述为GPIO功能。

2、在设备树中创建设备节点

接下来在设备树中创造设备节点来描述设备信息,重点是要设置好compatible的值,因为platfrom总线通过设备节点的compatible属性来匹配驱动,

gpioled { compatible = "alientek,led"; pinctrl-names = "alientek,led"; pinctrl-0 = <&led_gpio>; led-gpio = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>; status = "okay"; };

第二行为compatibel 属性是alientek,led,因此在写platfrom驱动的时候of_match_table 属性表里面要有“alientek,led”。

第四行pinctrl-0属性设置LED的pin对应的pinctrl节点,也就是上面写的led-gpio

3、编写platfrom驱动的时候要注意兼容属性

在使用设备树的时候platfrom驱动会通过of_match_table来保存兼容性值,也就是表明此驱动兼容哪些设备。所以of_match_table将会尤为重要,

static const struct of_device_id led_of_match[] = { { .compatible = 'alientek,led' }, /*兼容属性*/ { /* Sentinel*/ } }; MODULE_DEVICE_TABLE(of,led_of_match); static struct platfrom_driver led_platform_driver = { .driver = { .name = "rk3568-led", .of_match_table = led_of_match, }, .probe = led_probe, .remove = led_remove, };

1-4行 是一个数组 所以一个驱动可以匹配很多个设备,上面代码只写了一个alientek,led设备这里的必须和设备树里面的compatible保持一致,因此相应的probe函数就会启动,

下面一行是MODULE_DEVICE_TABLE声明一下led_of_match这个匹配表。

设置platform_driver 中的of_match_table 匹配表为上面创建的leds_of_match,至 此我们就设置好了platform驱动的匹配表了。

检查引脚复用,检查pinctrl配置,在实际项目中 ,需要检查该引脚是不是配置了其他功能,某些时刻一个引脚可以被复用很多功能,但是在特殊情况下,必须关闭复用为其他功能,在linux下,必须保持一个功能一个引脚来设计硬件。

http://www.jsqmd.com/news/694996/

相关文章:

  • 5个高效使用OpenProject的终极技巧:从新手到项目管理专家
  • 别只调包了!深入理解语音情感分析中的MFCC、Chroma和Mel特征
  • python Lock
  • 【PySide6】QLabel图片显示进阶:从文件选择到自适应布局
  • python Condition
  • 彩印肥料编织袋价格受哪些影响呢?
  • XML Schema 复合元素
  • 2026年沙市AI培训有何新亮点?
  • 告别续航焦虑:基于Si24R1的智能门锁/传感器,如何通过模式切换将功耗降到1uA以下?
  • 避坑指南:在CANoe Test Node里操作总线与节点,这几个CAPL函数返回值你注意了吗?
  • 02华夏之光永存:电磁弹射+一次性火箭航天入轨方案【第二篇:发射场优选选址全维度工程评估】
  • OpenClaw技术架构与源码工程
  • 终极BetterNCM插件管理器完整指南:高效自定义网易云音乐体验
  • 5步掌握智能数据采集:高效破解大众点评反爬机制
  • python Event
  • iOS网络授权验证系统源码_苹果软件授权验证_幽络源源码
  • 梦开始的地方
  • 如何一键解决Windows激活难题?KMS_VL_ALL_AIO完整使用指南
  • 6999元AMD新旗舰首测!锐龙9 9950X3D2性能解禁:这颗U根本不是给游戏玩家造的
  • Windows 10/11 下用 YOLOv5 训练自己的数据集:从标注到部署的保姆级避坑指南
  • R3nzSkin终极指南:3分钟学会英雄联盟安全换肤技巧
  • 别再死记硬背矩阵了!用Python+Qiskit动手玩转量子逻辑门(附RX/RY/RZ门代码示例)
  • python timeout
  • 1.计算机的发展历程
  • 动手实验:用Arduino和RC522模块,亲身体验13.56MHz RFID的负载调制过程
  • OCO-2 二级地理定位 XCO2 反演结果和算法诊断信息,GES DISC 的回顾性处理 V11r (OCO2_L2_Diagnostic)
  • 从DIN到TWIN:阿里推荐系统序列建模的十年演进,一篇讲透核心思想与工程取舍
  • 重新定义时间计算:当传统历法遇见现代代码
  • 别再死记硬背了!一条主线彻底搞懂 Kubernetes 全景视图架构
  • Ubuntu 20.04与Windows 10双系统下NVIDIA V100 GPU驱动与CUDA 11.1环境部署实战