【目标】
在《Linux基本原理》一章中,我们了解到Linux支持可动态装载和卸载的模块。利用模块,可方便地在内核中添加新组件,卸载不再需要的组件。本章中我们就来实际学习模块管理方法。同时,我们会实际地进行Linux系统中各种设备的管理,了解这些硬件是如何安装,配置的。
【重点内容】
模块的基本概念与应用
Linux系统中各种设备的安装与配置
Linux的模块也是程序,它可以被动态地加载到正在运行的内核里,成为内核的一部分。载入到内核中的模块具有与内核一样的功能,可以访问内核的任意部分。这些模块是可以按需要随时装入和卸下的,将模块从内核中独立出来,而不必预先绑定在内核中,这么做使得内核的尺寸维持在很小,同时有三个优点: 第一,将来修改内核时,不必全部重新编译,可节省工作量;第二,如果需要安装新的模块,不必重新编译内核,只要插入对应的模块即可;第三,减少内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能都交由模块实现。
Linux模块的范围已经包含了SCSI卡、以太网卡、声卡等驱动程序;旧式磁带机、光驱驱动等程序;各类网络通信专访模块;打印机驱动程序,还有很多文件系统模块。可以在启动完成后,方便地加入对驱动网卡、声卡的支持,或是加入某个网络功能,或支持某个文件系统格式,随时机动地赋予系统内核各种功能。
我们上面已经谈到,可以向运行中的内核手工加入模块,以获得新的功能支持。要完成内核模块的加入或卸载动作,可由ismod与rmmod这两个程序完成,insmod命令将一个模块插入运行中的内核,模块文件一般以.o为结尾,象网卡驱动模块tulip.o。
# insmod /lib/modules/2.2.x/net/tulip.o |
此命令将网卡模块tulip插入到内核中,现在的系统就支持这种网卡了。
若要删除tulip模块,可执行rmmod命令删除已经安插在内核中的模块:
# rmmod tulip |
要注意的是,上面的rmmod后面接的是模块名称(tulip),也就是lsmod命令列出来的名称,而insmod后面接的是模块文件名称(tulip.o)。而在移出该模块后,自然内核驱动该网卡的功能随之丧失。
lsmod命令给出内核已经加载的模块,即:
# lsmod |
插入完成后,可以执行lsmod了解当前内核正在使用的模块状况。执行lsmod命令后,一般输出现象如下:
Module size used by tulip 25252 1 (autoclean) es1370 21244 0 sounecore 2148 4 (es1370) ncr53c8xx 51124 0 sd_mod 16316 0 scsi_mod 50448 2 (ncr |
tulip是驱动模块的名称,它用了约25K的内存,而用当前有一个其他的内核模块依赖于它,但是当该模块不使用时,会自动释放常驻在主内存的模块(autoclean)。
有些模块在使用时需要其他模块先安装到内核,这种特性称为模块依赖性。depmod命令就是用来创建/lib/modules目录下的所有依赖关系的,依赖信息存在modules.dep文件中,这是一个文本文件,指出一个模块和它所需要的其他模块。modules.dep文件的部分内容如下:
/lib/modules/2.2.5-15/fs/umsdos.o:/lib/modules/2.2.5-15/fs/fat.o
用户可以使用modeprobe程序来检查某个设备驱动程序的依赖性。系统在安装模块之前都要先做这种依赖性检查。管理员要学会使用depmod命令,但在实际使用中,很少需要在命令行状态下使用该命令,许多Linux发行版已经把“depmod-a”加到启动脚本中,当系统启动时就会自动地做依赖性检查。
modeprobe命令的功能与insmod基本上相同,只是它会检查依赖性,并把所有需要的模块都加载进来。参数-l和-t结合使用时将列出所有模块。例如,要查看mount命令的文件管理的情况,可使用以下命令:
# modprobe –l –t FS |
模块的依赖性也影响到其卸载。当从内核中卸载一个模块的时候,首先用lsmod看看该模块是否确实已经加载上来,然后再做操作。除此之外,在遇到有依赖关系的模块时,从内核中卸载模块的过程与载入的过程恰好相反,它遵循“firstin last out“的准则,即在一系列有依赖关系的模块中,必须先卸载最后加载进来的模块,最后卸载最先加载进来的模块。例如用rmmod移除正在使用中的模块slhc会出现错误提示:Deviceor resource busy 。所以,在将PPP模块从内存中卸载后,才可能将slhc模块从内存中卸载。
这叫做按需加载(demandloading)。当内核发现需要一个模块的时候,例如当用户安装一个不在内核的文件系统的时候,内核会请求内核守护进程(kerneld)试图加载合适的模块。kerneld功能强大,能够主动的把我们需要的模块 自动插入内核,将使用完毕的module 从kernel中清退。kerneld由两个独立的部分构成:一部分工作于Linux的内核,负责向daemon发送请求;另一部分工作于系统的用户数据区,负责调入由内核请求指定的模块。若少了这个kerneld,就只能通过手工的方式,用insmode或modeprobe命令进行加载。
自动加载要求我们配置模块设定文件/etc/modules.conf,每次启动就会自动启动kerneld装入需要的内核模块了。
modules.conf的示例如下:
Alias 模块设备名称 模块名称 Alias scai_hostadpter ncr Alias eth0 tulip Alias parport_lowlevel parport_pc Alias sound es1370 |
例如:alias eth0 tulip的意思表示设网络设备eth0别名(alias)为tulip这个模块,真实的意义就是告诉内核,在启动时,必须装入tulip模块来驱动网卡。因此定义modules.conf模块设定文件时,必须从/lib/modules/目录,或是执行modeprobe –l查知模块名称(如:tulip),至于模块设备名称(如:eth0),则可以执行modeprobe –c取得。
# modeprobe –c |
modeprobe –c列出所有模块的alias名称,这对于编写modules.conf文件用处很大,再搭配grep就可以轻易地找出所需要模块的alias名称写法。
另外,modules.conf文件还可用于给一个模块取一个设备别名。例如,以下命令可把eth0网卡与模块rtl8139结合起来:
alias eth0 rtl8139 |
设备的参数可通过在配置文件中加入post-install或pre-install行来指定,另外也可用以下的方法来实现:
options ethp full_duplex |
如果使用Linux内核版本2.6,那么与之相应地模块操作相关命令也需要更新,目前的最新版本是3.0。我们在http: //www.kernel.org/pub/linux/kernel/people/rusty/modules目录中可以找到,文件名称是module-init-tools-3.0,根据自己的习惯下载相应的压缩文件。
这种安装方式是源代码编译。解压之后,进入module-init-tools-3.0目录,首先运行./configure命令,对其进行配置。然后输入“makelinks”,在/usr/local/sbin目录下为原来的insmod、rmmod、modprobe等命令建立连接。
# ./configure # make links |
完成之后,下一步就可以安装了,使用make和makeinstall
# make # make install |
新版本的内核工具被安装在/usr/local/bin目录下,名称与原来的相同。注意在2.6的内核中模块的配置文件/etc/modules.conf文件被/etc/modprobe.conf文件取代了,后者是原来配置文件加上模块依赖性关系参照文件的功能集合,更复杂,语法也所不同。我们可以利用源码包里的generate-modprobe.conf命令来把原来的modules.conf文件转换为新格式。
# ./generate-modprobe.conf /etc/modules.conf |
这个脚本程序会读取原配置文件modules.conf的内容,经过格式转化后,生成新的配置文件/etc/modprobe.conf。
Linux中设备也是由文件来表示的,每种设备都被抽象为设备文件的形式,这样就给应用程序一个一致的文件界面,方便应用程序和操作系统之间的通信。设备文件集中放置在/dev目录下,一般有几千个,都是Linux系统在安装的时候自动创建的。需要说明的是,一台Linux计算机即使妆前在物理上没有安装某一种设备,或者数量只有一个,Linux也会创建该类设备文件,而且数量足够,以备用户使用。如我们的计算机中最常见的是安装1~3块IDE硬盘,而Linux也会创建出hda、hdb、hdc...,直至hdz共26个IDE硬盘设备文件,供我们使用。其他类设备也是如此。我们就是通过对这些设备文件进行操作,来对设备进行配置和管理。
通常情况下,安装系统时已经创建了常用的设备文件,但在用户重新定制内核,并添加了新硬件驱动程序之后,新驱动程序对应的设备文件就可能不存在。如果/etc目录下没有我们需要的设备文件,可以利用/dev/MAKEDEV命令来手工创建,MAKEDEV记录了很多设备的名字与其设备号之间的关系,因此它能使用正确的设备号来创建设备。首先进入/dev目录,然后再执行MAKEDEV。例如:
# ./MAKEDEV /dev/sda1
MAKEDEV将使用设备名作参数创建设备文件,同时也创建这个设备文件依赖的其他相关设备文件。
在详细讲述硬件安装之前,还需要介绍一下Linux平台上驱动程序的知识。不可否认,Linux相对Windows系统来说的一个缺点是驱动程序不好找,有的时候买到一款新网卡,真是没有把握是否它的Linux驱动已经被开发出来了,还要惴惴不安地马上跑回去试,直到正常驱动之后才松一口气。
不过这种状况正在改观。Linux内核本身已经开始支持越来越多的硬件,有不少硬件厂商也会在驱动程序光盘中附带Linux驱动程序,而且全世界的Linux开发者们也在为大家无偿地编写着驱动程序。现在主流的硬件不被Linux支持的情况很少见。我们得到Linux驱动程序的途径一般有3种:
首选该硬件的附带驱动光盘。有时在Windows驱动程序之外,光盘中还包括Linux驱动程序;
如果没有,下一步可以试着到硬件厂商的网站查找;
厂商网站上没有,最后我们可以到下面这些网站上去试着找找看:
http://www.linhardware.com/
http://cesdis.gsfc.nasa.gov/linux/drivers/
http://www.drivershq.com
http://www.mrdriver.com
http://www.totallydrivers.com
这些是著名的Linux驱动程序网站,我们可以在上面查找或者向别人求助。
Linux的设备驱动程序通常是以.c(驱动程序源程序)或.o(编译后的驱动程序模块)形式提供的,而不象Windows下的什么.inf、.vxd或者像Setup.exe这样的安装向导。如果得到.c源程序,可以在Linux上编译,生成.o文件后使用。也有些驱动程序以.rpm方式打包,就会简单一些。我们下面要介绍的各类设备的安装,就是在找到了相关产品的驱动程序之后通常的安装过程。
Linux驱动程序一般存放在“/lib/modules/内核版本号”这个目录。内核版本号可以用uname–r命令查看
# uname –r
2.4.20-8
说明当前系统的内核版本是2.4.20-8,那么驱动程序存放目录就是/lib/modules/2.4.20-8。但是不同的Linux发行版,存放目录也许会有差异,这是我们需要去逐个了解的。存好之后,insmod或者modprobe命令就可以调用这些程序了。
如果驱动程序已经准备好了,还需要下面这两个条件:
一个详细的设备信息文件。描述设备标识、与设备标识对应的设备驱动程序、设备配置参数(设备选项)、设备设置的详细描述、设备配置方法描述、设备对应的别名、设备的主设备号等信息。
根据设备的类型,以及安装的Linux系统版本(不同的Linux发行版对于同一设备的配置脚本文件存在差异),设置设备对应的配置脚本文件。
网卡是Linux的基本设备之一,做为网络操作系统的linux,网卡如果不能用,就象是汽车没有轮子。网卡的安装也是困扰Linux学习者的一个大问题,其实了解之后,我们会发现这并不是很难。
首先需要确认一下这块网卡的芯片是哪一种,常用识别方法是看一下网卡上最大的那块芯片上面的说明,再查看一下是不是与Linux所支持的网卡芯片兼容(当前Linux系统支持的网卡芯片可以通过驱动程序存放目录下的net子目录来查看,如:
# ls /lib/modules/2.4.20-8/net
3c501.o arlan.o eepro100.o lne390.o ppp_synctty.o tc35815.o
3c503.o arlan-proc.o eepro.o lp486e.o r8169.o tg3.o
3c505.o at1700.o eexpress.o mii.o rcpci.o tlan.o
3c507.o atp.o epic100.o natsemi.o sb1000.o tokenring
3c509.o bonding.o
。。。
就说明当前系统支持这些网卡,新的网卡驱动.o程序也是存放在这个目录下。
现在的以太网卡主要有PCI网卡和PCMCIA网卡。为使这些网卡正常工作,要在/etc/modules.conf中设置设备别名eth0,以及要传递给驱动程序的设备参数。这样内核在需要使用驱动程序时,会由内核服务kerneld使用系统命令modprobe(insmod)自动装载需要的设备模块。 在配置网卡时,如果此网卡能够自动检测,那么我们只需要通过设备标识,在设备描述信息文件中查得它对应的设备驱动程序,然后再由此信息配置网卡。
我们以Intel82559网卡为例介绍一下驱动程序安装过程,其驱动程序名称为e100.o:
把82559插入PCI槽中,启动计算机之后,使用dmesg命令查看,可以看到类似这样的启动记录:“e100:eth0: Intel(R) PRO/100+ PCI Adapter”,这说明网卡已经被操作系统识别了。将准备好的e100.o文件放置到/lib/modules/2.4.20-8/net目录中,使用insmod命令尝试将其驱动程序插入内核中:
# insmod e100.o
或者使用modprobe命令,试图同时装入依赖模块也可以。下一步配置/etc/modules.conf文件,加入这样一行。
alias eth0 e100
这说明e100模块驱动的网卡在系统中使用的名称是eth0。再用ifconfig命令激活网卡:
# ifconfig eth0 up
然后查看一下网卡状态
# ifconfig
eth0 Linkencap:Ethernet HWaddr
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3738 (3.6 Kb) TXbytes:4839 (4.7 Kb)
Interrupt:10 Base address:0x10a0
如果已经看到网卡eth0的信息,说明其已经激活,下一步配置IP地址及相关设置即可。具体设置方法参考第十七章《基本网络服务》中的内容。
14.4.1 Linux的串口
在Linux中,同一个串口需要与两种设备文件相关联,一个对应输出设备,一个对应输入设备。输出设备文件是ttySx,其中x 是从 0开始的编号。串口1对应/dev/ttyS0文件,串口2对应/dev/ttySl文件。 Linux的串行端口还有与输入操作相关联的设备文件 cuax,其中x从0开始编号,所以总结起来,串口1对应linux的/dev/ttyS0和/dev/cua0,而串口2对应/dev/ttyS1和/dev/cua1,其余依次类推。
在在Linux中创建串口可以使用MAKEDEV命令。
# /dev/MAKEDEV ttyS1
这个命令可以同时创建输入相关的设备/dev/ttyS1以及输出相关的设备/dev/cua1,并设定正确的权限。
我们一般使用setserial命令来对串口进行设置。setserial 是一个用来设置和取得与一个串口有关的信息与设置的程序。这些信息包括某个串口正在使用的I/O地址与中断号,以及break键是否被当做引起安全注意的键等等。 例如:
# setserial –a /dev/ttyS0
/dev/ttyS1, Line 1, UART:16550A, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
可以取得串口1的UART值、中断值等信息。
在通常Linux引导的过程中,只有端口COM1至COM4被初始化,并使用默认的 I/O地址和中断号。如果需要把 COM1至COM4中的设置改为一个非标准值,就要使用 setserial 程序。
# setserial /dev/ttyS0UART 16650
# setserial /dev/ttyS0IRQ 11
通常情况下我们可以使用自动设置选项来对其进行配置:
# setserial /dev/ttyS0autoconfig
大部分的Modem都是通过串口连接到计算机上的,所以在配置Modem之前,我们必须插入串口驱动模块serial.o。在插入串口通讯模块成功之后,再将设备/dev/modem连接到相应的串口设备上就可以了。例如在串口1上连接了Modem,则建立连接:
# ln -sf /dev/ttyS0 /dev/modem
连接之后,外置的串口modem就可以正常工作了。我们可以通过使用minicom向串口发送AT命令,来检测和配置modem的工作方式。经常使用的命令:
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
我们也可以使用setserial修改串口配置,比如设置串口的波特率。
在Linux中并行端口对应设备文件为lpx,其中X为端口号,并口1对应的是 dev/lp0,而并口2则对应/dev/lp1。关于打印机的设置与使用在第16章《打印管理》中有详细的叙述,请大家参看这一章。
基本上所有的IDE硬盘都会被Linux系统识别并且驱动,如果没有驱动程序,我们还可以按照前面所述的方法去试着寻找。在IDE硬盘被驱动之后,在软件中的设置一般首先是用/dev/MAKEDEV创建硬盘设备(如果当前系统中不存在的话)。例如添加一个IDE硬盘设备:
cd /dev
# ./MAKEDEV hdc
然后创建分区设备:
# ./MAKEDEV hdc1
# ./MAKEDEV hdc2
注意分区设备在Linux中一般是以1开始的。其余的操作还包括利用fdisk或者parted对/dev/hdc进行分区及格式化等操作,这些详细操作在第十一章《文件系统》中已经描述得很清楚,就不再赘述了。
USB移动硬盘以其易用性和方便性受到广大计算机使用者的欢迎,当前版本的Linux一般都支持USB设备的即插即用,插到系统中之后就可以自动识别。我们在使用USB硬盘的时候,可以在插上之后直接用第小节的介绍的方法去挂接USB盘,如果不成功,再回头来看一看USB检测小节的内容是否可以解决问题。
USB设备检测也是通过/proc目录下的USB文件系统进行的。为了使一个USB设备能够正常工作,必须要现在系统中插入USB桥接器模块。在检测开始时,一般要先检测是否存在/proc/bus/usb目录,若不存在则尝试插入USB桥接模块。
现在一般的USB桥接器模块有三种类型,UHCI、OHCI和EHCI。在决定插入那一个桥接器模块时,可以察看/proc/pci文件来决定。打开此文件如果发现USB节为 I/O at0xHHHH格式(例如“I/O at0xe000 [0xe01f]”),HHHH为16进制数,则桥接器类型为UHCI。如果是32 bitmemory at 0xHH000000形式(例如“32 bit memory at 0xee000000”),HH为16进制数,则桥接器类型为OHCI。EHCI是USB2.0版本的类型,如果使的是USB2.0版本,则需要选用这个选项。如果我们的桥接器类型不满足上述任何一种情况,唯一的解决办法就是分别尝试插入这两种模块,直到成功为止。一般而言,UHCI类型桥接器的插入模块是uhci或usb-uhci(由内核版本决定);而对于OHCI类型的桥接器插入模块是ohci或usb-ohci。
我们在正确的插入了桥接器模块之后,/proc文件系统下就会出现USB设备目录,不过此时这个目录是空的,没有任何文件。下一步是挂接usbdevfs文件系统,然后通过此文件系统检测连接的设备。挂接usbdevfs文件我们可以通过如下操作实现:
# mount -t usbdevfs none/proc/bus/usb
如果成功挂接,就会生成文件/proc/bus/usb/devices,/proc/bus/usb/drivers和目录/proc/bus/usb/busNo。下面查看一下USB模块:
# lsmod
Module Size Used by Not tainted
nls_iso8859-1 3516 1 (autoclean)
nls_cp437 5116 1 (autoclean)
vfat 13004 1 (autoclean)
fat 38808 0 (autoclean)[vfat]
usb-storage 69332 1
sd_mod 13516 2 (autoclean)
scsi_mod 107160 2 (autoclean)[usb-storage sd_mod]
autofs 13268 0 (autoclean)(unused)
e100 60644 1
keybdev 2944 0 (unused)
mousedev 5492 0 (unused)
hid 22148 0 (unused)
input 5856 0 [keybdevmousedev hid]
usb-uhci 26348 0 (unused)
usbcore 78784 1 [usb-storagehid usb-uhci]
ext3 70784 2
jbd 51892 2 [ext3]
如果列表中不存在上面所显示的usb-storage、usb-uhci、usbcore等模块,说明还没有加载。那么我们用modprobe加载:
# modprobe usb-storage
# modprobe scsi_mod
# modprobe sd_mod
下一步就可以尝试插入USB硬盘并使用了。
将USB硬盘插到计算机上之后,会被自动识别,USB设备文件与SCSI一样,是sd开头。我们输入fdisk –l可以查看到已经连接成功的USB硬盘的情况:
# fdisk -l |more
Disk /dev/sda:10.0 GB, 10056131072 bytes
255 heads, 63sectors/track, 1222 cylinders
Units =cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 1222 9815683+ c Win95 FAT32 (LBA)
这说明USB硬盘大小是10G,上面有一个分区是/dev/sda1,文件系统类型是FAT32。使用USB硬盘与其他类型的硬盘一样,也需要挂接然后访问。
# mkdir /mnt/usb
# mount –t vfat /dev/sda1 /mnt/usb
然后从/mnt/usb挂接点就可以访问USB盘了,注意由于此USB盘使用的是FAT32格式,所以内核也必须支持FAT32才行。
现在的Linux发行版本对很多常见的显卡类型都支持,一般安装操作系统的时候系统会识别并且安装驱动程序。但由于显卡产商的驱动支持毕竟不如Windows广泛,所以不排除安装时识别不出显卡的情况。
出现这个问题,我们首先推荐的是用使得在前面介绍的Linux驱动程序通用方法解决。如果还是不行,那么可以按照本节介绍的方法,用frame buffer来支持。
因为Linux下驱动显卡一直都是难题,为了解决这个问题,Linux 2.2.x以上版本提供了一种新的解决方案-使用frame buffer设备,通过VESA VBE 2.0标准,利用显卡SVGA特性,配合XFree86的XF86_FBDev驱动我们的显卡。
首先看一下是否/dev目录中有framebuffer设备,
# ls –l /dev/fb0
如果没有fb0,则使用MAKEDEV创建,
# /dev/MAKEDEV fb0
有了/dev/fb0文件之后,下一步需要安装Frame buffer X Server,我们可以从www.xfree86.org下载最新的版本,文件名称一般是XFree86-FBDev-2.4.20-8.i386.rpm形式,下载之后安装,
# rpm –ivh XFree86-FBDev-2.4.20-8.i386.rpm
安装程序会创建/usr/X11R6/bin/Xvfb文件。
设置frame buffer console分辨率
编辑/etc/lilo.conf文件,指定Linux系统以VGA模式启动,加入VGA=791显示模式,
# vi /etc/lilo.conf
image=/boot/vmlinuz-2.4.20
label=Linux
root=/dev/hda1
VGA=791
read-only
791代表屏幕分辨率为1024*768*16位色。然后运行lilo命令使新的配置生效。将更新结果写入主引导记录或者要分区的引导记录。然后重启计算机。
编辑XF86Config文件,加入关于frame buffer的内容,
# vi /etc/
Section"Screen"
Driver"FBDev"
Device "Card"
Monitor "Monitor"
Subsection "Display"
Depth 16 #(色深,须与前面所选显示模式的色深一致)
Modes "default"
ViewPort 0 0
EndSubsection
EndSection
其中Driver代表X Server指定为FBDev,也就是frame buffer X Server,Device是显示卡名称,是执行XF86config自己设置的。Monitor是显示器的名称。Display项目指定Color depth使用16位色。显示模式则采用default,也就是lilo.conf中设置的值。
编辑保存之后将frame buffer X Server连接到X启动文件/etc/X11R6/bin/X上。
# rm /etc/X11/X
# ln –s /usr/X11R6/bin/XF86_FBDev /etc/X11/X
然后启动X,
# startX
如果上述步骤配置无误的话,可以看到启动窗口,代表frame buffer已经安装成功。
随着用户对系统可靠性要求的不断提高,一台UPS必不可少。它不仅能提供断电时紧急电池后备,还能过滤电力干扰,延长硬件设备的使用寿命,并保护打印机、扫描仪、Modem等配套使用的对电源敏感设备。如果所在区域电压不隐,UPS还能起到稳压的作用。我们在重要的Linux服务器上安装了UPS之后,也需要对其进行管理。
在Linux中配置和管理UPS的程序是powerd,这个守护进程在后台活动,时刻监视着本机电源供应的情况,一旦正常的电源失效而UPS启动,powerd就会自动地在规定的时间内关闭系统,同时通过所有连接到本机的终端用户这个情况,以便于工作的保存。而如果在关闭系统的操作没有真正执行前,主电源又恢复正常,powerd还可以马上停止关闭系统的工作,服务器还会照常运行。
powerd程序在操作系统安装过程中可以选择将其装入。如果是新加了UPS设备而当前系统没有这个程序,可以再从源CD中安装,也可以从下面的链接下载:
http://prdownloads.sourceforge.net/power/powerd-2.0.2-1.i386.rpm?download
然后在本地安装,
# rpm –ivh powerd-2.0.2-1.i386.rpm
安装过程中会在/usr/sbin目录下创建powerd程序。然后我们需要在硬件上与UPS进行连接,除了按照UPS说明书上的内容进行电源相关的连接与安装之外,powerd需要一条有控制连线,从本机的串口连到UPS设备上。这条控制线通常会附带在UPS设备包装中,做为附件。连接好之后就可以继续进行软件的配置。
powerd程序通过/etc/powerd.conf配置文件来管理,需要手工生成并编辑它,
# vi/etc/powerd.conf
delay 20
debug yes
logfile/var/log/powerd.log
serialline /dev/ttyS0
monitor CTS
failwhen low
pollingstep20
下面简单说明一下配置文件的各个项目:
delay 20
当 shutdown系统的条件成立时,会延迟20*2秒的时间, 再测试是否条件仍然存在。若是则开始 shutdown系统, 否则就取消 shtudown动作。
debug yes
是否log中会有详细说明
logfile/var/log/powerd.log
log文件的存放位置
serialline /dev/ttyS0
通过哪一个串口连接UPS设备
monitor CTS
表示对计算机主电源进行监视
failwhen low
如果当监控的主电源发生功率不足的情況时,就触发 shutdown的条件
pollingstep 20
每20秒就测试一次主电源
保存退出/etc/powerd.conf之后,就可以启动powerd程序了。powerd运行之后,我们必须要在正式启用之前测试一下:在没有其他正常用户访问的时候,先保存好数据,再把服务器的主电源切断,看一看是否powerd激活了shutdown程序,并且在规定的时间内执行关闭系统的操作。如果正常,再进行一次测试,看看是否在关闭操作之间把主电源恢复,powerd是否会停止关闭系统的操作。
联系客服