【实验目的】
在嵌入式系统中经常使用LCD进行交互,这里我们通过修改平台代码使我们的内核支持LCD,完成相应功能!
【实验环境】
1、 Ubuntu 10.10发行版
2、 u-boot-2010.03
3、 FS2410平台
4、 交叉编译器 arm-none-linux-gnueabi-gcc-4.3.2
【实验步骤】
s3c2410 LCD的驱动内核中已经存在,我们需要完成的工作就只使这个驱动能够正常的工作,这需要我们修改平台代码
1、 头文件的添加
在arch/arm/mach-s3c2410/mach-smdk2410.c中添加头文件
#include <mach/fb.h>
#include <mach/regs-lcd.h>
2、 添加相应LCD相关平台信息
在arch/arm/mach-s3c2410/mach-smdk2410.c中添加如下内容:
static struct s3c2410fb_display s3c2410_lcd_cfg[] __initdata = {
{
.lcdcon5 = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVCLK |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
.type = S3C2410_LCDCON1_TFT,
.width = 320,
.height = 240,
.pixclock = 100000, /* HCLK/10 */
.xres = 320,
.yres = 240,
.bpp = 16,
.left_margin = 13,
.right_margin = 8,
.hsync_len = 4,
.upper_margin = 2,
.lower_margin = 7,
.vsync_len = 4,
},
};
static struct s3c2410fb_mach_info s3c2410_fb_info __initdata = {
.displays = s3c2410_lcd_cfg,
.num_displays = ARRAY_SIZE(s3c2410_lcd_cfg),
.default_display = 0,
.lpcsel = ((0xCE6) & ~7) | 1<<4,
};
在函数smdk2410_init中添加如下内容
s3c24xx_fb_set_platdata(&s3c2410_fb_info);
3、 配置内核
Device Drivers --->
Graphics support --->
<*> Support for frame buffer devices --->
<*> S3C2410 LCD framebuffer support
[*] Bootup logo --->
这些选项在这个内核多数已经选上了,这里列出来让大家知道添加LCD驱动涉及到的内容!
4、 编译内核
$ make zImage
5、 拷贝内核镜像到tftpboot下
$ cp arch/arm/boot/zImge /tftpboot
6、 插上LCD启动系统
启动系统后发现LCD上有一个可爱的企鹅LOGO,这就是我们Linux的吉祥物