移植Linux2.6.24.7到博创2410S之:LCD(SHARP LQ080V3DG01)驱动移植

 

考材料:

植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.2 4 . 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,

    },

};

linux 2.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_i nfo __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 显示效果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值