Linux下的LED子系统

版权所有,转载必须说明转自 http://my.csdn.net/weiqing1981127

最简单的led驱动就是从端口输出0或1来关闭或点亮灯。而我们这里讲的led子系统,主要是对led事件进行了分装和优化,这里我们主要讲的是可以实现跨平台的led驱动。不管你是使用三星的平台,还是Atmel的平台,你只要知道如何在你的BSP中添加平台数据,并且知道如何在应用程序中使用这个驱动,那么你就不用因为新的平台而再次编写led驱动。
按键驱动属于input子系统,源码路径在/driver/leds下,我们的跨平台按键驱动文件是/driver/leds/leds-gpio.c,关于led子系统的核心文件是Led-class.c和Led-core.c
查看/driver/leds/Makefile
obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
查看/driver/leds/Konfig
config LEDS_GPIO
tristate”LED Support for GPIO connected LEDs”
dependson LEDS_CLASS && GENERIC_GPIO
其中
config LEDS_CLASS
tristate”LED Class Support”
所以配置内核makemenuconfig 时,需要选中这两项。

现在先来看如何移植,比如我们现在要给mini2440开发板上的led1到key4编写led驱动,根据资料知道,led1到led4用的是GPB5-GPB8端口。下面就看移植代码了,在mach-mini2440.c这个mini2440开发板的BSP中添加如下代码
static struct gpio_led s3c_gpio_leds[] = {
{
.name = “led1”,
.gpio = S3C2410_GPB(5),
.active_low= 1,
},
{
.name = “led2”,
.gpio = S3C2410_GPB(6),
.active_low= 1,
},
{
.name = “led3”,
.gpio = S3C2410_GPB(7),
.active_low= 1,
},
{
.name = “led4”,
.gpio = S3C2410_GPB(8),
.active_low= 1,
},
};

static struct gpio_led_platform_datas3c_gpio_led_data = {
.leds = s3c_gpio_leds,
.num_leds = ARRAY_SIZE(s3c_gpio_leds),
};

static struct platform_device s3c_leds_gpio= {
.name = “leds-gpio”,
.id = -1,
.dev = {
.platform_data = &s3c_gpio_led_data,
},
};
然后把这个s3c_leds_gpio加入到mini2440_devices数组
static struct platform_device*mini2440_devices[] __initdata = {
……
&s3c_leds_gpio, //添加
};
最后添加头文件

include

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值