打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
第十四章 Linux模块与设备管理



目标

在《Linux基本原理》一章中,我们了解到Linux支持可动态装载和卸载的模块。利用模块,可方便地在内核中添加新组件,卸载不再需要的组件。本章中我们就来实际学习模块管理方法。同时,我们会实际地进行Linux系统中各种设备的管理,了解这些硬件是如何安装,配置的。

 

重点内容

       模块的基本概念与应用

       Linux系统中各种设备的安装与配置


14.1  模块

14.1.1      模块的概念

Linux的模块也是程序,它可以被动态地加载到正在运行的内核里,成为内核的一部分。载入到内核中的模块具有与内核一样的功能,可以访问内核的任意部分。这些模块是可以按需要随时装入和卸下的,将模块从内核中独立出来,而不必预先绑定在内核中,这么做使得内核的尺寸维持在很小,同时有三个优点: 第一,将来修改内核时,不必全部重新编译,可节省工作量;第二,如果需要安装新的模块,不必重新编译内核,只要插入对应的模块即可;第三,减少内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能都交由模块实现。

Linux模块的范围已经包含了SCSI卡、以太网卡、声卡等驱动程序;旧式磁带机、光驱驱动等程序;各类网络通信专访模块;打印机驱动程序,还有很多文件系统模块。可以在启动完成后,方便地加入对驱动网卡、声卡的支持,或是加入某个网络功能,或支持某个文件系统格式,随时机动地赋予系统内核各种功能。

用一个实例来说明:我们在Linux计算机上可能并不经常使用MS-DOS的文件系统,那么就不需要将其配置到系统内核内,如果临时需要对一张MS-DOS软盘中的文件进行读取,可以将MS-DOS文件系统模块装入,使内核认识该文件系统格式。在MS-DOS处理完成后,将该模块删除,这样做大约可以节省50K左右的内存。14.1.2        模块的加入与卸载

我们上面已经谈到,可以向运行中的内核手工加入模块,以获得新的功能支持。要完成内核模块的加入或卸载动作,可由ismodrmmod这两个程序完成,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          (ncr53c8xx sd_mod)

tulip是驱动模块的名称,它用了约25K的内存,而用当前有一个其他的内核模块依赖于它,但是当该模块不使用时,会自动释放常驻在主内存的模块(autoclean)。

14.1.3       模块的依赖性

有些模块在使用时需要其他模块先安装到内核,这种特性称为模块依赖性。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模块从内存中卸载。

14.1.4      模块的自动加载

这叫做按需加载(demandloading)。当内核发现需要一个模块的时候,例如当用户安装一个不在内核的文件系统的时候,内核会请求内核守护进程(kerneld)试图加载合适的模块。kerneld功能强大,能够主动的把我们需要的模块 自动插入内核,将使用完毕的module kernel中清退。kerneld由两个独立的部分构成:一部分工作于Linux的内核,负责向daemon发送请求;另一部分工作于系统的用户数据区,负责调入由内核请求指定的模块。若少了这个kerneld,就只能通过手工的方式,insmodemodeprobe命令进行加载。

自动加载要求我们配置模块设定文件/etc/modules.conf,每次启动就会自动启动kerneld装入需要的内核模块了。

modules.conf的示例如下:

Alias                     模块设备名称        模块名称

Alias                    scai_hostadpter          ncr53c8xx

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-installpre-install行来指定,另外也可用以下的方法来实现:

  options ethp full_duplex

14.1.5      2.6内核版本的模块命令

如果使用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目录下为原来的insmodrmmodmodprobe等命令建立连接。

# ./configure

# make links

完成之后,下一步就可以安装了,使用makemakeinstall

# 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

14.2  Linux的设备与驱动程序

14.2.1      Linux设备与设备文件

