移植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里添加初始化s3c2410LCD控制器时所需要的参数。而这些参数可以参考arch/arm/mach-s3c2410/mach-qt2410.c文件中对SHARP LQ080V3DG01LCD控制器初始化的相关代码。现在我介绍一下移植过程:

1修改arch/arm/mach-s3c2410/mach-smdk2410.c文件

1)添加头文件

#include <asm/arch/fb.h>

2)添加初始化s3c2410LCD控制器时所需的参数

这些参数可参考arch/arm/mach-s3c2410/mach-qt2410.c文件中对SHARP LQ080V3DG01LCD控制器初始化的相关代码。添加如下代码:

/* 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 LQ080V3DG01LCD控制器初始化的相关代码。针对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上的相应分区。

烧写完成后,启动开发板,就可以看到linuxlogo——小企鹅。

二.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显示效果

原创粉丝点击