原文转: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,
这个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[] = {