用LED驱动框架注册led设备的示例代码
Posted 正在起飞的蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用LED驱动框架注册led设备的示例代码相关的知识,希望对你有一定的参考价值。
1、LED驱动框架分析
2、简单的用LED驱动框架注册led设备的代码
#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/leds.h>
#include <mach/regs-gpio.h>
#include <mach/gpio-bank.h>
#include <linux/io.h>
#include <linux/ioport.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");
//根据value去操作led
static int __init s5pv210_led_init(void)
// 用户insmod安装驱动模块时会调用该函数
// 该函数的主要任务就是去使用led驱动框架提供的设备注册函数来注册一个设备
int ret = -1;
mydev.name = "myled"; //led的设备名:/sys/class/leds/myled
mydev.brightness = 0; //默认亮度0
mydev.max_brightness = 255; //最大亮度255
mydev.brightness_set = s5pv210_led_set; //设置led设备亮度的方法
ret = led_classdev_register(NULL, &mydev); //向LED驱动框架注册led设备
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"); // 描述模块的作者
MODULE_DESCRIPTION("s5pv210 led driver"); // 描述模块的介绍信息
MODULE_ALIAS("s5pv210_led"); // 描述模块的别名信息
上面是可以编译并运行的驱动代码,不涉及具体硬件操作,只是用来讲解如何利用LED框架注册led设备;
3、上面驱动代码注册后的效果
root@Storage:/sys/class/leds/myled# ls -l
total 0
-rw-r--r-- 1 root root 4096 May 10 09:52 brightness
lrwxrwxrwx 1 root root 0 May 10 09:52 device -> ../../../0000:00:10.0
-r--r--r-- 1 root root 4096 May 10 09:52 max_brightness
drwxr-xr-x 2 root root 0 May 10 09:52 power
lrwxrwxrwx 1 root root 0 May 10 09:52 subsystem -> ../../../../../class/leds
-rw-r--r-- 1 root root 4096 May 10 09:52 uevent
(1)在leds类下面创建了myled设备,设备下默认有brightness和max_brightness文件,这是在创建leds类时初始化的设备属性;
(2)应用层操作led设备就是通过读写"/sys/class/leds/myled"目录下的文件;
4、应用层设置led亮度的分析
4.1、应用层的操作
echo 1 > /sys/class/leds/myled/brightness
通过向brightness文件写数据来设置led的亮度;
4.2、驱动层的响应
led_brightness_store();
dev_get_drvdata();
simple_strtoul();
led_set_brightness();
led_cdev->brightness_set(led_cdev, value);
(1)led_brightness_store:调用brightness文件的store方法;
(2)dev_get_drvdata:从传入的struct device结构体解析处我们注册led设备时传入的struct led_classdev结构体;
(3)simple_strtoul:将我们写入的字符数据转换成10进制数据;
(4)led_set_brightness:传入亮度数据,设置led亮度;
(5)brightness_set:调用我们在向LED框架注册led设备时,传入的设置led亮度的函数;
以上是关于用LED驱动框架注册led设备的示例代码的主要内容,如果未能解决你的问题,请参考以下文章