移植Linux2.6.24.7到博创2410S之:LCD(SHARP LQ080V3DG01)驱动移植
来源:互联网 发布:软件销售是什么 编辑:程序博客网 时间:2024/06/06 14:02
参考材料:
移植Linux2.6.22.2到博创2410-S(s3c2410A)(补:LCD驱动移植)
http://blog.chinaunix.net/u1/34474/showart_396609.html
解决了移植2.6.24内核的LCD驱动移植问题
http://www.linuxdiyf.com/viewarticle.php?id=84032
一.移植LCD驱动程序
在Linux2.6.24.7下移植LCD驱动程序十分简单,只要在内核源码arch/arm/mach-s3c2410/mach-smdk2410.c里添加初始化s3c2410的LCD控制器时所需要的参数。而这些参数可以参考arch/arm/mach-s3c2410/mach-qt2410.c文件中对SHARP LQ080V3DG01型LCD控制器初始化的相关代码。现在我介绍一下移植过程:
1.修改arch/arm/mach-s3c2410/mach-smdk2410.c文件
(1)添加头文件
#include <asm/arch/fb.h>
(2)添加初始化s3c2410的LCD控制器时所需的参数
这些参数可参考arch/arm/mach-s3c2410/mach-qt2410.c文件中对SHARP LQ080V3DG01型LCD控制器初始化的相关代码。添加如下代码:
/* LCD driver info */
/* Configuration for 640x480 SHARP LQ080V3DG01 */
static struct s3c2410fb_mach_info qt2410_lcd_info __initdata = {
.type = S3C2410_LCDCON1_TFT,
.regs = {
.lcdcon1 = S3C2410_LCDCON1_TFT16BPP |
S3C2410_LCDCON1_TFT |
S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */
.lcdcon2 = S3C2410_LCDCON2_VBPD(18) | /* 19 */
S3C2410_LCDCON2_LINEVAL(479) |
S3C2410_LCDCON2_VFPD(10) | /* 11 */
S3C2410_LCDCON2_VSPW(14), /* 15 */
.lcdcon3 = S3C2410_LCDCON3_HBPD(43) | /* 44 */
S3C2410_LCDCON3_HOZVAL(639) | /* 640 */
S3C2410_LCDCON3_HFPD(115), /* 116 */
.lcdcon4 = S3C2410_LCDCON4_MVAL(0) |
S3C2410_LCDCON4_HSPW(95), /* 96 */
.lcdcon5 = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
},
.lpcsel = ((0xCE6) & ~7) | 1<<4,
.gpccon= 0xaa8002a8,
.gpccon_mask= 0xffc003fc,
.gpcup= 0xf81e,
.gpcup_mask= 0xf81e,
.gpdcon= 0xaa80aaa0,
.gpdcon_mask= 0xffc0fff0,
.gpdup= 0xf8fc,
.gpdup_mask= 0xf8fc,
.width = 640,
.height = 480,
.xres = {
.min = 640,
.max = 640,
.defval = 640,
},
.yres = {
.min = 480,
.max = 480,
.defval = 480,
},
.bpp = {
.min = 16,
.max = 16,
.defval = 16,
},
};
但linux2.6.24内核中数据结构有了重大的变化,原s3c2410fb_mach_info结构体已被拆成了二部分,一个是s3c2410fb_display,另一个是s3c2410fb_mach_info。另外,在linux2.6.24内核中,LCD控制寄存器lcdcon1-4全部用函数进行了自动设置。
对于这两个数据结构的初始化,也可参考linux2.6.24内核arch/arm/mach-s3c2410/mach-qt2410.c文件中对SHARP LQ080V3DG01型LCD控制器初始化的相关代码。针对2.6.24内核,其添加如下代码:
/*Configuration for 640x480 SHARP LQ080V3DG01 */
static struct s3c2410fb_display qt2410_lcd_cfg __initdata = {
/* lcd configuration registers */
.lcdcon5 = S3C2410_LCDCON5_FRM565 |
S3C2410_LCDCON5_INVVLINE |
S3C2410_LCDCON5_INVVFRAME |
S3C2410_LCDCON5_PWREN |
S3C2410_LCDCON5_HWSWP,
/* LCD type */
.type = S3C2410_LCDCON1_TFT,
/* Screen size */
.width = 640,
.height = 480,
/* Screen info */
.xres = 640,
.yres = 480,
.bpp = 16,
.pixclock = 40000,
.left_margin = 44,
.right_margin = 116,
.hsync_len = 96,
.upper_margin = 19,
.lower_margin = 11,
.vsync_len = 15,
};
//LCD driver info
static struct s3c2410fb_mach_info qt2410_lcd_info __initdata = {
.displays = &qt2410_lcd_cfg, /* attached diplays info */
.num_displays = 1, /* number of defined displays */
.default_display = 0,
/* GPIOs */
.gpccon = 0xaa8002a8,
.gpccon_mask = 0xffc003fc,
.gpcup = 0xf81e,
.gpcup_mask = 0xf81e,
.gpdcon = 0xaa80aaa0,
.gpdcon_mask = 0xffc0fff0,
.gpdup = 0xf8fc,
.gpdup_mask = 0xf8fc,
/* lpc3600 control register */
.lpcsel = ((0xCE6) & ~7) | 1<<4,
};
(3)添加LCD控制器的寄存器参数设置函数
查找smdk2410_init,添加如下代码。
static void __init smdk2410_init(void)
{
//设置LCD控制器的寄存器参数
s3c24xx_fb_set_platdata(&qt2410_lcd_info); //add code
platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();
}
2.配置内核
输入以下命令,开始配置内核。
#make menuconfig
添加如下选项:
Device Drivers --->
Graphics support --->
<*> Support for frame buffer devices --->
<*> S3C2410 LCD framebuffer support
Display device support --->
<*> Display panel/monitor support
Console display driver support --->
<*> Framebuffer Console support
[*] Framebuffer Console Rotation
[*] Select compiled-in fonts
[*] VGA 8x8 font
[*] VGA 8x16 font
[*] Mini 4x6 font
[*] Sparc console 8x16 font
[*] Bootup logo --->
--- Bootup logo
[*] Standard 224-color Linux logo
上面只涉及移植LCD驱动必须添加的选项,内核详细配置过程可参考网络上相关资料。
配置好内核后,输入以下命令,重新编译内核。
# make dep 提供变量依赖关系信息
# make clean 删除生成的模块和目标文件
# make zImage 编译内核生成压缩的映像
# make modules 编译模块
# make modules_install 安装编译完成的模块
编译完成后,在arch/arm/boot目录下生成了zImage文件,即为压缩的内核镜像。再通过,Windows操作系统下的超级终端将新的内核镜像烧写到flash上的相应分区。
烧写完成后,启动开发板,就可以看到linux的logo——小企鹅。
二.LCD驱动的测试
通过将MPlayer移植到ARM2410开发板上,来对刚移植完的LCD驱动进行测试。
1.移植MPlayer
(1)搭建交叉编译环境
使用root登陆宿主机linux系统,将arm-linux-gcc-3.3.2.tar.gz软件包解压到/usr/local/arm之中。这样,arm-linux工具链就在/usr/local/arm/3.3.2/bin文件夹之中。
然后,修改/root/.bash_profile文件,在PATH变量的定义后面加上下面一行代码,保存后退出。
PATH=${PATH}:/usr/local/arm/3.3.2/bin
在提示符之后输入source /root/.bash_profile
在提示符之后输入arm并且连续按两次table键,确认系统已经包含arm-linux-gcc-3.3.2编译器,如图3所示。
(2)解压MPlayer-1.0pre7try2.tar.bz2
在实验目录下,解压MPlayer-1.0pre7try2.tar.bz2软件包,并改名为MPlayer
# tar jxvf MPlayer-1.0pre7try2.tar.bz2
# mv MPlayer-1.0pre7try2 MPlayer
(3)编译生成MPlayer应用程序
进入MPlayer目录之后,输入如下命令:
# ./configure --cc=arm-linux-gcc-3.3.2 --host-cc=gcc --target=arm-armv4l-linux --enable- linux-devfs --disable-win32 --disable-dvdread --enable-fbdev --disable-mencoder --enable- libavcodec --enable-liba52 --disable-libmpeg2 --enable-static --disable-mp3lib --disable-live
执行make,完成之后会在该目录下生成可执行文件mplayer
# make
2.测试LCD驱动
启动开发板,远程mount宿主机的程序目录,运行MPlayer:
# mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.123:/arm2410s /tmp
# cd /tmp/MPlayer
# ./mplayer test.avi
随后,便可在LCD上看到MPlayer显示效果。
- 移植Linux2.6.24.7到博创2410S之:LCD(SHARP LQ080V3DG01)驱动移植
- 移植Linux2.6.22.2到博创2410-S(s3c2410A)(LCD驱动)
- Linux2.6.24移植:LCD驱动
- Linux2.6.24移植:LCD驱动
- linux2.6.24下lcd驱动移植的小结
- 14、linux2.6.31--LCD驱动移植
- 移植Linux2.6.24.7到博创2410-S(s3c2410s),包括AX88796移植
- linux系统移植之LCD驱动移植
- s3c2440之LCD驱动移植
- linux2.6.32.2 mini2440平台移植--LCD 背光驱动
- linux2.6.22.6中针对s3c2410的LCD驱动移植
- linux2.6.32.2 LCD触屏驱动移植
- linux2.6.32.2 mini2440平台移植--LCD 背光驱动
- 2410 移植LCD 驱动LTV350QV
- LCD驱动移植(一)
- LCD驱动移植(二)
- linux2.6.32.2 mini2440平台移植-- LCD 显示驱动(W35屏)
- SPI驱动的移植(Linux2.6.24)
- C++类的继承与多重继承的访问控制(网易学院)
- C++设计模式
- C# aspx 数据绑定方法集
- asp php jsp区别
- 留一份名单,以供研究:2009中国企业500强全名单
- 移植Linux2.6.24.7到博创2410S之:LCD(SHARP LQ080V3DG01)驱动移植
- 获取本地系统时间
- C#对图片的几种简单处理
- Oracle 绑定变量
- 顺藤摸瓜
- 我是怎么招聘程序员的
- 关于结构化、半结构化、非结构化问题
- 2009广东百强100强企业
- evolution 与 outlook 的中文附件兼容问题