一、移植环境
主机:ubuntu 8.04-vm 7.0
开发板:tq2440
交叉编译器:arm-linux-gcc (EABI 4.3.3)
内核版本:linux 2.6.32.10
二、移植过程
1. linux 2.6.32.10内核中已经对2440的LCD驱动有支持,我们只需修改其中的部分参数来支持自己的LCD
进入 linux/arch/arm/mach-s3c2440/mach-smdk2440.c
找到如下这个设置lcd初始化参数的结构体, 内核源码如下:
- /* LCD driver info */
- static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
- .lcdcon5 = S3C2410_LCDCON5_FRM565 |
- S3C2410_LCDCON5_INVVLINE |
- S3C2410_LCDCON5_INVVFRAME |
- S3C2410_LCDCON5_PWREN |
- S3C2410_LCDCON5_HWSWP,
- .type = S3C2410_LCDCON1_TFT,
- .width = 240,
- .height = 320,
- .pixclock = 166667, /* HCLK 60 MHz, divisor 10 */
- .xres = 240,
- .yres = 320,
- .bpp = 16,
- .left_margin = 20,
- .right_margin = 8,
- .hsync_len = 4,
- .upper_margin = 8,
- .lower_margin = 7,
- .vsync_len = 4,
- };
2.我们对其进行修改
如果使用的是3.5寸屏:
- //3.5
- static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
- .lcdcon5 = S3C2410_LCDCON5_FRM565 |
- S3C2410_LCDCON5_INVVLINE |
- S3C2410_LCDCON5_INVVFRAME |
- S3C2410_LCDCON5_PWREN |
- S3C2410_LCDCON5_HWSWP,
- .type = S3C2410_LCDCON1_TFT,
- .width = 320,
- .height = 240,
- .pixclock = 80000, /* HCLK 100 MHz, divisor 3 */
- .xres = 320,
- .yres = 240,
- .bpp = 16, //每一个真彩色占16位
- .left_margin = 28, /* for HFPD*/
- .right_margin = 24, /* for HBPD*/
- .hsync_len = 42, /* for HSPW*/
- .upper_margin = 6, /* for VBPD*/
- .lower_margin = 2, /* for VFPD*/
- .vsync_len = 12, /* for VSPW*/
- };
如果使用的是4.3寸屏,进行如下修改
- //4.3
- static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
- .lcdcon5 = S3C2410_LCDCON5_FRM565 |
- S3C2410_LCDCON5_INVVLINE |
- S3C2410_LCDCON5_INVVFRAME |
- S3C2410_LCDCON5_PWREN |
- S3C2410_LCDCON5_HWSWP,
- .type = S3C2410_LCDCON1_TFT,
- .width = 480,
- .height = 272,
- .pixclock = 40000, /* HCLK 100 MHz, divisor 1 */
- // .setclkval = 0x4,
- .xres = 480,
- .yres = 272,
- .bpp = 16,
- .left_margin = 19, /* for HFPD*/
- .right_margin = 10, /* for HBPD*/
- .hsync_len = 30, /* for HSPW*/
- .upper_margin = 4, /* for VBPD*/
- .lower_margin = 2, /* for VFPD*/
- .vsync_len = 8, /* for VSPW*/
- };
VBPD(vertical back porch): 表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应驱动中的upper_margin; VFBD(vertical front porch): 表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的lower_margin; VSPW(vertical sync pulse width): 表示垂直同步脉冲的宽度,用行数计算,对应驱动中的vsync_len; HBPD(horizontal back porch): 表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,对应驱动中的left_margin; HFPD(horizontal front porth): 表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,对应驱动中的right_margin; HSPW(horizontal sync pulse width): 表示水平同步信号的宽度,用VCLK计算,对应驱动中的hsync_len; |
对于以上这些参数的值将分别保存到REGBANK寄存器组中的LCDCON1/2/3/4/5寄存器中:(对寄存器的操作请查看S3c2440datasheet 第15章LCD部分)
LCDCON1:17 - 8位CLKVAL 6 - 5位扫描模式(对于STN屏:4位单/双扫、8位单扫) 4 - 1位色位模式(1BPP、8BPP、16BPP等)
LCDCON2:31 - 24位VBPD 23 - 14位LINEVAL 13 - 6位VFPD 5 - 0位VSPW
LCDCON3:25 - 19位HBPD 18 - 8位HOZVAL 7 - 0位HFPD
LCDCON4: 7 - 0位HSPW
LCDCON5: |
3 配置内核选项。选上LCD支持和Logo图标
内核目录下make menuconfig
Device Drivers --->Graphics support
framebuffer显示支持
选中S3C2410 LCD
4. 重新编译内核并下载到开发板上,系统启动后可以出现小企鹅图标。
阅读(5198) | 评论(0) | 转发(1) |