分享
 
 
 

如何在Linux下实现设备的配置(下)

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

本文是《如何在Linux下实现设备的配置》的第二部分,将接着向您介绍窗口系统(XFree86)的配置过程。

6 窗口系统(XFree86)的配置过程

6.1 显示卡的描述文件介绍(CardDB)

CardDB是X配置程序使用的显示卡数据文件。在对XFree86进行配置时,配置程序一般都需要读取其上的内容完成显示卡的配置。它的内容与使用的XFree86的版本密切相关。一般而言,它保存的位置是在/usr/X11R6/lib/X11/目录下。现在我们就对XFree86 4.1.0的CardDB文件进行简单的介绍:

NAME

显示卡的描述名称

CHIPSET

描述显示卡使用的芯片集

SERVER

为了和3.x版本的XFree86向下兼容,由此字段指定此显示卡在XFree86 3.x下的X服务器,例如VGA16,SVGA等。

DRIVER

描述在4.x版本的XFree86下显示卡的驱动程序模块。

LINE

设置显示卡特定的选项信息,这样的选项信息出现在XF86Config的Device节,对应设备的Option参数。

SEE

是指此显示卡的配置信息与SEE字段所制定的显示卡完全相同,例如

NAME Number Nine GXE64 with S3 Trio64

SEE S3 Trio64 (generic)

表示Number Nine GXE64的显示卡配置与S3 Trio64 (generic)的配置完全相同。

RAMDAC

RAM直接存取控制的控制芯片型号

DACSPEED

直接存取控制的速度

CLOCKCHIP

此显示卡的时钟芯片的

NOCLOCKCHIP

此显示卡无时钟芯片

UNSUPPORTED

此类型的显卡,此版本的XFree86不能提供支持

COMMENT

注释

例如,对于RIVA TNT显卡,XFree86 4.1.0中的信息如下:

NAME RIVA TNT

CHIPSET RIVATNT

SERVER SVGA

DRIVER nv

NOCLOCKPROBE

6.2 显示器信息检测

显示器的信息在XFree86系统中时非常重要的,它对应XFree86配置文件的Monitor节。在这一节中包含监视器的水平扫描频率范围,垂直扫描频率范围,显示器支持的显示模式等信息。同样的,显示器的自动检测也就是通过程序自动读出显示器的上述信息。它的正确设置对于XFree86能否正常显示起到很重要的作用。

对于显示器的信息检测,要求它必须支持vbe(VESA的BIOS级扩展)。在显示器支持此扩展时,通过系统实模式下的BIOS调用INT 10H,可以取得显示器的详细信息。

可能需要的BIOS子功能调用为:

AH = 0x4F00

获得关于监视器的VESA的BIOS级扩展信息

AH = 0x4F01

获得监视器支持的特定显示模式

AH = 0x4F02

设置当前的视频模式

AH = 0x4F03

获得当前的视频模式

AH = 0x4F04

保存/还原svga显示方式

AH = 0x4F15

获得监视器的EDID扩展信息

一般的显示器使用上述中断的方式是:先检查显示器是否支持VESA的BIOS级扩展,如果显示器支持BIOS级扩展,就查看显示器支持的显示模式,然后获得显示器的EDID扩展信息。在读出的EDID扩展信息中,可以查出显示器的垂直回扫频率范围和水平回扫频率范围,也可以计算出显示器的大小,对于一部分显示器还可以从此信息中读出监视器的制造商信息。

由显示器读出的信息可以设置XF86Config的Monitor节,对于设置了正确的垂直回扫频率范围和水平回扫频率范围的显示器,X自动设置为当前显示分辨率下支持的最高扫描频率的显示模式(此显示模式要求有对应的Modeline)。

但是如果您的显示器不支持EDID扩展信息,那么您就只有根据经验来设置显示器的垂直回扫频率范围和水平回扫频率范围。如果设置的范围高于监视器的实际支持范围,那么显示器会出现黑屏的现象。

对于编程实现,如果您要调用上述bios中断,那么必须使用lrmi这个实模式接口,并设置正确的寄存器信息,完成系统调用。具体的检测显示器信息的例子,您可以参考Xconfigurator下ddcprobe的源程序,也可以参考Mandrake系统下的ddcxinfos命令的源程序。

6.3 窗口系统的配置过程

要正确的在Linux下配置窗口系统,实际上就是生成正确的XFree86配置文件,这个文件一般保存在/etc/X11/下,在X版本是3.x时,它的文件名为XF86Config,在X版本是4.x时,它的文件名一般为XF86Config-4。在现在的发行版本中,处于硬件兼容性的考虑,他们一般都让这两个版本的XFree86包共存。因此,您也可以在/etc/X11目录下,发现这两个文件同时存在,这时使用那个文件就要看系统的X服务器的版本了。

无论是那个版本的XF86Config文件都是由许多节(Section)构成的,但是这些节描述的内容主要包括:键盘、鼠标、显示器、显示卡、字体(颜色)等。

在X版本是3.x时,键盘和鼠标的描述分别对应Keyboard和Pointer节。而在X版本是4.x时,键盘和鼠标的描述都对应InputDevice节,只是对应不同的驱动模块,键盘的驱动模块是keyboard,鼠标的驱动模块是mouse。配置这两节所需要的信息可以从/etc/sysconfig/keyboard和/etc/sysconfig/mouse中获得,它们的详细内容,本文的前面章节已作了介绍。

配置显示器实际上是生成XF86Config文件的Monitor节,需要配置的信息一般包括:水平扫描频率范围、垂直扫描频率范围、监视器支持的显示模式、制造商信息。对于支持vbe和edid扩展的显示器,可以根据从显示器上读出的信息设置对应字段的值。但是如果显示器不支持上述扩展,则显示卡的设置必须由用户手动完成。如果您在配置XFree86时不指定这一节,那么XFree86会设置显示模式为640x480,垂直扫描频率为60hz的方式。不同显示模式的扫描频率: 显示分辨率 垂直扫描频率(Hz) 水平扫描频率(kHz)

640x480 60 31.50

640x480 72 36.50

640x480 75 37.50

640x480 85 43.27

800x600 60 37.80

800x600 72 48.00

800x600 85 55.84

800x600 100 64.02

1024x768 60 48.40

1024x768 70 56.50

1024x768 76 62.50

1024x768 85 70.24

1024x768 100 80.21

1280x1024 61 64.20

1280x1024 70 74.59

1280x1024 74 78.85

1280x1024 76 81.13

1280x1024 85 91.15

1280x1024 100 107.16

1600x1200 60 75.00

1600x1200 70 87.50

1600x1200 75 93.75

1600x1200 85 105.77

表 6-1

从上表可以看出,您要设置显示器达到某一分辨率,那么与此相对应,它的扫描频率范围也要包含上表中此分辨率的最低扫描频率。如果您的显示器达不到这个范围,那么XWindow将无法正常工作。如果您设置的扫描频率高于显示器实际的扫描频率范围,由于XFree86会寻找对应分辨率下最高扫描频率进行显示,所以此时XWindow将极有可能黑屏。

在生成配置脚本时,扫描频率的范围也不是越低越好。设置较低的扫描频率范围对于部分LCD显示器就不合适。比如,一部分LCD显示器在800x600分辨率时,最低支持的垂直扫描频率为70Hz,那么您这时指定的水平回扫范围一定要包含48kHz。

在配置完显示器之后,您就需要生成与显示卡对应的描述了。这样的描述信息对应XF86Config文件的Device节。这一节主要描述的显示卡信息包括:显示卡对应的X服务器(X版本在3.x),对应的X设备模块(X版本为4.x),显示卡的设备信息(供应商、型号、支持显存存取方式和显存大小等),以及此显示卡支持的设备选项,比如显示卡是否支持硬件加速、是否支持软光标等。生成窗口系统的配置过程一般是先由pci的设备标识(检测过程见)获得显示卡的类型,由此在XFree86的配置文件CardDB(这个文件可在/usr/X11R6/lib/X11/目录下找到)中查得它对应的显示卡描述,由此信息可以设置此节的描述。

字体和调色板信息描述的是字体和调色板所存放的路径,您如果新加入字体时,需要在此加入正确的字体路径。设置字体路径时,如果指定它为unix:-1,那么就是说您在启动X服务器之前,必须首先启动字体服务器xfs,然后由字体服务器完成字体的访问请求。

在您正确的设置了上述信息之后,您必须将这些信息存放在Screen节中。这一节描述的是完成显示对应的显示卡,显示器,分辨率和缺省深度等信息。

最后,您还必须生成ServerLayout节,由它描述整个系统所使用的显示卡配置节、监视器配置节、鼠标配置节、键盘配置节等信息。

在生成了/etc/X11/XF86Config(XF86Config-4)文件后,您就可以测试一下此配置文件是否正确了。例如,对于XFree86 4.x,生成的配置文件为/etc/X11/XF86Config.test,测试使用如下命令:

XFree86 -xf86config /etc/X11/XF86Config.test :9

-xf86config /etc/X11/XF86Config.test表示使用指定的配置文件启动X服务器

:9 表示在终端9上运行X服务器

一般而言,如果是编程实现X的配置过程的话,则要以子进程的方式(系统调用fork)运行上述命令,在成功启动X服务器之后,运行一个小的图形化程序,让用户选择配置是否成功。

当然,如果您不能得到显卡的详细的设备参数的话,您也可以使用probeonly选项获得显示卡的详细信息。例如,对于XFree86 4.x测试使用如下命令:

XFree86 -probeonly :9

对于正常的启动XFree86之后,系统输出的信息,您可以通过读取/var/log/XFree86.x.log获得。x是指XFree86启动的终端,一般设置此x为0。

在XF86Config文件配置之后,您可以使用startx启动XFree86。这个文件会运行您的登录目录下的.xinitrc文件来修改X Window系统的初始显示状态。这个文件是一个脚本文件。如果这个文件不存在,系统就会默认使用/usr/X11R6/lib/X11/xinit/xinitrc。同时,startx还要查找/etc/X11/X,这个文件是一个链接文件,它指向真正的X服务程序,现在这个程序一般都指向Xwrappers,它是对X服务程序的封装。当然,这个文件也可以直接指向X服务程序XFree86。

6.4 支持FrameBuffer方式的显卡的配置过程

帧缓冲(FrameBuffer)设备是指一种不带视频加速的X11支持设备。启动此方式的优点主要有三点:其一是在控制台方式工作时,您能设置更大的控制台显示区,比如设置1024x768分辨率大小的控制台;其二是可以在其上启动XF86_FBDev(对于XFree86 4.x下,使用启动模块fbdev);其三是可以在启动时显示启动徽标(一只胖胖的企鹅)。

在有时显示卡对应的XFree86驱动程序不能正常工作时,而您又需要比较丰富的色彩时,启动FrameBuffer往往是必须的选择。启动FrameBuffer时,XFree86启动的分辨率由FrameBuffer的启动模式决定。

能够启动FrameBuffer的设备是intel结构下与vesa 2.0标准兼容显卡的帧缓冲设备,但是现在不能在支持vesa 1.2的显卡上支持FrameBuffer。这是因为vesa 1.2不支持线性帧缓冲(线性帧缓冲意味着CPU能访问显卡的每一位)。您可以下载补丁,以使vesafb支持vesa 1.2的显卡,比如一些较老的s3系列显卡。

现在支持vesa 2.0的显卡主要有:

ATI PCI VideoExpression 2MB (max. 1280x1024 @ 8bit)

ATI PCI All-in-Wonder

Matrox Millennium PCI - BIOS v3.0

Matrox Millennium II PCI - BIOS v1.5

Matrox Millennium II AGP - BIOS v1.4

Matrox Millennium G200 AGP - BIOS v1.3

Matrox Mystique & Mystique 220 PCI - BIOS v1.8

Matrox Mystique G200 AGP - BIOS v1.3

Matrox Productiva G100 AGP - BIOS v1.4

All Riva 128 based cards

Diamond Viper V330 PCI 4MB

Genoa Phantom 3D/S3 ViRGE/DX

Hercules Stingray 128/3D with TV output

Hercules Stingray 128/3D without TV output - needs BIOS upgrade (free from

support@hercules.com)

SiS 6326 PCI/AGP 4MB

STB Lightspeed 128 (Nvida Riva 128 based) PCI

