S3C2440 Linux驅(qū)動(dòng)移植——LED heartbeat
掃描二維碼
隨時(shí)隨地手機(jī)看文章
開發(fā)板:TQ2440
內(nèi)核:Linux 2.6.32
PC OS:Ubuntu 11.04
本文將對(duì)LED驅(qū)動(dòng)的移植進(jìn)行說明,本文的LED用于實(shí)現(xiàn)heartbeat,也就是系統(tǒng)啟動(dòng)以后,led會(huì)想人類的心臟一樣,按固定頻率進(jìn)行閃爍。
除非系統(tǒng)死機(jī),否則LED是不會(huì)停止閃爍的。
1. 配置內(nèi)核,如下圖
2. 修改代碼
TQ2440開發(fā)板提供了4個(gè)LED可供用戶控制,本文用其中一個(gè)LED實(shí)現(xiàn)heartbeat功能。
該LED和GPB5號(hào)管腳相連。
打開文件arch/arm/plat-s3c24xx/common-smdk.c
將smdk_pdata_led4修改為
staticstructs3c24xx_led_platdatasmdk_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",
};
由于這是板子上的第一個(gè)led,所以將名字也修改為LED1。
將smdk_led4結(jié)構(gòu)體更名為smdk_led1。
將smdk_devs數(shù)組修改為如下:
staticstructplatform_device__initdata*smdk_devs[]={
&s3c_device_nand,
&smdk_led1,
//&smdk_led5,
//&smdk_led6,
//&smdk_led7,
};
最后修改smdk_machine_init函數(shù)如下:
void__initsmdk_machine_init(void)
{
/*ConfiguretheLEDs(evenifwehavenoLEDsupport)*/
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. 驗(yàn)證
編譯內(nèi)核,燒入后,并運(yùn)行。
系統(tǒng)啟動(dòng)后,LED開始閃爍,同時(shí)可以在sys文件系統(tǒng)中看到該LED。如下:
[root@yj423 leds]#pwd
/sys/class/leds
[root@yj423 leds]#ls
led1