【Linux驱动】platform 设备驱动分离(三)—— LED驱动(设备树)

本文详细介绍了如何在Linux平台中,利用设备树和platform驱动机制驱动LED,包括添加设备树节点、设置compatible属性匹配、注册platform驱动以及处理中断。作者还提供了完整的驱动代码示例和测试脚本,展示了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用设备树的情况下,无需自己手动注册 platform 设备,在开发板上电加载Linux 内核和设备树的时候,就已经将设备树信息转换成 platform_device 类型了。因此,在使用设备树的情况下,只需要编写 platform 驱动。

为了防止自己新增的节点和设备树原本的发生冲突,建议注释原本的节点。

一、添加设备树节点

这里使用自己创建的节点只是为了熟悉匹配流程,当然也可以使用原本的节点,只需要保证在注册 platform 驱动时 compatible 变量的值和设备树中 compatible 属性的值保持一致即可。(因为platform 驱动与设备树匹配时,依赖 compatible 属性

再次强调,这里新增LED节点的 compatible 属性值为 alientek-led。(后续要用到)

gpio-led {
	compatible = "alientek-led";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_gpio_leds>;
	led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
	interrupt-parent = <&gpio1>;
	interrupts = <3 IRQ_TYPE_EDGE_RISING>;
	status = "okay";
};

二、platform 驱动注册

整体逻辑与不使用设备树时的一样,需额外新增 compatible 属性,上面也提到了 platform 驱动与设备树匹配时,依赖 compatible 属性。

第一步,在 platform_driver 的实例中添加 of_match_table 变量的定义。

static struct platform_driver led_driver = {
	.driver = {
		.name = "imx6ull-led",
		.of_match_table = led_of_match,      // 匹配表
	},
	.probe = led_probe,
	.remove = led_remove,
};

第二步,定义 led_of_match 变量。compatible 属性在这里添加,这里的 compatible 变量的值需要与上面设备树的 compatible 属性值保持一致。

struct of_device_id	led_of_match[] = {
	{ .compati
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值