50 使用linux内核源码里的led驱动<LED Support for GPIO connected LEDs>
来源:互联网 发布:软件使用费增值税税率 编辑:程序博客网 时间:2024/05/16 07:46
这个设备驱动适用于,连接到一个IO口的led灯.
需要在linux内核配置里选上相关的配置。在内核源码目录下:
make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- Device Drivers ---> [*] LED Support ---> <*> LED Class Support <*> LED Support for GPIO connected LEDs
选择上后,再编内核,再使用新的内核镜像启动系统
使用新内核启动后,可以查看出设备驱动是否已选择上:
/sys/bus/platform/drivers/目录下应有”leds-gpio”目录
驱动源码在”drivers/leds/leds-gpio.c”, 里面是一个平台驱动,我们只要写平台设备描述硬件的资源与此驱动匹配即可.
285 static struct platform_driver gpio_led_driver = {286 .probe = gpio_led_probe,287 .remove = __devexit_p(gpio_led_remove),288 .driver = {289 .name = "leds-gpio",290 .owner = THIS_MODULE,291 .of_match_table = of_gpio_leds_match, // 用成员匹配,名字可为"gpio-leds"292 },293 };294 295 module_platform_driver(gpio_led_driver);
//通过阅读平台驱动的probe函数,可得知我们写的平台设备应提供具本哪些硬件信息.235 static int __devinit gpio_led_probe(struct platform_device *pdev)236 {237 struct gpio_led_platform_data *pdata = pdev->dev.platform_data;238 struct gpio_leds_priv *priv;239 int i, ret = 0;240 241 if (pdata && pdata->num_leds) { ... } ...268 return 0;269 }
/////////////////////////////////////
//通过probe函数,可以确定我们写平台设备时只需通过platform_data成员提供平台驱动所需的信息,无需再提供resource.
//再确定结构体gpio_led_platform_data的每个成员的作用即可,如不清楚具体用途,可以在驱动代码里通过查看对成员值的访问推出用途.
"include/linux/leds.h"//每个led用struct gpio_led的对象来描述struct gpio_led { const char *name; //名字 const char *default_trigger; unsigned gpio; //对应的io口 unsigned active_low : 1; // 设1表示led低电平时亮 unsigned retain_state_suspended : 1; //保持挂起状态 unsigned default_state : 2; // 下面的三个宏 /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */};#define LEDS_GPIO_DEFSTATE_OFF 0 //led灯灭#define LEDS_GPIO_DEFSTATE_ON 1 // led灯开#define LEDS_GPIO_DEFSTATE_KEEP 2 // led灯状态保持不变struct gpio_led_platform_data { int num_leds; //多少个led灯 const struct gpio_led *leds; //led灯对象数组首地址#define GPIO_LED_NO_BLINK_LOW 0 /* No blink GPIO state low */#define GPIO_LED_NO_BLINK_HIGH 1 /* No blink GPIO state high */#define GPIO_LED_BLINK 2 /* Please, blink */ int (*gpio_blink_set)(unsigned gpio, int state, unsigned long *delay_on, unsigned long *delay_off); // gpio_blink_set函数用于在设备这边实现闪烁的功能};
/////////////////////
板上的status-led接到PA15,高电平时亮
mypdev.c
#include <linux/init.h>#include <linux/module.h>#include <linux/platform_device.h>#include <linux/input.h>#include <mach/gpio.h>#include <linux/leds.h>struct gpio_led leds[] = { {"led0", "led0_trigger", GPIOA(15), 0, 0, 0},};struct gpio_led_platform_data pdata = { .num_leds = ARRAY_SIZE(leds), .leds = leds,};struct platform_device mypdev = { .name = "leds-gpio", .id = -1, .dev = { .platform_data = &pdata, },};module_driver(mypdev, platform_device_register, platform_device_unregister);MODULE_LICENSE("GPL");
///////////////////////////////////////////
加载设备后,如与平台驱动匹配上会有输出: [ 6860.993790] Registered led device: led0然后就可以通过"/sys/class/leds/led0/brightness"文件控制led灯的亮灭 echo 1 > /sys/class/leds/led0/brightness //灯亮 echo 0 > /sys/class/leds/led0/brightness //灯灭
阅读全文
0 0
- 50 使用linux内核源码里的led驱动<LED Support for GPIO connected LEDs>
- 49 使用linux内核源码里的矩阵键盘驱动<GPIO driven matrix keypad support>
- 编写LED驱动:如何用Linux内核里静态映射好的GPIO
- cubieboard2使用GPIO驱动LED
- linux内核驱动:TQ2440的LED驱动
- linux led驱动源码
- OK6410的linux的LED驱动,GPIO驱动
- linux platform driver 机制实现leds设备的内核注册与led灯的点亮
- 15 内核里leds-gpio设备驱动的设备树方法
- 15 内核里leds-gpio设备驱动的设备树方法
- s3c2440基于linux的gpio led字符设备驱动实践
- s3c2440基于linux的gpio led字符设备驱动
- s3c2440基于linux的gpio led字符设备驱动实践
- 47 使用linux内核源码里的按键驱动<GPIO Buttons>
- 48 使用linux内核源码里的按键轮询驱动<Polled GPIO buttons>
- 《Linux驱动》GPIO配置并操作Led
- 我的内核学习笔记11:linux leds-gpio驱动应用实例
- Linux内核模块驱动之---led驱动
- 数据库宕机且报 ORA-00020的错误
- 织梦cms模板下载:健身瑜伽类网站模板
- CPP入门基础知识
- 2017,我们来聊聊 Node.js
- jmeter时间函数--时间函数偏移
- 50 使用linux内核源码里的led驱动<LED Support for GPIO connected LEDs>
- 455. Assign Cookies
- spring restTemplate 返回泛型
- 关于ResolveInfo的一些小记载
- pom.xml文件汇总
- 可视化的数据结构
- 模板建站与网站开发,哪个更适合当下企业建站?
- 跨域之jsonp
- 在预测心脏病和中风这件事上,AI又超过了人类医生(附论文)