zoukankan      html  css  js  c++  java
  • Linux VGA驱动移植实验【转】

    本文转载自:http://m.blog.csdn.net/bzw73/article/details/46564275

    有了前面的LCD驱动的框架,再移植VGA驱动就相当的容易了。默认在光盘中已经支持了多款VGA驱动,我们在此基础上增加分辨率为1440*900的驱动。
    在kernel/drivers/video/samsung/x4412_lcds.c中添加结构体vga_1440_900:
    1. /* VGA-1440X900 */
    2. static struct s3cfb_lcd vga_1440_900 = {
    3.          .width         = 1440,
    4.          .height        = 900,
    5.          .bpp  = 32,
    6.          .freq  = 60,
    7.          .timing = {
    8.                    .h_fp = 48,
    9.                    .h_bp          = 80,
    10.                    .h_sw         = 32,
    11.                    .v_fp = 3,
    12.                    .v_fpe         = 1,
    13.                    .v_bp          = 17,
    14.                    .v_bpe        = 1,
    15.                    .v_sw         = 6,
    16.          },
    17.         
    18.          .polarity = {
    19.                    .rise_vclk      = 1,
    20.                    .inv_hsync      = 1,
    21.                    .inv_vsync      = 0,
    22.                    .inv_vden       = 0,
    23.          },
    24.          .init_ldi = NULL,
    25. };
    复制代码
           注意,上面的所有数据全来源于VGA的VESA标准,调试其他任意的VGA驱动,其参数都需要遵循VESA标准。
    在结构体数组x4412_lcd_config中添加1440*900的信息:
    1. static struct {
    2.          char * name;
    3.          struct s3cfb_lcd * lcd;
    4. } x4412_lcd_config[] = {
    5.          { "ek070tn93",             &ek070tn93},
    6.          { "vs070cxn",               &vs070cxn},
    7.          { "vga-1024x768",       &vga_1024_768},
    8.          { "vga-1280x1024",     &vga_1280_1024},
    9.          { "vga-1440x900",      &vga_1440_900},
    10.          { "vga-1920x1200",     &vga_1920_1200},
    11. };
    复制代码
           在kernel/drivers/video/samsung/s3cfb_ops.c的s3cfb_map_default_video_memory函数中,默认存在如下程序:
    1. memset(fb->screen_base, 0, fix->smem_len);
    复制代码
           修改为:
    1. memset(fb->screen_base, 0, fix->smem_len/3);
    复制代码
           这是内核关于不同分辨率的视频缓存存在的BUG。
           编译内核后,更新内核映像,同时进入uboot后,修改uboot环境变量,执行指令如下:
    1. setenv bootargs "lcd=vga-1440x900 tp=ft5x06-1024x600 cam=ov2655 mac=00:09:c0:ff:ee:58"
    复制代码
           这时,在x4412_lcds.c的lcd_setup函数会通过uboot传递给内核的环境变量自动匹配LCD参数,真正实现一个内核管理多个LCD屏及多个分辨率的VGA的功能。到此,针对1440*900的VGA分辨率的驱动移植完毕,移植其他类型的LCD或其他分辨率的VGA驱动,和些方法完全雷同。
  • 相关阅读:
    流媒体技术原理及播放方式(浅显易懂)
    实时音视频技术难点及解决方案
    流媒体技术简介
    DSP广告系统架构及关键技术解析(转)
    大型网站架构 图片服务器分离
    大话铁道部12306订票系统云架构
    技术揭秘12306改造(一):尖峰日PV值297亿下可每秒出票1032张
    12306火车票预定系统的需求分析
    PowerDesigner16.5 使用遇到的问题
    Ubuntu不输入密码执行sudo命令方法介绍
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7479834.html
Copyright © 2011-2022 走看看