接上篇:https://blog.youkuaiyun.com/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
类中包含什么东西呢? 这里设备类里面都有一个 led_class_attrs 属性。

本文档详细介绍了如何基于Linux驱动框架编写LED驱动,包括分析现有驱动、动手编写驱动模块、实现LED硬件操作,以及将四个LED分开独立控制。通过对leds-s3c24xx.c的参考和对比,探讨了驱动框架的使用和gpiolib的重要性。




最低0.47元/天 解锁文章
1927

被折叠的 条评论
为什么被折叠?



