内核自带LED驱动移植

在fl2440的内核中,本身已经有了LED驱动,我们要根据自己的需求将它使能即可,重要的是如何找到需要修改的位置如何修改。在前面分析过我们自己写的驱动代码,内核中自带的驱动原理也大概相似,首先make menuconfig 下添加内核对LED驱动的支持,然后我们要在内核的drivers/目录下找到leds,然后去看s3c24xx.c里的代码,前面在plat-led中分析过设备和驱动是如何找到彼此的,通过.name,找到设备名,然后返回内核目录下,用grep命令查找我们在驱动中的.name,看设备文件在哪里,然后根据fl2440的硬件原理图对其进行修改,返回内核目录下执行make,       OK。


下面是实际操作过程。

一、首先在内核中添加对LED的支持。

[fanmaolin@Centeros linux-3.0]$ make menuconfig

Device Drivers  --->  

[*] LED Support  --->  


[*]   LED Class Support  

<*>   LED Support for Samsung S3C24XX GPIO LEDs    



二、找到设备信息,进行修改


[fanmaolin@Centeros linux-3.0]$ cd drivers/



会看到leds,


[fanmaolin@Centeros drivers]$ cd leds/


在里面找到 leds-s3c24xx.c   



 [fanmaolin@Centeros leds]$ vim leds-s3c24xx.c

找到.name     =    "s3c24xx_led"我们用它来找到设备信息文件



用grep命令寻找包含这个字符串的文件

[fanmaolin@Centeros linux-3.0]$ grep s3c24xx_led -r *



arch/arm/plat-s3c24xx/common-smdk.c里寻找


根据原理图修改结构体里的信息



[fanmaolin@Centeros linux-3.0]$ vim arch/arm/plat-s3c24xx/common-smdk.c

/* LED devices */
 50 
 51 static struct s3c24xx_led_platdata smdk_pdata_led4 = {
 52     .gpio       = S3C2410_GPB(5),//根据手册改引脚  分别改为5、6、8、10
 53     .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
 54     .name       = "led0",//.name 可以根据自己习惯改,不改也无所谓
 55     .def_trigger    = "timer",
 56 };
 57 
 58 static struct s3c24xx_led_platdata smdk_pdata_led5 = {
 59     .gpio       = S3C2410_GPB(6),
 60     .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
 61     .name       = "led1",
 62     .def_trigger    = "nand-disk",
 63 };
 64 
 65 static struct s3c24xx_led_platdata smdk_pdata_led6 = {
 66     .gpio       = S3C2410_GPB(8),
 67     .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
 68     .name       = "led2",
 69 };
 70 
 71 static struct s3c24xx_led_platdata smdk_pdata_led7 = {
 72     .gpio       = S3C2410_GPB(10),
 73     .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
 74     .name       = "led3",
 75 };


这样就可以了,然后make编译,重新安装内核。。。


三、开发板上进行测试


我们可以在sys/class下看到leds



关于sys/:

sysfs 文件系统总是被挂载在 /sys 挂载点上,sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。它给用户提供了一个从用户空间去访问内核设备的方法,写程序访问sysfs,可以像读写普通文件一样来操作/sys目录下的文件。在/sys/devices 下是所有设备的真实对象,包括如视频卡和以太网卡等真实的设备,也包括 ACPI 等不那么显而易见的真实设备,还有 tty, bonding 等纯粹虚拟的设备;在其它目录如 class, bus 等中则在分类的目录中含有大量对 devices 中真实对象引用的符号链接文件.  


更多详细的关于sysfs的介绍,可以参考:https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/index.html


对于我们的LED,linux把他当作是直接挂载在总线上的,可以直接通过/sys上操作对应文件而控制LED。


可以看到设备信息。

进入led2,

brightness是控制灯的亮灭,>1亮,0灭。 max_brightness可以控制灯的亮度


现在我们对其进行实际操作  

>: echo 2 > brightness


可以看到第三盏灯亮

>: echo 0 > brightness  ,,灯灭。

其它的灯可以同样进行这样的操作。

也可以写一个程序直接对其进行操作,而不用进到文件里面。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值