linux vga 驱动,Linux VGA驱动移植实验【转】

有了前面的LCD驱动的框架,再移植VGA驱动就相当的容易了。默认在光盘中已经支持了多款VGA驱动,我们在此基础上增加分辨率为1440*900的驱动。

在kernel/drivers/video/samsung/x4412_lcds.c中添加结构体vga_1440_900:

/* 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,

};

复制代码

注意,上面的所有数据全来源于VGA的VESA标准,调试其他任意的VGA驱动,其参数都需要遵循VESA标准。

在结构体数组x4412_lcd_config中添加1440*900的信息:

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},

};

复制代码

在kernel/drivers/video/samsung/s3cfb_ops.c的s3cfb_map_default_video_memory函数中,默认存在如下程序:

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

复制代码

修改为:

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

复制代码

这是内核关于不同分辨率的视频缓存存在的BUG。

编译内核后,更新内核映像,同时进入uboot后,修改uboot环境变量,执行指令如下:

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驱动,和些方法完全雷同。

原文:http://www.cnblogs.com/zzb-Dream-90Time/p/7479834.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值