九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 3992|回复: 1
打印 上一主题 下一主题

x4412&ibox项目实战60-Linux VGA驱动移植实验

[复制链接]
跳转到指定楼层
楼主
发表于 2014-12-10 19:04:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有了前面的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. };
复制代码
       注意,上面的所有数据全来源于VGAVESA标准,调试其他任意的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.cs3cfb_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.clcd_setup函数会通过uboot传递给内核的环境变量自动匹配LCD参数,真正实现一个内核管理多个LCD屏及多个分辨率的VGA的功能。到此,针对1440*900VGA分辨率的驱动移植完毕,移植其他类型的LCD或其他分辨率的VGA驱动,和些方法完全雷同。

回复

使用道具 举报

沙发
发表于 2014-12-24 20:28:45 | 只看该作者
学习了。准备研究如何实现将不同的分辨率设置项做到界面中,让用户自己设置。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-11-23 13:18 , Processed in 0.018049 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表