linux-2.6.22.6内核移植—LCD驱动的添加
【实验目的】
在嵌入式系统中经常使用LCD进行交互,这里我们通过修改平台代码使我们的内核支持LCD,完成相应功能!
【实验环境】
1、 Ubuntu 10.10发行版
2、 u-boot-2010.03
3、 FS2410平台
4、 交叉编译器 arm-linux-gnu-gcc (3.4.5)
【实验步骤】
s3c2410 LCD的驱动内核中已经存在,我们需要完成的工作就只使这个驱动能够正常的工作,这需要我们修改平台代码
1、 头文件的添加
在arch/arm/mach-s3c2410/mach-smdk2410.c中添加头文件
#include <asm/arch/fb.h>
2、 添加相应LCD相关平台信息
在arch/arm/mach-s3c2410/mach-smdk2410.c中添加如下内容:
static struct s3c2410fb_mach_info smdk2410_lcdcfg __initdata={
.fixed_syncs=0,
.regs={
.lcdcon1=(7<<8)|(0<<7)|(3<<5)|(12<<1),
.lcdcon2=(14<<24)|(239<<14)|(11<<6)|2,
.lcdcon3=(37<<19)|(319<<8)|19,
.lcdcon4=(13<<8)|29,
.lcdcon5=(1<<11)|(1<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(1<<5)|(1<<3)|(0<<1)|(1),
},
.width=320,
.height=240,
.type=S3C2410_LCDCON1_TFT,
.lpcsel=((0xCE6)&~7)|1<<4,
.width=320,
.height=240,
.xres={
.min=320,
.max=320,
.defval=320,
},
.yres={
.min=240,
.max=240,
.defval=240,
},
.bpp={
.min=16,
.max=16,
.defval=16,
},
};
再函数smdk2410_init中添加如下内容
s3c24xx_fb_set_platdata(&smdk2410_lcdcfg);
3、 配置内核
Device Drivers --->
Graphics support --->
<*> Support for frame buffer devices --->
<*> Support for frame buffer devices
[*] Enable firmware EDID
[*] Enable Video Mode Handling Helpers
<*> S3C2410 LCD framebuffer support
<*> Virtual Frame Buffer support
Console display driver support --->
<*> Framebuffer Console support
[*] Bootup logo --->
[*] Standard 224-color Linux logo
这些选项在这个内核有些已经选上了,这里列出来让大家知道添加LCD驱动涉及到的内容!
4、 编译内核
$ make uImage
5、 拷贝内核镜像到tftpboot下
$ cp arch/arm/boot/zImge /tftpboot
6、 插上LCD,启动目标系统,设置uboot参数
(X,Y分别用开发主机IP和开发板IP替换)
FS2410 # setenv serverip 192.168.7.X FS2410 # setenv ipaddr 192.168.7.Y FS2410# setenv gatewayip 192.168.7.1
FS2410 # setenv bootcmd tftp 30008000 zImage \; go 30008000
FS2410 # setenv bootargs console=ttySAC0,115200 init=/linuxrc ethaddr=08:00:3e:26:0a:XX root=/dev/nfs rw nfsroot=192.168.7.X:/opt/filesystem ip=192.168.7.Y:192.168.7.X:192.168.7.1:255.255.255.0:farsight_XX:eth0:off (X,Y分别用开发主机IP和开发板IP替换,这一行参数需在一行)
FS2410 # saveenv |
启动系统后发现LCD上有一个可爱的企鹅LOGO,这就是我们Linux的吉祥物