您的位置:首页 > 编程语言 > C语言/C++

FL2440添加自带led驱动

2017-04-20 21:47 239 查看

FL2440添加自带led驱动

在之前学习驱动自己写过led的驱动程序,其实s3c2440对于驱动已经支持得非常好,内核里面已经有了led的驱动程序,我们要使能led驱动只需要稍作修改。

make menuconfig 配置

Device Drivers  --->
[*] LED Support  --->
[*]   LED Class Support
<*>   LED Support for Samsung S3C24XX GPIO LEDs//添加LED支持


源码修改

s3c24xx系列的芯片的led硬件信息基本一致,因此内核将led的硬件设备信息源码放在了 arch/arm/plat-s3c24xx/common-smdk.c,对照芯片手册,我们要把led0~led3的相关GPIO分别配置成PB5,PB6,PB8,PB10

vim arch/arm/plat-s3c24xx/common-smdk.c
/* LED devices */

static struct s3c24xx_led_platdata smdk_pdata_led4 = {
.gpio       = S3C2410_GPB(5),/*led0为PB5*/
.flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name       = "led0",
.def_trigger    = "timer",
};

static struct s3c24xx_led_platdata smdk_pdata_led5 = {
.gpio       = S3C2410_GPB(6),/*led1为PB6*/
.flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name       = "led1",
.def_trigger    = "nand-disk",
};

static struct s3c24xx_led_platdata smdk_pdata_led6 = {
gpio       = S3C2410_GPB(8),/*led2为PB8*/
.flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name       = "led2",
};

static struct s3c24xx_led_platdata smdk_pdata_led7 = {
.gpio       = S3C2410_GPB(10),/*led3为PB10*/
.flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name       = "led3",
};


完成以上操作之后重新编译内核并且下载到开发板。

测试运行

对于向led这样的设备模型,系统认为所有的设备都是挂接在总线上的,而要使设备工作,就需要相应的驱动。设备模型会产生一个虚拟的文件系统——sysfs,它给用户提供了一个从用户空间去访问内核设备的方法,它在linux里的路径是/sys。如果要写程序访问sysfs,可以像读写普通文件一样来操作/sys目录下的文件。

下载到内核之后会在/sys/class/目录下生成leds目录,会看到led0 led1 led2 led3,在leds目录下执行ls -l 可知,led0、led1 、led2、 led3都是软连接



进入到led0目录下,可以看到brightness 等文件



其中brightness就是控制等亮灭的文件,max_brightness可以控制亮灭程度的最大值假如设定是100就是0到100代表不同的亮度(需要单板硬件的支持)。

- 向brightness文件中写入1控制灯亮

- 向brightness文件中写入0控制灯亮

cat > brightness //向brightness写入数据

可以看到,写入1时,led0点亮;写入0时,led0熄灭。对于其他的led灯也是同样的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 内核 3c