Linux 下设备的配置过程是指在检测到设备类型、设备当前工作参数等信息之后,使用这些信息来配置设备的驱动程序,工作方式等,(设备的检测过程参见 《如何在 Linux 下实现硬件的自动检测》 )。要完成这样的任务,需要做两方面的工作:
其一是需要一个详尽的设备信息文件,这个文件描述了设备标识、与设备标识对应的设备驱动程序、设备配置参数(设备选项)、设备设置的详细描述、设备配置方法描述、设备对应的别名、设备的主设备号等信息。
现在的 Linux 内核中使用 kmod 来完成设备模块的自动加载,它的一般工作机制是:在第一次引用设备模块时,内核使用系统命令 /sbin/modprobe 加载这个设备模块。为了使这种机制正常工作,您首先需要使用 depmod -a 建立表述模块之间依赖关系的文件 modules.dep,然后在 /etc/modules.conf 中设置正确的设备别名(关于 /etc/modules.conf 的详细介绍参见本文 附录 A ),如果还需要设置设备对应的参数。举例来说,在设置网卡时网卡的驱动程序是 ne2k-pci,网卡的设备别名是 eth0,则在文件 /etc/modules.conf 中加入别名 alias eth0 ne2k-pci,就设置了 ne2000 兼容的 PCI 网卡,这样当有程序要尝试访问网络时,内核会自动加载网卡驱动程序 ne2k-pci。
其二是需要根据设备的类型,以及安装的 Linux 系统版本(不同的 Linux 发行版对于同一设备的配置脚本文件存在差异),设置设备对应的配置脚本文件。
配置键盘
1.1 配置键盘的设备模块
对于我们常见的键盘一般有三种类型,其一为老式的五针键盘,其二为 ps/2 键盘,其三是 usb 鼠标。对于前两种键盘,一般现在的 Linux 发行版都把它们需要的设备模块打包入内核,所以无需进行附加的模块插入操作,键盘就能够正常工作。而对于 usb 类型的键盘,一般而言,要使它正常工作必须先插入对应的设备模块。
对于 usb 类型的键盘,您若是要通过手动加载模块的方式使其工作,必须首先插入 usb 桥接器模块,然后您还必须插入键盘模块 usbkbd.o,以及 keybdev.o,这样 usb 键盘才能够正常工作。此时,运行的系统命令:
/sbin/modprobe usbkbd |
对于 2.2.x 系列的内核若要内核的 kmod 在需要时自动加载则必须在 /etc/modules.conf 文件中设置别名 usb-interface,它对应您所使用的桥接器模块。例如,当桥接器的类型为 UHCI 时,在 /etc/modules.conf 中加入设备别名:
alias usb-interface usb-uhci
对于 2.4.x 系列的内核,此设备别名则变为:
alias usb-controller usb-uhci
在设置了此别名之后,系统启动时会自动进行 usb 设备检测。当检测过程发现连结的设备是系统支持的,那么系统会自动插入所需的模块。
1.2 键盘配置文件
键盘的配置文件 /etc/sysconfig/keyboard,它的内容很简单,可选配置项为 KEYTABLE(随着发行版本的不同这个文件的内容会有所差异,但是这个字段是最重要的)。例如,当设置 KEYTABLE = "us"时,表示系统使用美式键盘。
然后,为了正确的使用键盘上的功能键,您还需要调用命令 dumpkeys 生成文件 /etc/sysconfig/console/default.kmap。
/usr/bin/dumpkeys > /etc/sysconfig/console/default.kmap
这个文件描述了键盘的键盘扫描码和加入键盘修饰之后的键盘的相应的键盘扫描码。
同样,为了键盘能在 X 系统环境下正常工作,您可能也需要在 X 系统下对键盘进行设置,这时您就必须使用 xmodmap 来设置正确的键盘映射。例如,
/usr/X11R6/bin/xmodmap /usr/share/xmodmap/xmodmap.fr
设置您的 X 系统下的键盘为法语键盘。
在正确的配置了 /etc/sysconfig/keyboard 文件之后,X 系统的配置程序会根据此文件的信息配置 X 中关于键盘配置的小节。当此文件内容不正确或者是此文件不存在时,X 系统是无法启动和配置的。
回页首
配置鼠标
2.1 鼠标的基本信息
Linux 支持四种不同的总线鼠标硬件接口:Inport(Microsoft),Logitech,PS/2 和 ATI-XL。2.4 内核也支持 IBM PC110 数字化板和 Apple Desktop 鼠标。
对于鼠标协议,大多数总线鼠标使用 BusMouse 协议,一些古老的 Logitech 鼠标使用 MouseSystems 协议,而一些更老的微软鼠标使用 Logitech 协议。PS/2 鼠标总是使用 PS/2 协议。
不同类型的鼠标对应的设备文件:
表 2-1
接口类型 | 设备 | 主设备号 | 次设备号 |
Logitech | /dev/logibm | 10 | 0 |
PS/2 | /dev/psaux | 10 | 1 |
Inport | /dev/inportbm | 10 | 2 |
ATI-XL | /dev/atibm | 10 | 3 |
USB mouse | /dev/input/mice | 13 | 63 |
创建对应设备的命令:
mknod /dev/logimm c 10 0 |
在创建了鼠标对应的设备文件之后,因为现在很多程序都使用 /dev/mouse 作为缺省的鼠标设备文件,所以为了使鼠标正常工作你还要创建一个符号连接 /dev/mouse 指向真实的鼠标设备文件。例如,对于 ps/2 鼠标,/dev/mouse 指向 /dev/psaux,对于 usb 鼠标,/dev/mouse/ 指向 /dev/input/mice,对于串口鼠标 /dev/mouse 指向 /dev/ttyS0。对于不同的 linux 发行版本,这些文件可能有所不同,上述介绍主要是基于 Redhat 发布的配置。
对于现在最常见的三种鼠标:串口鼠标、PS/2 鼠标和 USB 鼠标而言,由于对 PS/2 鼠标支持一般都打在内核中,所以您也不需要在鼠标工作之前插入设备模块。但对于其他的两种鼠标,插入模块的操作一般是必须的。对于串口鼠标而言,您必须先 插入模块 serial.o,
/sbin/modprobe serial |
成功的插入模块之后,如果串口鼠标支持 即插即用的串口协议 ,您可以从串口(/dev/ttyS*)读到鼠标的类型信息,然后由此信息,完成鼠标的配置文件。对于 USB 鼠标,为了使其正常工作,您必须先插入模块 usbmouse.o 和 mousedev.o
/sbin/modprobe usbmouse |
同样,为了使鼠标驱动程序能够自动加载,您也需要在 /etc/modules.conf 文件中创建 usb-interface(usb-controller)别名。
2.2 鼠标配置文件
正确配置鼠标必须生成配置文件 /etc/sysconfig/mouse,它包括下列选项:MOUSETYPE、XMOUSETYPE、FULLNAME、XEMU3、DEVICE。 该鼠标配置文件也是 X 配置文件中鼠标配置节的基础。如果没有这个文件,很多 X 配置程序将无法工作。
MOUSETYPE=
配置鼠标的类型,包括 ps/2、Busmouse、imps2、netmouse、Microsoft、Logitech、MouseMan、MMHitTab、MouseSystems、pnp、logim、ms3、MMSeries 等。
XMOUSETYPE=
X 系统下配置的鼠标的类型,包括 MouseMan、IntelliMouse、MMSeries、MMHittab、Logitech、MouseMan、Microsoft、MouseSystems、PS/2、BusMouse 等。
FULLNAME=
描述鼠标设备的全名。例如,对于普通 PS/2 鼠标,其全名为 PS/2|Standard。
XEMU3=
是否仿真三键鼠标,可选参数为 yes 或 no。
DEVICE=
描述鼠标对应的设备文件。例如。对于普通 PS/2 鼠标,设备文件为 psaux。
2.3 鼠标的配置技巧
通过 gpm 能在命令行方式下使用鼠标。这样在控制台方式下,就可以使用鼠标进行剪贴等操作了。例如,对于 ps/2 鼠标,它的配置方式是:
gpm -t ps/2 -m /dev/psaux
如果不指定 -m 选项,那么系统会去查找文件 /dev/mouse。
鼠标移动不规则可能是因为对鼠标设置了错误的协议。如新的 Logitech 鼠标不使用 Logitech 协议,而用微软协议(MouseMan)。如果您的鼠标移动不规则,那您可能首先需要尝试更换一下 MouseType(XMouseType)指定的值。
在 X 系统下,您如果需要更换鼠标的左、右键,那么可以执行 xmodmap -e "pointer = 3 2 1"。
回页首
网卡配置过程
3.1 配置网卡的设备模块
按照总线类型来分,现在的以太网卡主要有 PCI 网卡、ISA 网卡和 PCMCIA 网卡。为使这些网卡正常工作,要在 /etc/modules.conf 中设置设备别名 eth0,以及要传递给驱动程序的设备参数。这样内核在需要使用驱动程序时,会由内核服务 kmod 使用系统命令 modprobe(insmod)自动装载需要的设备模块。
在配置网卡时,如果此网卡能够自动检测,那么您只需要通过设备标识,在设备描述信息文件中查得它对应的设备驱动程序,然后再由此信息配置网卡。但是这种方 法对于普通 isa 总线的 ne2000 兼容网卡就不适合了,因为它们在设计时一般不满足 isapnp 规范,因此无法读出它们的设备信息。但是这种类型的网卡一般使用 ne 作为设备驱动程序,但是为使其正常工作还须指定 io 地址和占用的 irq。
例如,对于 ne2000 兼容的 isa 网卡,比如 DE220X,它们的驱动程序为 ne。此时要使这种网卡正常工作,需要在 /etc/modules.conf 文件中加入:
alias eth0 ne |
一般而言,对于这种网卡,只有指定了正确的 I/O 地址空间,网卡才能正常工作。这个地址是和此网卡在 DOS 下使用的端口地址完全相同的。如果端口地址 0x300 上不能找到网卡,那么您可以试试 0x240 等其他地址。
3.2 网卡配置文件
要正确的配置网卡必须生成如下脚本文件,/etc/sysconfig/network,/etc/sysconfig/network- scripts/ifcfg-eth0(对于只有一个网卡时,多个网卡为 ifcfg-eth1、ifcfg-eth2 以此类推)和 /etc/hosts。若您还需要配置域名解析服务,那么还要生成文件 /etc/resolv.conf。
对于 /etc/sysconfig/network 脚本文件,最常用的可设置项包括 NETWORKING,FORWARD_IPV4,HOSTNAME,DOMAINNAME,GATEWAY,GATEWAYDEV。注意:在没有配置网 卡时,也要设置此文件,以使得本机的回环设备 (lo) 能够正常工作,此设备是很多 linux 内部通讯的基础。
NETWORKING=
表示系统是否使用网络,一般设置为 yes。如果设为 no,则不能使用网络,而且很多系统服务程序将无法启动。
FORWARD_IPV4=
表示是否支持 ipv4 的自动转发。一般在只有一块网卡时,设置此项为 false。
HOSTNAME=
设置本机的主机名,这里设置的主机名要和 /etc/hosts 中设置的主机名对应。
DOMAINNAME=
设置本机的域名。
GATEWAY=
设置本机连接的网关的 IP 地址。例如,网关为 10.0.0.2
GATEWAYDEV=
与此网关进行通讯时,所使用的网卡设备别名。例如,当使用了一块网卡,并连接了网关时,此时的值为 eth0。
缺省没有网卡时的设置为:
NETWORKING="yes" |
/etc/sysconfig/network-scripts/ifcfg-*,描述网络接口的信息。每个不同的网络接口对应不同的文件。例 如,ifcfg-eth0 对应第一块网卡 eth0 可能出现的配置信息。常见的配置选项包括 DEVICE、BOOTPROTO、IPADDR、NETMASK、NETWORK、BROADCAST、ONBOOT。
DEVICE=
描述网卡对应的设备别名,例如 ifcfg-eth0 的文件中它为 eth0。
BOOTPROTO=
设置网卡获得 ip 地址的方式,可能的选项为 static,dhcp 或 bootp,分别对应静态指定的 ip 地址,通过 dhcp 协议获得的 ip 地址,通过 bootp 协议获得的 ip 地址。
IPADDR=
如果设置网卡获得 ip 地址的方式为静态指定,此字段就指定了网卡对应的 ip 地址。
NETMASK=
网卡对应的网络掩码。
NETWORK=
网卡对应的网络地址。
BROADCAST=
对应的子网广播地址。
ONBOOT=
系统启动时是否设置此网络接口,设置为 yes 时,系统启动时激活此设备。
/etc/resolv.conf,系统生成这个文件进行域名解析。否则,安装过程的反向名查询无法工作。可能出现的选项:
search domainName 指定的域名
nameserver dnsServer 域名服务器,可以指定多个。
/etc/hosts,将主机名列表加入此文件。
回页首
Modem 配置过程
对于 Modem 的配置过程而言,我们现在一般使用 kppp 进行拨号,使用这个程序整个拨号过程将变得非常简单。因此本文就不再介绍使用 pppd 和 chat 进行的手工拨号过程了。本文仅介绍一下如何设置基本的设备驱动模块和底层设备文件的配置。在配置这些文件之后,您就可以使用 kppp 拨号了。
4.1 外置 Modem
在配置外置 Modem 时,因为大部分的 Modem 都是通过串口连接到计算机上的,所以在配置 Modem 之前,您必须插入串口驱动模块 serial.o。在成功插入串口通讯模块之后,这时只要将设备 /dev/modem 连接到相应的串口设备上就可以了。例如,在 /dev/ttyS0(对应 Windows 下的 COM1)上连接了 Modem,则建立连接:
ln -sf /dev/ttyS0 /dev/modem
在这之后,外置的串口 modem 就可以正常工作了。您可以通过使用 minicom 向串口发送 AT 命令,来检测和配置 modem 的工作方式。经常使用的命令:
表 4-1
AT 命令 | 命令描述 |
ATDT(ATDP) | 使用语音(脉冲)进行拨号 |
ATZ | 复位调制解调器 |
ATH | 挂起电话 |
ATI0 | 返回调制解调器的状态 |
ATI1 | 执行 ROM 校验和检查并返回值 |
ATI2 | 验证 ROM 校验,返回 OK 或 ERROR |
ATI3 | 返回 ROM 部件的软件版本号。 |
ATI4 | 查询调制解调器的状态信息,包括波特率、奇偶校验位长度,字长度、拨号方式、寄存器状态等信息。 |
ATI5 | 查询调制解调器的 ram 中的状态信息。 |
ATI6 | 查询调制解调器的链路状态信息,包括已传送(接收、丢失)的字符数、传送的数据块数目、链路连接状态、最后一次拨号时间等。 |
ATI7 | 获得配置的序言文件,此文件描述的信息包括:modem 支持的通讯协议,Fax 版本号,EPROM 的版本号。 |
ATI8 | 获得连接时间 |
ATI9 | 获得调制解调器的描述名称 |
例如,对于一款联想射雕外置式 Modem,在启动 minicom 之后,输入 ATI9 的返回值为:
(1.0AKY1010//Modem/AKY1010/56K DATA FAX VOICE MODEM)FF
4.2 内置的 Linmodem
Linmodem 是 winmodem 的 Linux 实现。关于 Linmodem 的进一步信息您可以访问 www.linmodems.org。现在的 Linmodem 一般都是 PCI 类型的,您也可以通过 PCI 检测过程,获得设备设备描述信息。在获得描述信息之后,您可以比较一下您的 Modem 是否属于下面列出的 Modem 类型。现在支持的 Linmodem 包括:
Linmodem 为了在某种程度上和外置调制解调器的编程接口一致,所以一般都要生成一个仿真的串口设备。为了生成这些设备文件,一般可以使用命令 mknod。
chgrp uucp /dev/ttyS14
chmod 666 /dev/ttyS14
可允许非根用户使用此服务拨号。
ln -s /dev/devicefile /dev/modem
您也可以使用 setserial,修改串口配置,比如设置串口的波特率,同样也可以设置 /etc/serial.conf 设置串口的工作参数。
setserial -agv /dev/ttyS*
回页首
声卡配置过程
5.1 内核声卡驱动程序的配置
现在正在使用的声卡主要有 PCI 和 ISA 两种。在 Linux 系统下,对这两种类型声卡的配置过程实际上是生成配置文件 /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 代表了不同的设备:
表 5-1
编号 | 对应的设备 |
0 | 混音器(Mixer) |
2 | MIDI |
3,4 | DSP |
这时就要求您设置正确的声卡服务模块别名,这样声卡才能够正常工作。 声卡对应的设备文件:
表 5-2
设备文件名 | 设备描述 |
/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 | 显示声音驱动程序的状态 |
pc 扬声器提供下列设备:
/dev/pcaudio 等价于 /dev/audio |
您可以直接将声音文件送入对应的设备,比如,将 .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 |
选项包括 mute,unmute,capture,nocapture,rec,norec,数字或 left:right。amixer 不带参数运行时,返回声卡上所有通道的设置情况。
为了在每次插入声卡驱动模块时,都打开静音,您可以在 /etc/modules.conf 加入下列语句:
post-install snd-card-sb16 amixer -c 0 sset 'Master',0 100%, / |
在成功插入了 alsa 声卡模块之后,系统会出现 /proc/asound 目录,这个目录描述了声卡的工作情况,以及创建的设备文件。
在您加载 snd-pcm-oss 设备模块之后,你也能使用与 oss 兼容的方式存取声卡,这时如下的映射会被完成:
表 5-3
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 |
对于 /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 |
# 运行 amixer 命令,打开声音输出
post-install snd-card-es1938 amixer -c 0 sset 'Master',0 100%,/
100% unmute && amixer -c 0 sset 'PCM ',0 100% unmute