一、移植LCD驱动程序
通过上面的工作,在串口中已经看到了linux2.6.14的启动信息,但是在LCD上没有任何显示,这是因为我们还没有对LCD进行初始化,linux2.6.14已经包含了lcd的驱动程序,驱动程于 /linux2.6.14/drivers/video/目录下,文件名是s3c2410fb.c,头文件是s3c2410fb.h.。我们在这里可以不研究这个文件。只要我们对lcd进行以下初始化就可以了。我们打开/linux-2.6.14/arch/arm/mach-s3c2410/mach-smdk2410.c,首先在这个文件里增加包含文件(见贴图)。然后增加LCD初始化的代码,
static struct s3c2410fb_mach_info gggggg_lcdcfg
__initdata = {
.fixed_syncs= 0,
.regs={
.lcdcon1=
S3C2410_LCDCON1_TFT16BPP |
S3C2410_LCDCON1_TFT |
S3C2410_LCDCON1_CLKVAL(6),
.lcdcon2=
S3C2410_LCDCON2_VBPD(2) |
S3C2410_LCDCON2_LINEVAL(319) |
S3C2410_LCDCON2_VFPD(0) |
S3C2410_LCDCON2_VSPW(4),
.lcdcon3=
S3C2410_LCDCON3_HBPD(47) |
S3C2410_LCDCON3_HOZVAL(239) |
S3C2410_LCDCON3_HFPD(15),
.lcdcon4=
S3C2410_LCDCON4_MVAL(1) |
S3C2410_LCDCON4_HSPW(31),
.lcdcon5=
S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_HWSWP,
},
.lpcsel= 0x0,
.gpccon= 0xaaaaaaaa,
.gpccon_mask= 0xffffffff,
.gpcup= 0xffffffff,
.gpcup_mask= 0xffffffff,
.gpdcon= 0xaaaaaaaa,
.gpdcon_mask= 0x0,
.gpdup= 0xffffffff,
.gpdup_mask= 0xffffffff,
.width= 240,
.height= 320,
.xres= {240,240,240},
.yres= {320,320,320},
.bpp= {16,16,16},
};
static void __init sdmk2410_init(void) {
set_s3c2410fb_info(&hfrk_lcdcfg);
}
在系统初始化中增加对lcd的初始化。 MACHINE_START(SMDK2410, 'SMDK2410')
/* @TODO:request a new identifier and switch
* to SMDK2410 */
/* Maintainer: Jonas Dietsche */
……
.map_io = smdk2410_map_io,
.init_irq = smdk2410_init_irq,
.init_machine = sdmk2410_init, /*这一句是新增加的*/
.timer = &s3c24xx_timer,
MACHINE_END
现在我们重新保存这个文件,现在需要重新进入配置菜单,检查一下LCD的相关选项是否选上,[Device
Drivers->Graphics
support->]这个配置菜单下面是相关LCD的配置。回到根目录下,输入make编译内核,重现烧写内核到开发板,再次启动 linxu2.6.14以后就可以在lcd上看到一个小的企鹅。我们的lcd驱动已经移植完成了。 |