您的位置:首页 > 运维架构 > Linux

Linux VGA驱动移植实验

2015-06-19 18:27 465 查看
[align=left]有了前面的LCD驱动的框架,再移植VGA驱动就相当的容易了。默认在光盘中已经支持了多款VGA驱动,我们在此基础上增加分辨率为1440*900的驱动。[/align]
[align=left]在kernel/drivers/video/samsung/x4412_lcds.c中添加结构体vga_1440_900:[/align]

/* VGA-1440X900 */

static struct s3cfb_lcd vga_1440_900 = {

         .width         = 1440,

         .height        = 900,

         .bpp  = 32,

         .freq  = 60,

         .timing = {

                   .h_fp = 48,

                   .h_bp          = 80,

                   .h_sw         = 32,

                   .v_fp = 3,

                   .v_fpe         = 1,

                   .v_bp          = 17,

                   .v_bpe        = 1,

                   .v_sw         = 6,

         },

        

         .polarity = {

                   .rise_vclk      = 1,

                   .inv_hsync      = 1,

                   .inv_vsync      = 0,

                   .inv_vden       = 0,

         },

         .init_ldi = NULL,

};

复制代码
[align=left]       注意,上面的所有数据全来源于VGA的VESA标准,调试其他任意的VGA驱动,其参数都需要遵循VESA标准。[/align]
[align=left]在结构体数组x4412_lcd_config中添加1440*900的信息:[/align]

static struct {

         char * name;

         struct s3cfb_lcd * lcd;

} x4412_lcd_config[] = {

         { "ek070tn93",             &ek070tn93},

         { "vs070cxn",               &vs070cxn},

         { "vga-1024x768",       &vga_1024_768},

         { "vga-1280x1024",     &vga_1280_1024},

         { "vga-1440x900",      &vga_1440_900},

         { "vga-1920x1200",     &vga_1920_1200},

};

复制代码
[align=left]       在kernel/drivers/video/samsung/s3cfb_ops.c的s3cfb_map_default_video_memory函数中,默认存在如下程序:[/align]

memset(fb->screen_base, 0, fix->smem_len);

复制代码
[align=left]       修改为:[/align]

memset(fb->screen_base, 0, fix->smem_len/3);

复制代码
[align=left]       这是内核关于不同分辨率的视频缓存存在的BUG。[/align]
[align=left]       编译内核后,更新内核映像,同时进入uboot后,修改uboot环境变量,执行指令如下:[/align]

setenv bootargs "lcd=vga-1440x900 tp=ft5x06-1024x600 cam=ov2655 mac=00:09:c0:ff:ee:58"

复制代码
[align=left]       这时,在x4412_lcds.c的lcd_setup函数会通过uboot传递给内核的环境变量自动匹配LCD参数,真正实现一个内核管理多个LCD屏及多个分辨率的VGA的功能。到此,针对1440*900的VGA分辨率的驱动移植完毕,移植其他类型的LCD或其他分辨率的VGA驱动,和些方法完全雷同。[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: