WinCE5.0显卡驱动修改笔记
公司前段时间让我在Geode上安装一个CE5.0,我把系统安装好之后发现显卡驱动不支持开发板的屏幕。我们的屏幕是800x480的,所以我只能自己动手写修改了一下驱动让它能够支持800x480.一下是我对驱动的修改的一些简单的笔记。
1、修改CE5.0使其支持800x480所需要修改的文件如下:
1.1、X:/WINCE500/PLATFORM/Geodelx/Src/Drivers/Lxvideo/lxvideo.reg
1.2、X:/WINCE500/PLATFORM/Geodelx/Src/Drivers/Lxvideo/Cimarron/cim_modes.c
具体步骤:
2.1、注册表的修改即lxvideo.reg的修改,注册表的没有修改之前默认的值如下:
----
[HKEY_LOCAL_MACHINE/Software/Geode]
;"Resolution"="1024 768 85"
; "640 480 60"
; "640 480 75"
; "640 480 85"
; "640 480 90"
; "640 480 100"
; "800 600 60"
; "800 600 75"
; "800 600 85"
-----
; "1280 1024 90"
; "1280 1024 100"
; "1600 1200 60"
; "1600 1200 70"
; "1600 1200 75"
; "1600 1200 85"
; "1600 1200 90"
; "1600 1200 100"
; "1920 1440 60"
; "1920 1440 75"
; "1920 1440 85"
"Resolution"="800 600 60"
"FrameBufferDepth"=dword:10
"EnableCompression"=dword:1
"ClearFrameBuffer"=dword:1
"BackBufferSupport"=dword:1
"EnablePanel"=dword:0
"SimultaneousCRT"=dword:1
"BiosInitPanel"=dword:1
"PanelWidth"=dword:320
"PanelHeight"=dword:258
----
这边只列举出需要注意的地方,其他的地方可以不需要改动。其中要使得系统支持800x480需要改动的地方如下:
"Resolution"="800 480 60"
"EnablePanel"=dword:1
"BiosInitPanel"=dword:0
"PanelWidth"=dword:320
"PanelHeight"=dword:1E0
注*:PanelWidth和PanelHeight是用十六进制表示,即0x320=800,0x1E0=480。
修改源代码:
修改源代码只要是为了添加新的分辨率支持,因为Geode没有支持800x480的显示,所以我们要自己添加一些参数使其支持800x480.在cim_mode.c文件中的CimarronDisplayModes[]数组中添加如下参数:
/************************************************************************/
/*Date; 2010 9.27
/*Author: leewenchao
/*Description:
/* add resolution support for 800x480
/*
/*
/************************************************************************/
/* 800x480 panel*/
{ VG_SUPPORTFLAG_60HZ | /* refresh rate = 60 */
VG_SUPPORTFLAG_8BPP | VG_SUPPORTFLAG_12BPP |
VG_SUPPORTFLAG_15BPP | VG_SUPPORTFLAG_16BPP |
VG_SUPPORTFLAG_24BPP | VG_SUPPORTFLAG_32BPP | /* All BPP supported. */
VG_SUPPORTFLAG_PANEL, /* Panel Mode. */
VG_MODEFLAG_LOW_BAND | /* Low bandwidth mode. */
VG_MODEFLAG_PANELOUT | /* Panel output. */
VG_MODEFLAG_NEG_HSYNC | VG_MODEFLAG_NEG_VSYNC, /* negative syncs */
800, 480, /* No scaling. */
800, 480, /* 800x480 active */
800, 480, /* 800x480 panel */
0, 0, 0, 0, 0, /* No panel registers */
0x0320, 0x0320, 0x0348, 0x03C8, 0x0420, 0x0420, /* horizontal timings */
0x01E0, 0x01E0, 0x01EA, 0x01EC, 0x0205, 0x020D, /* vertical timings */
0, 0, 0, 0, 0, 0, /* No even timings */
(33L << 16) | ((0000L * 65536L) / 10000L), /* freq = 33.0 MHz */
},
/* 800x480 */
{ VG_SUPPORTFLAG_60HZ | /* refresh rate = 60 */
VG_SUPPORTFLAG_8BPP | VG_SUPPORTFLAG_12BPP |
VG_SUPPORTFLAG_15BPP | VG_SUPPORTFLAG_16BPP |
VG_SUPPORTFLAG_24BPP | VG_SUPPORTFLAG_32BPP, /* All BPP supported. */
VG_MODEFLAG_LOW_BAND | /* Low bandwidth mode. */
VG_MODEFLAG_NEG_HSYNC | VG_MODEFLAG_NEG_VSYNC,
800, 480, /* . */
800, 480, /* 800x480 active */
800, 480, /* 800x480 panel */
0, 0, 0, 0, 0, /* No panel registers */
0x0320, 0x0328, 0x0348, 0x03D0, 0x0418, 0x0420, /* horizontal timings */
0x01E0, 0x01E8, 0x01EA, 0x01EC, 0x0205, 0x020D, /* vertical timings */
0, 0, 0, 0, 0, 0, /* No even timings */
(33L << 16) | ((0000L * 65536L) / 10000L), /* freq = 33.0 MHz */
},
这边我添加了两个表项,一个是支持VGA的显示一个是支持Panel的现实,具体这些表项的参数分别代表什么意义可以参见与cim_modes.c同目录下的cim_parm,h中关于VG_DISPLAY_MODE定义。
特别提醒:
我在做实验的时候一开始显示器总是花屏,没有办法正常显示。在AMD官方找了一些资料才知道显卡支持还分VGA和panel,他们有各自不同的消影以及同步参数,还有时钟频率。所以在cim_modes.c中我添加了两项分别是支持Panel和VGA的现实的。如果大家在做实验的过程中遇到花屏的情况也有可能是注册表表项中的"EnablePanel"以及"BiosInitPanel"参数没有设正确。