如何在Linux下实现设备的配置(上)
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.1 配置键盘的设备模块
对于我们常见的键盘一般有三种类型,其一为老式的五针键盘,其二为ps/2键盘,其三是usb鼠标。对于前两种键盘,一般现在的Linux发行版都把它们需要的设备模块打包入内核,所以无需进行附加的模块插入操作,键盘就能够正常工作。而对于usb类型的键盘,一般而言,要使它正常工作必须先插入对应的设备模块。
对于usb类型的键盘,您若是要通过手动加载模块的方式使其工作,必须首先插入usb桥接器模块,然后您还必须插入键盘模块usbkbd.o,以及keybdev.o,这样usb键盘才能够正常工作。此时,运行的系统命令:
/sbin/modprobe usbkbd
/sbin/modprobe keybdev
对于2.2.x系列的内核若要内核的kmod在需要时自动加载则必须在/etc/modules.conf文件中设置别名usb-inte易做图ce,它对应您所使用的桥接器模块。例如,当桥接器的类型为UHCI时,在/etc/modules.conf中加入设备别名:
alias usb-inte易做图ce 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 配置鼠标
2.1 鼠标的基本信息
Linux支持四种不同的总线鼠标硬件接口:Inport(Microsoft),Logitech,PS/2和ATI-XL。2.4内核也支持IBM PC110数字化板和Apple Desktop鼠标。
Inport mice
Inport mice包含大多数旧类型的微软鼠标。Inport mice通常连接到主板的接口卡上。假如鼠标线连接头是圆的,有9针,则可能是Inport mice。
Logitech mice
PS/2 mice
ATI combo video/mice
IBM PC110 palmtop digitizer
Apple Desktop Mouse
Hybrid Mice
对于鼠标协议,大多数总线鼠标使用BusMouse协议,一些古老的Logitech鼠标使用MouseSystems协议,而一些更老的微软鼠标使用Logitech协议。PS/2鼠标总是使用PS/2协议。
不同类型的鼠标对应的设备文件:
接口类型
设备
主设备号 次设备号
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
表2-1
创建对应设备的命令:
mknod /dev/logimm
c 10 0
mknod /dev/psaux
c 10 1
mknod /dev/inportbm c 10 2
mknod /dev/atibm
c 10 3
mknod /dev/input/mice
c 13 63
在创建了鼠标对应的设备文件之后,因为现在很多程序都使用/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
/sbin/modprobe mousedev
同样,为了使鼠标驱动程序能够自动加载,您也需要在/etc/modules.conf文件中创建usb-inte易做图ce(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 网卡配置过程
3.1 配置网卡的设备模块
按照总线类型来分,现在的以太网卡主要有PCI网卡、ISA网卡和PCMCIA网卡。为使这些网卡正常工作,要在/etc/modules.conf中设置设备别名eth0,以及要传递给驱动程序的设备参数。这样内核在需要使用驱动程序时,会由内核服务kmod使用系统命令modprobe(insmod)自动装载需要的设备模块。
在配置网卡时,如果此网卡能够自动检测,那么您只需要通过设备标识,在设备描述信息文件中查得它对应的设备驱动程序,然后再由此信息配置网卡。但是这种方法对于