STB Velocity 128 (Nvida Riva 128 based) PCI

Jaton Video-58P ET6000 PCI 2MB-4MB (max. 1600x1200 @ 8bit)

Voodoo2 2000

主板集成显示卡:

Trident Cyber9397

SiS 5598

启动FrameBuffer必须设置内核的启动显示模式,设置这个参数是通过内核参数vga=实现的。比如,设置启动之后的分辨率为640x480下的16位色时,传递的参数为vga=785(十进制数)。您也可以在/etc/lilo.conf文件中设置此参数,由lilo传递内核参数。

内核支持的FrameBuffer显示模式如下表: 显示深度 640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200

4 bits 0x302

8 bits 0x300 0x301 0x303 0x305 0x161 0x307 0x31C

15 bits 0x310 0x313 0x316 0x162 0x319 0x31D

16 bits 0x311 0x314 0x317 0x163 0x31A 0x31E

24 bits 0x312 0x315 0x318 0x31B 0x31F

32 bits 0x164

表 6-2

向内核传递vesa选项还包括:

video=vesa:option,多个选项之间可用逗号隔开;

可接受的选项:

ypan

使用vesa保护模式接口显示,可视屏幕是视频内存的一个窗口。

pro

快速的整屏卷滚,允许回滚。

kontra

部分卷滚,可产生一些闪动效果。

ywrap

比ypan速度快,但是兼容性差。

redraw

缺省使用,通过重绘受影响的屏幕区进行重画。

vgapal

缺省使用,标准的vga调色版寄存器。

pmipal

使用保护模式的调色版接口。

例如,下面的操作设置FrameBuffer设备的显示:

export FRAMEBUFFER=/dev/fb1

fbset -fb /dev/fb1 -vyres 600

fbset -fb $FRAMEBUFFER 1024x768@60

startx -- :0 -bpp 16 vt06

在虚拟控制终端6以16为颜色深度启动X服务器。

如果您要对帧缓冲设备编程,则可以象使用/dev/mem一样,读、写、定位以及mmap()此设备。不同的是,您此时操作的设备内存位于视频设备内存中。/dev/fb*设备也支持几种ioctl操作,由此可以获得或设置设备信息。颜色表的处理使用ioctl()。

6.5 XF86Config文件格式(版本为4.x系列)

6.5.1 文件的基本组成

文件的每节都是由下述的部分组成:

Section "SectionName"

SectionEntry

EndSection

SectionName包括:

Files 文件路径名

ServerFlags 服务器标志

Module 动态模块加载

InputDevice 输入设备描述

Device 图形设备描述

VideoAdaptor Xv视频卡描述

Monitor 监视器描述

Modes 视频模式描述

Screen 屏幕配置

ServerLayout 全面的层叠

DRI DRI特定的配置

Vendor 供应商特定的配置

出于向下兼容的目的,下列项虽已废除但是配置文件仍能识别。在新的配置文件中,应使用新的InputDevice项。

Keyboard 键盘配置

Pointer 指针/鼠标配置

老的XInput节已经被废除。

ServerLayout在最高层。它们绑定的输入输出设备会在这一节里使用。输入设备由InputDevice描述,输出设备通常有多个独立的组件组成。多个组件组成Screen节。每个Screen节将图形板和监视器绑定在一起。显示卡由Device节描述,监视器由Monitor节描述。

6.5.2 Files节

Files节指定X服务器的字体路径、调色板路径和模块路径。

FontPath "path"

设置字体的查询路径。对于字体服务器的表示采用下述的形式:

/:

指定与字体服务器连接的传输类型(unix,tcp)。

若此节不指定,则缺省的字体路径是:

/usr/X11R6/lib/X11/fonts/misc/

/usr/X11R6/lib/X11/fonts/Speedo/

/usr/X11R6/lib/X11/fonts/Type1/

/usr/X11R6/lib/X11/fonts/CID/

/usr/X11R6/lib/X11/fonts/75dpi/

/usr/X11R6/lib/X11/fonts/100dpi/

一般而言,推荐的[1] [url=http://www.chinamx.com.cn/Article/os/Linux/200605/20060530122921_27967_2.html][2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有