linux模块哪个难,linux led驱动框架,感觉好难,好费解

这篇博客探讨了在Linux系统中学习LED驱动时遇到的困惑,尤其是与字符驱动的区别。作者分享了一段基于S5PV210平台的LED驱动代码,展示了如何通过平台总线来控制LED的亮灭。代码中的s5pv210_led_set函数用于根据用户输入调整LED状态,而驱动的注册和注销则分别在s5pv210_led_init和s5pv210_led_exit中进行。
摘要由CSDN通过智能技术生成

说出来不怕丢脸,学驱动学到LED驱动框架,感觉不怎么好理解了,跟字符驱动完全不一样,还有看linux/drivers/leds目录下不同厂家对led驱动的实现,感觉学了字符驱动有个毛用哦,到处用的都是platform总线

如下是网友提供的基于LED驱动框架的代码,没怎么看懂,s5pv210_led_set函数啥时候调用没整明白~~~

#include

#include

#include

#include

#include

#include

#include

#include

#define GPJ0CON                S5PV210_GPJ0CON

#define GPJ0DAT                S5PV210_GPJ0DAT

static struct led_classdev mydev;                        // 定义结构体变量

// 这个函数就是要去完成具体的硬件读写任务的

static void s5pv210_led_set(struct led_classdev *led_cdev, enum led_brightness value)

{

printk(KERN_INFO "s5pv210_led_set\n");

// 在这里根据用户设置的值来操作硬件

// 用户设置的值就是value

if (value == LED_OFF) {

// 用户给了个0,希望LED灭

writel(0x11111111, GPJ0CON);

writel(((1<<3) | (1<<4) | (1<<5)), GPJ0DAT);

}

else {

// 用户给的是非0,希望LED亮

writel(0x11111111, GPJ0CON);

writel(((0<<3) | (0<<4) | (0<<5)), GPJ0DAT);

}

}

static int __init s5pv210_led_init(void)

{

// 用户insmod安装驱动模块时会调用该函数

// 该函数的主要任务就是去使用led驱动框架提供的设备注册函数来注册一个设备

int ret = -1;

mydev.name = "myled";

mydev.brightness = 255;

mydev.brightness_set = s5pv210_led_set;

ret = led_classdev_register(NULL, &mydev);

if (ret < 0) {

printk(KERN_ERR "led_classdev_register failed\n");

return ret;

}

return 0;

}

static void __exit s5pv210_led_exit(void)

{

led_classdev_unregister(&mydev);

}

module_init(s5pv210_led_init);

module_exit(s5pv210_led_exit);

// MODULE_xxx这种宏作用是用来添加模块描述信息

MODULE_LICENSE("GPL");                                                // 描述模块的许可证

MODULE_AUTHOR("aston <1264671872@qq.com>");        // 描述模块的作者

MODULE_DESCRIPTION("s5pv210 led driver");                // 描述模块的介绍信息

MODULE_ALIAS("s5pv210_led");                                        // 描述模块的别名信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值