在前面的blog中使用了标准的linux下驱动设备的方法,那是从头到尾自己驱动,但是工程中我们不会那么干(除非是芯片厂商),因为linux下已经有非常完整的LED(dirvers/leds/leds-gpio.c),LCD,按键等设备的驱动都是跨平台的,我们只需要在BSP中添加一些基本信息就可以啦。下面以mini2440上开发板上驱动led为例来加以说明
1.在mini2440.c(这是我的bsp文件)中添加
#include<linux/leds.h>
static struct gpio_led mini2440_leds[] = {
[0] = {
.name = "LED1",
.gpio = S3C2410_GPB5,
},
[1] = {
.name = "LED2",
.gpio = S3C2410_GPB6,
},
[2] = {
.name = "LED3",
.gpio = S3C2410_GPB7,
},
[3] = {
.name = "LED4",
.gpio = S3C2410_GPB8,
},
};
static struct gpio_led_platform_data mini2440_gpio_led_pdata = {
.num_leds = ARRAY_SIZE(mini2440_leds),
.leds = mini2440_leds,
};
static struct platform_device mini2440_device_led = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &mini2440_gpio_led_pdata,
},
};
static struct platform_device *mini2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_nand,
&mini2440_device_dm9k,
&s3c_device_rtc,
&mini2440_device_led, //在设备集中添加led设备
};
现在我们可以进入:
cd /sys/devices/platform/leds/
可以看到下面有LED1,LED2,LED3,LED4
我们可以通过执行
echo 0 /sys/devices/platform/leds/LED1/birighness
来点亮led1
echo 1 /sys/devices/platform/leds/LED1/birighness //熄灭