Linux中设备也是由文件来表示的,每种设备都被抽象为设备文件的形式,这样就给应用程序一个一致的文件界面,方便应用程序和操作系统之间的通信。设备文件集中放置在/dev目录下,一般有几千个,都是Linux系统在安装的时候自动创建的。需要说明的是,一台Linux计算机即使妆前在物理上没有安装某一种设备,或者数量只有一个,Linux也会创建该类设备文件,而且数量足够,以备用户使用。如我们的计算机中最常见的是安装1~3IDE硬盘,而Linux也会创建出hdahdbhdc...,直至hdz26IDE硬盘设备文件,供我们使用。其他类设备也是如此。我们就是通过对这些设备文件进行操作,来对设备进行配置和管理。

通常情况下,安装系统时已经创建了常用的设备文件,但在用户重新定制内核,并添加了新硬件驱动程序之后,新驱动程序对应的设备文件就可能不存在。如果/etc目录下没有我们需要的设备文件,可以利用/dev/MAKEDEV命令来手工创建,MAKEDEV记录了很多设备的名字与其设备号之间的关系,因此它能使用正确的设备号来创建设备。首先进入/dev目录,然后再执行MAKEDEV。例如:

# ./MAKEDEV  /dev/sda1

MAKEDEV将使用设备名作参数创建设备文件,同时也创建这个设备文件依赖的其他相关设备文件。

14.2.2      驱动程序

在详细讲述硬件安装之前,还需要介绍一下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发行版对于同一设备的配置脚本文件存在差异),设置设备对应的配置脚本文件。

14.3  网卡的配置

网卡是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使用系统命令modprobeinsmod)自动装载需要的设备模块。 在配置网卡时,如果此网卡能够自动检测,那么我们只需要通过设备标识,在设备描述信息文件中查得它对应的设备驱动程序,然后再由此信息配置网卡。

我们以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 00:50:56:40:41:AB 

         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  Linux的串口与Modem设置

14.4.1      Linux的串口

Linux中,同一个串口需要与两种设备文件相关联,一个对应输出设备,一个对应输入设备。输出设备文件是ttySx,其中x 是从 0开始的编号。串口1对应/devttyS0文件,串口2对应/devttySl文件。 Linux的串行端口还有与输入操作相关联的设备文件 cuax,其中x0开始编号,所以总结起来,串口1对应linux的/devttyS0和/devcua0,而串口2对应/devttyS1和/devcua1,其余依次类推。

在在Linux中创建串口可以使用MAKEDEV命令。

# /dev/MAKEDEV  ttyS1

这个命令可以同时创建输入相关的设备/dev/ttyS1以及输出相关的设备/dev/cua1,并设定正确的权限。

14.4.1      设置串口

我们一般使用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

可以取得串口1UART值、中断值等信息。

在通常Linux引导的过程中,只有端口COM1COM4被初始化,并使用默认的 I/O地址和中断号。如果需要把 COM1COM4中的设置改为一个非标准值,就要使用 setserial 程序。

# setserial /dev/ttyS0UART 16650

# setserial /dev/ttyS0IRQ 11

通常情况下我们可以使用自动设置选项来对其进行配置:

# setserial /dev/ttyS0autoconfig

14.4.2      Modem配置

大部分的Modem都是通过串口连接到计算机上的,所以在配置Modem之前,我们必须插入串口驱动模块serial.o。在插入串口通讯模块成功之后,再将设备/dev/modem连接到相应的串口设备上就可以了。例如在串口1上连接了Modem,则建立连接:

# ln  -sf /dev/ttyS0  /dev/modem

连接之后,外置的串口modem就可以正常工作了。我们可以通过使用minicom向串口发送AT命令,来检测和配置modem的工作方式。经常使用的命令:

AT 命令  命令描述 

ATDTATDP 使用语音(脉冲)进行拨号 

ATZ 复位调制解调器 

ATH 挂起电话 

ATI0 返回调制解调器的状态 

ATI1 执行ROM校验和检查并返回值 

ATI2 验证ROM校验,返回OKERROR 

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修改串口配置,比如设置串口的波特率。

14.5  Linux的并口与打印机

Linux中并行端口对应设备文件为lpx,其中X为端口号,并口1对应的是 devlp0,而并口2则对应/devlp1。关于打印机的设置与使用在第16章《打印管理》中有详细的叙述,请大家参看这一章。

14.6  IDESCSI设备

14.6.1      IDE硬盘

基本上所有的IDE硬盘都会被Linux系统识别并且驱动,如果没有驱动程序,我们还可以按照前面所述的方法去试着寻找。在IDE硬盘被驱动之后,在软件中的设置一般首先是用/dev/MAKEDEV创建硬盘设备(如果当前系统中不存在的话)。例如添加一个IDE硬盘设备:

cd /dev

# ./MAKEDEV  hdc

然后创建分区设备:

# ./MAKEDEV hdc1

# ./MAKEDEV hdc2

注意分区设备在Linux中一般是以1开始的。其余的操作还包括利用fdisk或者parted/dev/hdc进行分区及格式化等操作,这些详细操作在第十一章《文件系统》中已经描述得很清楚,就不再赘述了。

14.7  USB硬盘

USB移动硬盘以其易用性和方便性受到广大计算机使用者的欢迎,当前版本的Linux一般都支持USB设备的即插即用,插到系统中之后就可以自动识别。我们在使用USB硬盘的时候,可以在插上之后直接用第小节的介绍的方法去挂接USB盘,如果不成功,再回头来看一看USB检测小节的内容是否可以解决问题。

14.7.1      USB硬盘的检测

USB设备检测也是通过/proc目录下的USB文件系统进行的。为了使一个USB设备能够正常工作,必须要现在系统中插入USB桥接器模块。在检测开始时,一般要先检测是否存在/proc/bus/usb目录,若不存在则尝试插入USB桥接模块。

现在一般的USB桥接器模块有三种类型,UHCIOHCIEHCI。在决定插入那一个桥接器模块时,可以察看/proc/pci文件来决定。打开此文件如果发现USB节为 I/O at0xHHHH格式(例如“I/O at0xe000 [0xe01f]”),HHHH16进制数,则桥接器类型为UHCI。如果是32 bitmemory at 0xHH000000形式(例如“32 bit memory at 0xee000000”),HH16进制数,则桥接器类型为OHCIEHCIUSB2.0版本的类型,如果使的是USB2.0版本,则需要选用这个选项。如果我们的桥接器类型不满足上述任何一种情况,唯一的解决办法就是分别尝试插入这两种模块,直到成功为止。一般而言,UHCI类型桥接器的插入模块是uhciusb-uhci(由内核版本决定);而对于OHCI类型的桥接器插入模块是ohciusb-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-storageusb-uhciusbcore等模块,说明还没有加载。那么我们用modprobe加载:

# modprobe usb-storage

# modprobe scsi_mod

# modprobe sd_mod

下一步就可以尝试插入USB硬盘并使用了。

14.7.2      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才行。

14.8  显卡配置(frame buffer

现在的Linux发行版本对很多常见的显卡类型都支持,一般安装操作系统的时候系统会识别并且安装驱动程序。但由于显卡产商的驱动支持毕竟不如Windows广泛,所以不排除安装时识别不出显卡的情况。

出现这个问题,我们首先推荐的是用使得在前面介绍的Linux驱动程序通用方法解决。如果还是不行,那么可以按照本节介绍的方法,用frame buffer来支持。

因为Linux下驱动显卡一直都是难题,为了解决这个问题,Linux 2.2.x以上版本提供了一种新的解决方案-使用frame buffer设备,通过VESA VBE 2.0标准,利用显卡SVGA特性,配合XFree86XF86_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 ServerDevice是显示卡名称,是执行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已经安装成功。

14.9  UPS(不间断电源)管理

随着用户对系统可靠性要求的不断提高,一台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是否会停止关闭系统的操作。

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux下的硬件驱动——USB设备(上)(驱动配置部分)
怎样写linux下的USB设备驱动程序
Linux驱动开发方法论
linux驱动点滴总结1
深度:一文看懂Linux内核!Linux内核架构和工作原理详解
教你写第一个Linux设备驱动程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服