由于LINUX使用了MINI2440的配置,MICRO2440与MINI2440的硬件资料基本一样。因此LED驱动也是通用的,默认的MINI2440配置已经添加对板上4个LED的支持,这里只需要对其配置和测试进行简单的说明。
a) menuconfig配置
MICRO2440的LED驱动被定义为一LED类平台设备,使用该类型驱动需要在menuconfig中打开对LED类设备的支持。
# make menuconfig
Device Drivers --->
-*- LED Support --->
-*- LED Class Support
<*> LED Support for Samsung S3C24XX GPIO LEDs
<*> LED Support for GPIO connected LEDs
[*] Platform device bindings for GPIO LEDs
-*- LED Trigger support
<*> LED Timer Trigger
<*> LED Heartbeat Trigger
-*- LED backlight Trigger
<*> LED GPIO Trigger
<*> LED Default ON Trigger
b) LED配置
LED的配置在arch/arm/mach-s3c2440/mach-mini2440.c文件下,本开发板的其它一些平台设备配置同样也在此文件内,如RTC等。
# vim arch/arm/mach-s3c2440/mach-mini2440.c
在mach-mini2440.c文件中搜索“LED”,可以找到以下名为s3c24xx_led_platdata的LED相关结构体。该结构体标识单个LED的名字、引脚、类型和功能。
接下来定义了platform_device平台设备结构体,每一个LED用一个平台设备结构体定义。包含驱动名称、ID和之前定义的s3c24xx_led_platdata结构体。目标板的所有平台设备都会写到mini2440_devices[]这个平台设备结构体中,最后在mini2440_init()中对所有平台设备初始化。
c) LED驱动测试
LED驱动文件在/sys/class/leds/目录下,可通过echo命令控制LED1~LED4亮和灭,如下所示。
# echo > /sys/class/leds/led2/brightness 1
# echo > /sys/class/leds/led2/brightness 0