| 过程实际上是生成配置文件/etc/modules.conf,建立正确的设备别名和声卡设备驱动程序的对应关系。在正确的设置驱动模块之后,使用混音器程序设置声卡的输出音量。
若您的声卡是ISA PnP类型的,那么如果这块声卡在dos(windows)系统下也工作良好,那么您可以先记住声卡的工作参数,包括IRQ、DMA和I/O。一般而言,在Linux系统下应该使用和DOS下一样的参数。
如果您不知道它的工作参数,您可以通过/proc/isapnp获得声卡的配置空间,它包括dma、ioport和irq等信息。然后您可以通过检查/proc/interrupts,/proc/ioports和/proc/dma文件获知系统中空闲的irq、ioports和dma等信息,由此您可以选择合适的声卡配置参数。
在2.4.x内核中,实现了ISA PnP支持,同时一部分声卡驱动程序现在也支持无需使用isapnp工具完成自动检测和配置了。关于声卡设备的详细信息您也可以查看内核文档/usr/src/linux/Documentation/sound/中的文件。
对于PCI声卡而言,它们的驱动程序包含了自动检测过程,所以您只需要插入正确的驱动模块,声卡一般就能正常工作了。
在声卡模块被第一次引用时,内核会要求加载相应的驱动模块。与声卡模块对应的设备别名是sound-slot-0(0表示系统中的一个声卡,以此类推)。例如,在/etc/modules.conf中加入:
alias sound-slot-0 esssolo1 就配置了ESS Solo-1声卡。这条语句表示在需要声卡时,自动加载模块esssolo1。
有时加载了sound-slot-0对应的设备模块之后,并不能使声卡的所有功能生效。这时设备就会请求访问sound-service-0-n别名。n代表了不同的设备:
编号
对应的设备
0
混音器(Mixer)
2
MIDI
3,4
DSP表 5-1
这时就要求您设置正确的声卡服务模块别名,这样声卡才能够正常工作。声卡对应的设备文件:
设备文件名
设备描述
/dev/audio
正常连接到/dev/audio0
/dev/audio0
sun工作站兼容的声音设备(仅部分实现,不支持sun ioctl接口,仅支持u-law编码)
/dev/audio1
第二个声音设备(安装多个声卡时使用)
/dev/dsp
正常连接到/dev/dsp0
/dev/dsp0
第一个数字采样设备
/dev/dsp1
第二个数字采样设备
/dev/mixer
正常连接到/dev/mixer0
/dev/mixer0
第一个声音混音器
/dev/mixer1
第二个声音混音器
/dev/music
高级序列化接口
/dev/sequencer
底层MIDI,FM和GUS存取
/dev/sequencer2
正常连接到/dev/music
/dev/midi00
第一个原MIDI端口
/dev/midi01
第二个原MIDI端口
/dev/midi02
第三个原MIDI端口
/dev/midi03
第四个原MIDI端口
/dev/sndstat
显示声音驱动程序的状态表 5-2
pc扬声器提供下列设备:
/dev/pcaudio 等价于/dev/audio
/dev/pcsp 等价于/dev/dsp
/dev/pcmixer 等价于/dev/mixer
您可以直接将声音文件送入对应的设备,比如,将.au声音文件通过将其送入/dev/audio中播放,原始采样也可被送入/dev/dsp。
cat sample.su > /dev/audio
但是这样做一般效果较差,播放时应采用play命令。对于wavplay和vplay(snd-util包)会以最好的效果播放wav文件,但是它们不能识别微软adpcm压缩的wav文件。若手动设置争取正确的参数之后,splay用于播放大多数声音文件。
读/dev/audio和/dev/dsp返回的采样数据可以重定向到一个文件。vrec可以使这个过程更容易。可能需要一个混音器程序选择适当的输入设备。
5.2 ALSA声卡驱动程序的配置 对于声卡驱动程序,除了内核自带的驱动程序之外,您还可以使用Advanced Linux Sound Architecture(ALSA,http://www.alsa-project.org/)提供的驱动程序。它支持一系列主流声卡,同时它和内核的声音结构互相兼容,在某种程度上,可以说是内核的声卡驱动模块的补充。
ALSA的声卡驱动程序的一般命名规则是snd-card-<soundcard>。soundcard代表不同类型的声卡。例如,对于所有的16位Soundblaster声卡,它们对应的驱动程序模块为snd-card-sb16。
若与需要linux内核声音驱动的向后兼容性,您还需要两个模块snd-pcm-oss和snd-mixer-oss。对于amixer设置的多个混音器,它们都是针对不同的设备的。比如CD通道的设置是针对CD播放器的。而很多应用程序,如象mpg123,xmms,realplayer,都要依赖PCM通道的设置。MIC代表麦克风。不同的Gain部分对于不同的使用能提供特别的增益。
缺省情况下ALSA静音所有的输出。为了获得声音,必须解除主音量和PCM音量的静音。
amixer -c 0 sset ''''Master'''',0 100%,100% unmute amixer -c 0 sset ''''PCM '''',0 100% unmute
选项包括mute,unmute,capture,nocapture,rec,norec,数字或left:right。amixer不带参数运行时,返回声卡上所有通道的设置情况。
为了在每次插入声卡驱动模块时,都打开静音,您可以在/etc/modules.conf加入下列语句:
post-install snd-card-sb16 amixer -c 0 sset ''''Master'''',0 100%,100% unmute && amixer -c 0 sset ''''PCM '''',0 100% unmute 在成功插入了alsa声卡模块之后,系统会出现/proc/asound目录,这个目录描述了声卡的工作情况,以及创建的设备文件。
在您加载snd-pcm-oss设备模块之后,你也能使用与oss兼容的方式存取声卡,这时如下的映射会被完成:
ALSA设备
OSS设备
次设备号
/dev/snd/pcmC0D0
/dev/audio0(/dev/audio)
4
/dev/snd/pcmC0D0
/dev/dsp0(/dev/dsp)
3
/dev/snd/pcmC0D1
/dev/adsp(/dev/adsp)
12
/dev/snd/pcmC1D0
/dev/audio1
20
/dev/snd/pcmC1D0
/dev/dsp1
19
/dev/snd/pcmC1D1
/dev/adsp1
28
/dev/snd/pcmC2D0
/dev/audio2
36
/dev/snd/pcmC2D0
/dev/dsp2
35
/dev/snd/pcmC2D1
/dev/adsp2
44表 5-3
对于/dev/mixer设备,要加载snd-mixer-oss,可以保证和老的oss混音器的兼容性。如果您插入了上述设备之后,声音系统仍无法正常工作,您可以运行snddevices命令,建立正确的设备文件。
由于为使ALSA正常工作,需要设置大量的设备别名,下面就给出一个/etc/modules.conf的例子,它能够完成ESS Solo1声卡的自动配置工作。其他的ALSA设备的设置也基本与此声卡相同。
# 设置ALSA设备的主设备号,它固定为116
alias char-major-116 snd
# 设置OSS设备的主设备号,它固定为14,这使得ALSA复用OSS设备
alias char-major-14 soundcore
# ALSA设备别名
alias sound-card-0 snd-card-es1938
# OSS设备别名
alias sound-slot-0 sound-card-0
# 安装不同的声卡服务
alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias snd-minor-oss-12 snd-pcm-oss
# 运行amixer命令,打开声音输出
post-install snd-card-es1938 amixer -c 0 sset ''''Master'''',0 100%,100% unmute && amixer -c 0 sset ''''PCM '''',0 100% unmute
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支持设备。启动此方式的优点主要有三点:其一是在控制台方式工作时,您能设置更大的控 上一页 [1] [2] [3] [4] 下一页 |