接上篇:https://blog.csdn.net/wangweijundeqq/article/details/101696862
目录
五.基于驱动框架写led驱动1
5.1、分析
(1)参考哪里? drivers/leds/leds-s3c24xx.c
5.2、动手写led驱动模块
从E:\Linux\4.LinuxDriver\3.CharDevSenior\4.6复制文件到..\4.LedDriver\4.1中
#include <linux/leds.h>
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");
}
static int __init s5pv210_led_init(void)
{
//用户insmod安装驱动模块时会调用该函数
//该函数的主要任务就是去使用led驱动框架提供的设备注册函数注册一个设备
mydev.name = "myled";
mydev.brightness = 0;//led的亮灭状态
mydev.brightness_set = s5pv210_led_set;
int ret=-1;
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("aliya <422582774@qq.com>");// 描述模块的作者
MODULE_DESCRIPTION("s5pv210 led driver");//描述模块的介绍信息
MODULE_ALIAS("s5pv210_led");//描述模块的别名信息
我们装载模块后应该会出现什么现象呢? 装载模块后就会执行s5pv210_led_init
执行 device_create 函数后, 应该在 ls /sys/class/leds/目录中再创建一个目录, 目录的名字就叫我们注册的名字 myled。
我们装载模块进行验证:进入到新生成的文件中, 文件中有新的内容生成
分析:我们通过函数 device_create注册了 leds_class里面的一个设备,那么这个 leds_class