S3C2440 Linux驱动移植——LED heartbeat

来源:互联网 发布:免费听课的软件 编辑:程序博客网 时间:2024/05/27 14:13

转自 http://blog.csdn.net/yj4231/article/details/11674223

开发板:TQ2440

内核:Linux 2.6.32

PC OS:Ubuntu 11.04


    本文将对LED驱动的移植进行说明,本文的LED用于实现heartbeat,也就是系统启动以后,led会想人类的心脏一样,按固定频率进行闪烁。

除非系统死机,否则LED是不会停止闪烁的。

1. 配置内核,如下图


2. 修改代码

TQ2440开发板提供了4个LED可供用户控制,本文用其中一个LED实现heartbeat功能。

该LED和GPB5号管脚相连。

打开文件arch/arm/plat-s3c24xx/common-smdk.c

将smdk_pdata_led4修改为

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. static struct s3c24xx_led_platdata smdk_pdata_led1/*smdk_pdata_led4*/ = {  
  2.     .gpio        = S3C2410_GPB(5),//S3C2410_GPF(4),  
  3.     .flags        = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,  
  4.     .name        = "led1",//"led4",  
  5.     .def_trigger    = "heartbeat",//"timer",  
  6. };  

由于这是板子上的第一个led,所以将名字也修改为LED1。


将smdk_led4结构体更名为smdk_led1。

将smdk_devs数组修改为如下:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. static struct platform_device __initdata *smdk_devs[] = {  
  2.     &s3c_device_nand,  
  3.     &smdk_led1,  
  4.     //&smdk_led5,  
  5.     //&smdk_led6,  
  6.     //&smdk_led7,  
  7. };  


最后修改smdk_machine_init函数如下:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. void __init smdk_machine_init(void)  
  2. {  
  3.     /* Configure the LEDs (even if we have no LED support)*/  
  4.   
  5.     s3c2410_gpio_cfgpin(S3C2410_GPB(5), S3C2410_GPIO_OUTPUT);  
  6.     //s3c2410_gpio_cfgpin(S3C2410_GPF(4), S3C2410_GPIO_OUTPUT);  
  7.     //s3c2410_gpio_cfgpin(S3C2410_GPF(5), S3C2410_GPIO_OUTPUT);  
  8.     //s3c2410_gpio_cfgpin(S3C2410_GPF(6), S3C2410_GPIO_OUTPUT);  
  9.     //s3c2410_gpio_cfgpin(S3C2410_GPF(7), S3C2410_GPIO_OUTPUT);  
  10.     s3c2410_gpio_setpin(S3C2410_GPB(5), 1);  
  11.     //s3c2410_gpio_setpin(S3C2410_GPF(4), 1);  
  12.     //s3c2410_gpio_setpin(S3C2410_GPF(5), 1);  
  13.     //s3c2410_gpio_setpin(S3C2410_GPF(6), 1);  
  14.     //s3c2410_gpio_setpin(S3C2410_GPF(7), 1);  
  15.   
  16.     if (machine_is_smdk2443())  
  17.         smdk_nand_info.twrph0 = 50;  
  18.   
  19.     s3c_device_nand.dev.platform_data = &smdk_nand_info;  
  20.   
  21.     platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));  
  22.   
  23.     s3c_pm_init();  
  24. }  


3.  验证

编译内核,烧入后,并运行。

系统启动后,LED开始闪烁,同时可以在sys文件系统中看到该LED。如下:

[root@yj423 leds]#pwd
/sys/class/leds
[root@yj423 leds]#ls
led1
0 0
原创粉丝点击