冰恋 发表于 2015-11-21 10:49:33

S3C2440 Linux驱动移植——LED heartbeat

  开发板: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修改为
  

static struct s3c24xx_led_platdata smdk_pdata_led1/*smdk_pdata_led4*/ = {
.gpio      = S3C2410_GPB(5),//S3C2410_GPF(4),
.flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name      = "led1",//"led4",
.def_trigger    = "heartbeat",//"timer",
};

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


  将smdk_led4结构体更名为smdk_led1。


  
  将smdk_devs数组修改为如下:

static struct platform_device __initdata *smdk_devs[] = {
&s3c_device_nand,
&smdk_led1,
//&smdk_led5,
//&smdk_led6,
//&smdk_led7,
};



  最后修改smdk_machine_init函数如下:



void __init smdk_machine_init(void)
{
/* Configure the LEDs (even if we have no LED support)*/
s3c2410_gpio_cfgpin(S3C2410_GPB(5), S3C2410_GPIO_OUTPUT);
//s3c2410_gpio_cfgpin(S3C2410_GPF(4), S3C2410_GPIO_OUTPUT);
//s3c2410_gpio_cfgpin(S3C2410_GPF(5), S3C2410_GPIO_OUTPUT);
//s3c2410_gpio_cfgpin(S3C2410_GPF(6), S3C2410_GPIO_OUTPUT);
//s3c2410_gpio_cfgpin(S3C2410_GPF(7), S3C2410_GPIO_OUTPUT);
s3c2410_gpio_setpin(S3C2410_GPB(5), 1);
//s3c2410_gpio_setpin(S3C2410_GPF(4), 1);
//s3c2410_gpio_setpin(S3C2410_GPF(5), 1);
//s3c2410_gpio_setpin(S3C2410_GPF(6), 1);
//s3c2410_gpio_setpin(S3C2410_GPF(7), 1);
if (machine_is_smdk2443())
smdk_nand_info.twrph0 = 50;
s3c_device_nand.dev.platform_data = &smdk_nand_info;
platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));
s3c_pm_init();
}



  3.验证


  编译内核,烧入后,并运行。
  系统启动后,LED开始闪烁,同时可以在sys文件系统中看到该LED。如下:
  #pwd

/sys/class/leds

#ls

led1
页: [1]
查看完整版本: S3C2440 Linux驱动移植——LED heartbeat