1、LED驱动框架分析

参考博客:《内核LED驱动框架讲解以及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/myledmydev.brightness = 0;    //默认亮度0mydev.max_brightness = 255; //最大亮度255mydev.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设备的示例代码相关推荐

  1. linux驱动程序混合架构,嵌入式系统最小驱动框架(类似linux驱动程序架构)(示例代码)...

    2010年就打算把linux里的驱动框架核心代码抠出来的,但是由于懒而且linux代码量大,一直下不了手.最近调试的intel curie里驱动架构也类似linux,代码就少多了,由于工作需要不得不梳 ...

  2. 驱动框架5——基于驱动框架写led驱动

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 五.基于驱动框架写led驱动1 1.分析 (1)参考哪里?  drivers/leds/leds-s3c24xx. ...

  3. 驱动框架3——初步分析led驱动框架源码

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 1.涉及到的文件 led-core.c(一些宏与头文件包含而已) led-class.c (1)分析发现,LED驱 ...

  4. 驱动框架2——内核驱动框架中LED的基本情况、初步分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.内核驱动框架中LED的基本情况 1.相关文件 (1)drivers/leds目录 驱动框架规定的LED这种硬件的驱动应该待的地方. (2 ...

  5. linux内核led驱动开发,从Linux内核LED驱动来理解字符设备驱动开发流程

    目录 博客说明 开发环境 1. Linux字符设备驱动的组成 1.1 字符设备驱动模块加载与卸载函数 1.2 字符设备驱动的file_operations 结构体中的成员函数 2. 字符设备驱动--设 ...

  6. 驱动学习之LED驱动框架

    一:什么是驱动框架   (1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的.标准的.典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开 ...

  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想

    文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...

  8. linux字符设备led驱动源码,字符设备驱动控制LED灯

    开发板:龙芯1B PC:Ubuntu 13.10 本程序为字符设备驱动,提供控制led灯功能,如要实现控制需要自己写应用程序,打开驱动文件就可控制led灯,led灯通过gpio控制 #include ...

  9. pythonb超分辨成像_深度原理与框架-图像超分辨重构-tensorlayer(示例代码)

    图像超分辨重构的原理,输入一张像素点少,像素较低的图像, 输出一张像素点多,像素较高的图像 而在作者的文章中,作者使用downsample_up, 使用imresize(img, []) 将图像的像素 ...

  10. 驱动框架7——使用gpiolib完成led驱动

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 十四.使用gpiolib完成led驱动 1.流程分析 (1)第1步:使用gpio_request申请要使用的一个G ...

最新文章

  1. mysql锁总结知乎_Mysql悲观锁乐观锁区别与使用场景
  2. 深度学习不work?这有一份超全的Debug检查清单
  3. 使用FreeImage帮助OpenCV读出更多图像(转)
  4. python与excel做数据可视化-我在工作中是怎么玩数据的—数据可视化系列教程—Python篇...
  5. mysql中in查询效率低的替代方法_一波骚操作,我把 SQL 执行效率提高了 10,000,000 倍...
  6. 什么是声明式事务控制
  7. jquery城市选择案例
  8. 【ZZULIOJ】1047: 对数表
  9. 利用scrapy爬取美图录网站图集按模特姓名存储到本地(三)
  10. 计算机网络常见面试知识点总结
  11. 环洋市场调研-2021年全球肽化妆品行业调研及趋势分析报告
  12. 苹果将迎来2018年第四次新品发布季节,时间定为10月30日
  13. 如果觉得上面太正式,请看小红书风格的“从数字化转型到智能化转型”
  14. 全局vue中修改字体样式 苹方字体 微软雅黑 亲测可用
  15. flink常见故障排除
  16. “云计算机”是什么?
  17. Win7系统修复启动项命令
  18. java从项目里下载excel模板
  19. 给大家分享一下2018最新的Java黑马视频教程,包含十次方和乐优商城项目
  20. 本周AI热点回顾:无人车的眼睛、UP主的生产力工具,都藏在百度CVPR的这十个冠军里;IJCAI 2021心电全景图及其生成网络...

热门文章

  1. unity 角度限制_Unity3D实现摄像机镜头移动并限制角度
  2. Java通过http协议下载文件并写入字节流的方法
  3. 系统性谈谈软件可靠性——第3讲:软件可靠性设计方法
  4. 软件系统可靠性的指标计算
  5. 英文单词乱序后还原 c语言,乱序背单词_有谁也用《不背单词》这个软件吗怎么可以改变背单词的顺序有顺序倒序和乱序的_淘题吧...
  6. ppt技巧一四步法调整段落排版
  7. w7计算机文件夹打开怎么设置密码,怎样设置文件夹密码 Win7系统文件夹加密步骤详解...
  8. LUP分解求解线性方程组及求逆矩阵 java
  9. 编程代码分析-使用winsock搜索蓝牙设备
  10. 一文带你全方位入门docker