总结流程:基于驱动框架写led驱动…

本文详细介绍了如何基于Linux内核的LED驱动框架,利用struct led_classdev结构体注册LED驱动,并解释了如何通过led_brightness_show、led_brightness_store等函数实现LED的读写操作,以及用户如何通过sysfs接口读写LED硬件。
摘要由CSDN通过智能技术生成

原文转:http://blog.sina.com.cn/s/blog_14f1867f70102wif2.html

(1)参考s3c24xx-led.c

(2)关键点就是led_classdev_register ,用这个led驱动框架中的注册接口去注册我们的led驱动,

我们通过看sys/class/leds/目录下的有没有我们注册的这个设备驱动的名字。

(3)我们调用led_classdev_register这个led驱动框架中的注册led驱动的函数,是通过填充好的struct led_classdev这个类型的结构体,去注册的。

这个struct led_classdev结构体中,有一些这个驱动的名字,和操作这个驱动的读或写函数指针,写led硬件对应的是void(*brightness_set)(struct led_classdev *led_cdev,

 enum led_brightness brightness);这个成员指向的函数,我们需要提供一个对应的能操作led硬件的函数类型的函数填充进去。

 

这个struct led_classdev结构体还有一个成员brightness;这个成员是将来在我们读这个led硬件的时候,读取出来的值.

这个struct led_classdev结构体还有一个成员name,就是硬件的名字,将来会在sys/class/leds/目录下出现,比如是whyx210-led

用户是怎么去读或写led硬件的呢,这部分是在led-class.c中,led驱动框架帮我们完成好了,在内核驱动框架建立起来之后,也就是执行了led-class.c中的

static int __init leds_init(void)函数后,这个函数中的leds_class = class_create(THIS_MODULE, "leds");这个语句,会帮我们创建一个设备类,在sys/cla

ss/目录下,创建的设备类名字是leds,并且在这个函数中又通过leds_class->dev_attrs = led_class_attrs;这个语句,将led_class_attrs,这个所有led设备

通有的属性和方法加上了。这个led_class_attrs是一个结构体,

static struct device_attribute led_class_attrs[] = {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值