SlideShare una empresa de Scribd logo
1 de 58
尚观 Linux 研究室 - Linux 驱动程序全解析


                                    V2 版 2006




尚观 Linux 研究室 - Linux 驱动程序全解析之块设备的驱动及网络驱动的配置

IDE 硬盘及光驱的设置、 刻录机的使用,以及如何安装 SCSI 硬盘驱动。
             IDE                      然后我们将为大

家介绍,以太网卡驱动模块的加载及网络接口的启功过程,如何调整网卡的参数 ,

Modem、ADSL 及宽带的驱动安装,怎样 PPP 连接的设置等内容。

1、 尚观 Linux 研究室 - Linux 驱动程序全解析之 IDE 硬盘及光驱

1. IDE 设备的驱动过程

操作系统首先是安装在块设备上,没有对块设备的支持,我们的系统就无法启动,所以我

们首先介绍常见块设备的安装。硬盘就是最常见的块设备,在普通 PC 上的硬盘通常是 IDE

接口的,而服务器上的硬盘通常是 SCSI 接口的。一般内核中内置对通用 IDE 控制芯片的支

持。让我们来看一下 IDE 硬盘在内核中的驱动过程, dmesg 命令可以看到内核在启功和加

载内核模块时的信息:


# dmesg | less

我们可以看见,在 Linux 内核启动过程中,我们可以发现内核首先驱动初始化 CPU,内存,

系统时钟部分,接着加载 PCI 总线的驱动。然后就加载了通用的 IDE 驱动程序:

Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4

接着初始化 IDE 的控制器,我的 IDE 控制器集成在 Intel 的 ICH4 南桥芯片组中, IDE 控制

芯片驱动加载后,进行初始化传输模式:

ICH4: chipset revision 1

ICH4: not 100% native mode: will probe irqs later

  ide0: BM-DMA at 0xbfa0-0xbfa7, BIOS settings: hda:DMA, hdb:pio
ide1: BM-DMA at 0xbfa8-0xbfaf, BIOS settings: hdc:DMA, hdd:pio

该驱动程序会向核心中注册主设备号为 3 的 block 型设备。我们可以看到在 IDE 控制器初始

化时,占用的 IO 资源及分配给它的中断号:

ide0 at 0x1f0-0x1f7,0x3f6 on irq 14

ide1 at 0x170-0x177,0x376 on irq 15

接着使用 IDE 控制器查找连接在 IDE 接口上的设备,如果检查到硬盘则加载 ide 硬盘的驱

动 程 序 , 设 置 了 该 硬 盘 的 基 本 参 数 , 设 置 传 输 方 式 为 UDMA ( 100 ) , 也 就 是

ATA100(100M/S 的传输速度),并且根据这个驱动程序检测硬盘上的分区:

hda: attached ide-disk driver.

hda: host protected area => 1

hda: 78140160 sectors (40008 MB) w/7898KiB Cache, CHS=4864/255/63, UDMA(100)

ide-floppy driver 0.99.newide

Partition check:

hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 hda9 >

/dev/hda 代 表 第 一 个 IDE 接 口 的 主 设 备 , 可 以 看 到 他 的 设 备 号 为 block ( 3/0 ) ,

而 /dev/hda1 是这块硬盘的第一个分区,设备编号是 block ( 3/1 ) , /dev/hdb 代表第一个

IDE 接口的从设备,设备编号为 block(3/64)。所以我们可以看到,内核默认可以支持 1-

63 个分区,其中第一个逻辑分区的编号肯定为 /dev/hda5。但是我们在 /dev 目录下查找有

hda1-hda32,共 32 个分区文件,如果我们需要更多的分区,就需要使用 mknod 命令来

创建更多的设备文件(见第一节)。

/dev/hdc 是第二个 IDE 接口的主设备,/dev/hdd 是第二个 IDE 接口的从设备。

2. 安装、升级常见的 IDE 驱动程序

通用的 IDE 控制器可以通过内核这样加载起来,如果我们遇到一些较新的芯片组,当前的

内核无法完全发挥出新硬件的性能,我们就要向内核中打补丁了,如 2.4.20-8 的内核就无

法支持 VIA VT8237 芯片组中的 IDE ATA133 方式,需要向一些内核中打补丁,先到 VIA 的
网站上下载相关补丁,网址为 http://www.viaarena.com/?PageID=297#ATA ,注意要选择

适合当前自己内核的驱动,接下来是升级内核给内核打补丁的过程。

# rpm -ivh kernel-source-<Kernel Version>.i386.rpm

安装需要版本的源代码包

把刚才链接中的补丁下载,将这个 patch 文件解开


# tar xzvf VIA IDE ATA133 Patch 8237 ver0.8.gz

进入解包出来的目录,将需要的 patch 文件 cp 到 /usr/src 目录


# cp <Linux OS>-patch-<Kernel Version> /usr/src

  ( Kernel Version 代表内核的版本号,Linux OS 代表不同的 Linux 系统)

# cd /usr/src

# patch -p0 < XXX-patch-XXX

将 patch 打入内核中

重新编译内核:


# cd /usr/src/Linux-<Kernel Version>

编辑 Makefile 文件,把 "EXTRAVERSION=" 改成 "EXTRAVERSION=-test",这是给新的

内核命名。

# cp /boot/config-XXX .config

# make menuconfig ( config 或 xconfig 也可以 )

确 定 "ATA/IDE/MFM/RLL support/IDE,ATA and ATAPI Block devices" 中 的 "VIA82CXXX

chipset support"被选中,

开始编译内核


# make dep (2.6 内核已经不需要了)

# make clean

# make bzImage
# make modules

# make modules_install

2.6 内核中直接可以执行 make install 不用再执行以下斜体部分的步骤了

      # cp arch/i386/boot/bzImage (或 vmlinuz-test) /boot/vmlinuz-test

      # cp /boot/initrd-< Kernel Version >.img /boot/initrd-test.img


      编辑 /boot/grub/grub.conf 文件,在最后添加三行

          title Linux-test

          kernel /boot/vmlinuz-test ro root=/dev/hda1

              initrd /boot/initrd-test.img

重新启动系统,使用刚刚编译的内核,你会发现启动信息中多出一行“Linux-test”

留意启动时的信息,你会发现有一行信息:


"VP_IDE: VIA vt8237 (rev 00) IDE UDMA133 Controller on pci00:0f.1"

如果正常启动,各种服务都没有问题,以后就可以用这个新的内核了,我们可以用以下的

命令来调整硬盘的传输方式:

# hdparm –i 检查硬盘目前的传输模式

  /dev/hda:

  Model=IC25N040ATCS05-0, FwRev=CS4OA63A, SerialNo=CLP429F4HALVPA

  Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }

  RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4

  BuffType=DualPortCache, BuffSize=7898kB, MaxMultSect=16, MultSect=16

  CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78140160

  IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}

  PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2

  UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 这里显示所支持的硬盘

  传输模式

  AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled

  Drive conforms to: ATA/ATAPI-5 T13 1321D revision 3:

    signifies the current active mo

查看一下当前硬盘的工作模式,如果不是 ATA133,可以灵活使用控制硬盘传输模式的命

令:

# hdparm -d1 /dev/hda ( enable DMA 模式 )

# hdparm -d0 /dev/hda ( disable DMA 模式 )

# hdparm -X70 /dev/hda ( 将传输模式切换到 UDMA 6 -ATA133 模式 )

  -X 后数字 16~18 代表 SDMA 0~2,

              32~34 代表 MDMA 0~2,

              64~70 代表 UDMA 0~6.

将最后一行加入到 /etc/rc.d/rc.sysinit 或 /etc/rc.d/rc.local 文件中,可以让硬盘每次启动都

工作在 ATA133 下。

3.安装 nforce 芯片组的驱动程序

针对 AMD64 平台的 nforce 系列芯片组性能强劲,我们虽然可以用常规的方法加以驱动,

但有可能无法发挥新设备的特性,或着该芯片组的网卡、声卡无法使用,NVIDIA 提供了更

方便的 rpm 文件供我们使用,其中一些是源代码 tar 文件,需要进行编译,而有些是 rpm

包 , 直 接 进 行 安 装 就 可 以 了 , 如 下 为 nforce 芯 片 组 在 Linux 下 驱 动 的 下 载 地 址 :

http://www.nvidia.com/object/Linux_nforce_1.0-0275.html,其中包含了对内核的补丁,芯

片组中对网卡及声卡的驱动程序,大家可以通过下载经过编译的 rpm 包直接安装:

# rpm –ivh NVIDIA_nforce.athlon.rpm

如果你不是 SuSE 或 RedHat 系统,也可以下载带有源代码的 .src.rpm 包经过编译后再安
装:


# rpm -ivh NVIDIA_nforce.src.rpm

         这部是将驱动程序的源程序文件安装到系统中


# cd /usr/src/redhat/SPECS

# rpmbuild -bb NVIDIA_nforce.specs

         编译源驱动程序,编译成可直接使用的 rpm 文件


# cd /usr/src/redhat/RPM/i386/

根据具体包的不同,也可能是 i686,noarch 等

这里有一个新的 rpm 包,这个是编译好的二进制文件


# rpm -ivh NVIDIA_nforce.i386.rpm

程序将自动安装包内的驱动程序,并利用rpm包中的脚本自动做配置。

二、尚观Linux研究室 - Linux驱动程序全解析之光驱的驱动及刻录机的使用


1.光驱的驱动过程:在我们编译内核时,在ATA/IDE/MFM/RLL 菜单中,都会有

IDE/ATAPI CDROM support的选项,通常我们所见到的内核,都将这个部分编译在了内核

中,所以我们不需设置,光驱就可以使用了,让我们看一下是系统启动时,光驱是如何驱

动的:

# dmesg |grep CD

hdc: HL-DT-STCD-RW/DVD-ROM GCC-4240N, ATAPI CD/DVD-ROM drive

Uniform CD-ROM driver Revision: 3.12

一般的通用 CD/DVD-ROM 驱动程序就可以将我们的光驱驱动起来,不需要特别的配置,

如果我们遇到的是 SCSI 的光驱,一般的内核也可以驱动,因为在编译内核时,一般会将

SCSI 的内容编译出来,如果没有 SCSI 的光驱驱动,我们可以自己手动编译,make

menuconfig(或 xconfig)时在 SCSI support 菜单中,只要将 SCSI support 设置为 Y 或者

M( Y 代表该部分编译在内核中,M 表示该部分编译为内核模块),SCSI CD-ROM
support 设置为 Y 或者 M,SCSI generic support 设置为 Y 或者 M,这样就可以了驱动

SCSI 接口的光驱了。




3. CD/DVD 刻录机的驱动及使用




2.6内核与以下2.4内核不相同,已经可以直接跳过 ide-scsi模块的使用




但是随着 CD 或 DVD 刻录机的普及,我们该如何在 Linux 下使用内置的 CD 或 DVD 刻录机

呢 ?默 认的 情况 下, 我们 的系 统会 将我 们的 刻录 机视 作只 读的 驱动 器, 加载 普通 的

CD/DVD-ROM 驱动,这时我们的光驱无法写入。我们需要用 ide-scsi 伪设备驱动程序来驱

动刻录机,将普通的 IDE 接口的设备模拟成一个 SCSI 接口的设备,这时才能向其中刻录。

我们可以使用三种方式来实现将 IDE 光驱模拟为 SCSI 光驱,假设我们使用 grub 作为

bootloader ,我们的刻录机安装在第二个 IDE 接口,是主设备,则它默认应该为 /dev/hdc

:

第一种方法是更改/boot/grub/grub.conf 文件,在


    kernel /boot/vmlinuz-2.XXX ro root=/dev/hda1 之后添加 hdc=ide-scsi

即:kernel /boot/vmlinuz-2.XXX ro root=/dev/hda1 hdc=ide-scsi

第二种方法是更改 /etc/modules.conf 文件,添加两行


     ide-cd                                                      ignore="hdc"
     ide-scsi
第三种方法是直接编译内核,不编译 ATA/IDE/MFM/RLL 菜单中的 IDE/ATAPI CDROM

     suppor 部分,但是要编译对 SCSI 光驱的支持

这三种方法都是不希望系统用自带的普通的 CD/DVD-ROM 驱动程序去驱动刻录机,希望

将刻录机模拟成一个 SCSI 设备,其中第一种最简单,成功后我们可以通过以下命令来刻

录 CD 或 DVD 光盘了。


# mkisofs -Jv -V examplecd -o example.iso /root/
将 /root/ 目 录 下 的 文 件 做 成 一 个 名 叫 example.iso 的 光 盘 镜 像 文 件 , 该 文 件 的 卷 标 为

     examplecd

还可通过命令


# mkdir /mnt/iso

# mount –t iso9660 –o loop example.iso /mnt/iso

将该文件加载到/mnt/iso 文件夹中,可以自由添加删除镜像中的文件,但要注意不要超过

     光盘的容量

在调整完/mnt/iso 文件的内容后


# umount /mnt/iso

最后使用 cdrecord 命令来刻录:


# cdrecord –scanbus

查看 SCSI 总线中刻录机的配置信息:


Cdrecord 2.0 (i686-pc-Linux-gnu) Copyright (C) 1995-2002 Jörg Schilling

Linux sg driver version: 3.1.25

Using libscg version 'schily-0.7'

cdrecord: Warning: using inofficial libscg transport code version (schily - Red
      Hat-scsi-Linux-sg.c-1.75-RH '@(#)scsi-Linux-sg.c          1.75 02/10/21
      Copyright 1997 J. Schilling').

scsibus0:

   0,0,0    0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM

   0,1,0    1) *

   0,2,0    2) *

   0,3,0    3) *

   0,4,0    4) *
0,5,0       5) *

   0,6,0       6) *

   0,7,0       7) *

我们可以看到目前的光驱在 SCSI 总线的参数,然后根据参数来输入下面的命令刻录光盘:


# cdrecord -v -eject speed=24 dev=0,0,0 example.iso

speed=24 是以 24 速来刻录光盘,dev=后加上刚才显示的刻录机的 SCSI 参数

3、 SCSI 设备驱动过程:

我们以 Adaptec SCSI RAID 3200S 卡为例,介绍 SCSI RAID 卡的驱动过程,这是常见的

带 RAID 功能的 SCSI 卡。在大部分编译好的内核中,都会编译对 SCSI 设备的支持,但是

需要知道,内核中只是支持通用的 SCSI 总线,而具体的 SCSI 卡还需要加载相应的驱动程

序,SCSI 芯片的驱动的安装比较特殊,我们分成两种情况来叙述:

第一种情况是,我们本身 Linux 系统的启动文件就是在 SCSI 硬盘上的,这种情况下

SCSI 设备的驱动程序不能像普通的驱动程序来安装,因为如果系统启动时没有加载 SCSI

卡的驱动程序,那么根本无法访问其他的 Linux 系统文件,所以我们必须在内核启动后立

刻就加载该设备的驱动程序,以下是 Red Hat 系统中具体的安装过程。

(1) 我们从 Adaptec 网站上下载 Adaptec SCSI RAID 3200S 卡针对 Red Hat 9 的驱动

       程序:

http://www.adaptec.com/worldwide/support/driverdetail.jsp?

sess=no&language=English+US&cat=/Product/ASR-3200S&filekey=dpt_i20-drv_2.5.0-

rh9-i686.img

       大家可以看到是一个 .img 的镜像文件

(2) 将该镜像文件写入软盘中:


       Linux 下可以用一下命令:

       # dd if=dpt_i20-drv_2.5.0-rh9-i686.img of=/dev/fd0

       或者
# cat dpt_i20-drv_2.5.0-rh9-i686.img > /dev/fd0

         在 windows 下利用 Red Hat 第一张安装光盘中的 /CDROM/dosutils/rawrite.exe 程

   序

(3) 在启动 Red Hat 安装过程时,boot 提示符出现时,进入以下安装模式:


         boot: Linux dd

         表示安装时需要 driver disk

(4) 按照向导提示,将刚才制作的驱动软盘插入。以后的安装过程就没有什么不同了。安

         装向导实际上将软盘上的驱动程序放到了 initrd 的 ramdisk (内存磁盘镜像)文件

         中,每次内核启动后,都最先加载这个内存虚拟硬盘的镜像,利用里面的 SCSI 驱

         动程序来驱动 SCSI RAID 卡和卡上连接的硬盘。

第二种情况是我们的系统已经存在了,比如已经安装到了一个 IDE 的硬盘上,我们需要驱

动 SCSI 卡,这种情况就跟其他的驱动程序没有太大的区别,用 modprobe 命令或者

insmod 命令将 SCSI 卡的驱动模块,加载到内存中,如:

(1) # lspci -v | grep -i i2o

             查看系统是否能访问到这个 PCI 设备

(2) 从 Adaptec 网站上下载驱动程序:


       http://www.adaptec.com/worldwide/support/driverdetail.jsp?

       sess=no&language=English+US&cat=/Product/ASR-3200S&filekey=dpt_i20-

       drv_2.5.0-rh9.rpm

     # rpm –ivh dpt_i20-drv_2.5.0-rh9.rpm

       # modprobe dpt_i2o

        检验是否可以加载模块,如果没有问题

(3) 看看是否可以访问 /dev/sda 设备或着已经创建好的 /dev/md0 设备


4、 尚观 Linux 研究室 - Linux 驱动程序全解析之以太网卡驱动模块的加载及网络接口的启

    功过程,网卡参数的调整
1.以太网卡的驱动过程

处理网络方面任务是 Linux 长项,在仅仅一两兆的 Linux 内核中就可以对 TCP/IP 的很好支

持,一般网络应用中 Linux 的效率要高于 Windows 系统,而且有很好的易用性。那么我们

如何驱动网络的设备呢?我们首先了解一下最常见的网络设备——以太网卡的驱动过程。

在内核加载后,虽然已经有了对 TCP/IP 协议的支持,但是具体的网络接口设备的驱动并

没有加载。在内核启动后,将硬盘上的根分区 mount 到系统中,我们的系统会查找模块配

置文件/etc/modules.conf,并按照该文件记录的内容来加载模块,以下是这个文件的内容:


# cat /etc/modules.conf

alias eth0 8139too

alias sound-slot-0 i810_audio

post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :

pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :

alias usb-controller usb-uhci

alias usb-controller1 ehci-hcd

表示加载 8139too 模块,我的网卡是 8139 的百兆以太网芯片,并将该模块取别名叫做

eth0,这表示第一个以太网的网络接口,我们以后只要访问 eth0,就是访问这块网卡。然

后系统会在 /lib/modules/2.4XXX/ 的 modules.deps 中查找该模块的具体位置:


# grep 8139too /lib/modules/2.4.21-4.EL/modules.dep

/lib/modules/2.XXX/kernel/drivers/net/8139too.o:

        /lib/modules/2.4.21-4.EL/kernel/drivers/net/mii.o

                     /lib/modules/2.4.21-4.EL/kernel/lib/crc32.o

以上内容在同一行中,表示 8139too 模块依存于 mii 模块和 crc32 模块,8139too 模块的具

体位置在 /lib/modules/2.XXX/kernel/drivers/net/8139too.o,所有系统内置的网络驱动程序

都在/lib/modules/2.XXX/kernel/drivers/net 目录下。
在驱动模块加载完成之后,可以直接通过命令 ifconfig 来设置网卡的 IP 地址,:


# ifconfig eth0 192.168.1.1

这样设置的 IP 地址重启后就会失效,使用 netconfig 命令可以永久更改 IP 地址:


# netconfig

# service network restart 或者 # /etc/rc.d/init.d/network restart`

那么系统每次启动时是怎样配置网络的呢?在 Linux 系统中网络作为一项服务被加载,配

置文件是/etc/rc.d/init.d/network,在该文件中我们可以看到系统启动网络接口,绑定 IP 地

址,设定静态路由的过程,这个文件通过调用/etc/sysconfig/network-scripts/ifcfg-*的几个

文件来配置各个网卡的 IP 地址,比如我们有 eth0,则会生成一个文件 ifcfg-eth0,系统每

次启动时自动绑定 eth0 的 IP 地址:


# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=none

IPADDR=192.168.0.1

NETMASK=255.255.255.0

TYPE=Ethernet

以上就是为 eth0 设备绑定了 192.168.0.1 的 IP 地址


# cat /etc/sysconfig/network-scripts/ifcfg-eth0:1

DEVICE=eth0:1

ONBOOT=yes

BOOTPROTO=none

IPADDR=192.168.1.1
NETMASK=255.255.255.0

TYPE=Ethernet

以上的 ifcfg-eth0:1 文件为 eth0 设定了第二个 IP 地址,192.168.1.1 的 IP 地址,这个文件

是我自己添加的,注意 DEVICE=eth0:1 跟上一个文件是不一样的。

2.尚观 Linux 研究室 - Linux 驱动程序全解析之安装 3COM 3CR990 网卡的驱动程序

注意在 2.6 内核中,所有模块都以 .ko 结尾

我们可以看到系统内置的网卡驱动程序在 /lib/modules/2.4.XXX/kernel/drivers/net 目录下,

如果你的网卡不在默认支持的硬件中,我们可以用以下方法来安装网卡驱动:

比如我们刚刚得到一块 3COM 3CR990 网卡,我们可以到 3COM 网站上下载针对 2.4 内核

的驱动:http://support.3com.com/infodeli/tools/nic/Linux/3c990-1.0.0a.tar.gz 。然后用

#t tar xvfz 3c990-1.0.0a.tar.gz         解压缩下载的文档,到解开的目录中


# make

当前文件下将会生成 3c990.o 的驱动模块


# modprobe ./3c990.o

看 一 下 模 块 是 否 可 以 被 正 常 加 载 , 如 果 没 有 问 题 , 更 改 /etc/modules.conf 文 件

/lib/modules/2.XXX/modules.dep 文件,让你的模块每次启动时加载:

# echo “alias eth0 3c990” >> /etc/modules.conf

# cp ./3c990.o /lib/modules/2.XXX/kernel/drivers/net

#            echo                 “/lib/modules/2.XXX/kernel/drivers/net/3c990.o:”   >>

/lib/modules/2.XXX/modules.deps

3.调整以太网卡的参数:

有时我们在加载完网卡的驱动后,如果网卡的状态不正确,比如我们驱动起一块网卡,但

是它在 100M 的速度上工作很不稳定,我们可以使用 mii-tool 命令来调整以太网卡的属性,

目前多数以太网卡为 10BaseT 与 100BaseTx 的 10M/100M 自适应网卡,也有较新的支持

1000BaseT 的千兆以太网卡。大家可以看 mii-tool 命令的一些用法:

# mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok

显示当前网卡所使用的以太网类型,目前这块网卡使用的是, 100baseTx 的全双工工作方

式。

# mii-tool -v

  eth0: negotiated 100baseTx-FD flow-control, link ok

 product info: vendor 00:08:18, model 22 rev 2

 basic mode: autonegotiation enabled

 basic status: autonegotiation complete, link ok

 capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

 advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

 link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

显示当前的网卡支持的所有以太网类型。


# mii-tool -F 10baseT-FD eth0

强制 eth0 使用 10baseT-FD 的方式(10M 全双工的方式)工作


# mii-tool -R

resetting the transceiver...

解除 eth0 的强制状态,让 eth0 自动侦测使用什么方式通讯。

五、尚观 Linux 研究室 - Linux 驱动程序全解析之 Modem 及 ADSL 的驱动安装,PPP 连接

的设置

1.外置 Modem 的驱动程序安装:

Modem 分为外置和内置两种,比较而言,外置的 Modem 配置较容易,使用非常方便 。

Modem 一般接在串口上,我们知道在 Linux 中,串口对应的设备文件为 /dev/ttyS*,如果

是 COM1 口,则对应 /dev/ttyS0。如果不知道连接的是哪一个 COM 口,可以先给 Modem

加电,用以下命令:
# echo AT > /dev/ttyS0

如果 Modem 的 TR 灯亮,则该 Modem 接到 COM1 口上。如果不亮,再试一下 /dev/ttyS1

文件。

知道了 Modem 连接的是哪一个串口后,就可以拨号了,拨号的过程实际上是通过 Modem

建立 PPP(点对点通讯协议)的连接。

在命令行下,我们可以使用 pppd 来进行拨号,常见的 Linux 系统中会安装这个拨号程序,

大家可以看一下在 /etc/ppp 目录下是否有相关的脚本文件,如果没有可以下载并安装 ppp

的包 ftp://cs.anu.edu.au/pub/software/ppp :

将包安装后,大家可以查找 ppp-on 和 ppp-on-dialer 文件,把文件复制到 /etc/ppp 文件夹

下,在其中修改 ppp-on 文件的如下几个地方:

  TELEPHONE=270                                                     ISP 提 供 的 上 网 电

  话                              号                           码

  ACCOUNT=user                                                      ISP 提 供 的 账 号 名

  称

  PASSWORD=123                                                         登 录 密 码

  LOCAL_IP=0.0.0.0                                           PPP 连接的 IP 地址, 0.0.0.0

  表          示           由           ISP        动        态        分          配

  REMOTE_IP=0.0.0.0                                  远 端 IP 地 址 , 一 般 为 0.0.0.0

  NETMASK=255.255.255.0

  export         TELEPHONE                 ACCOUNT        PASSWORD            

  DIALER_SCRIPT=/etc/ppp/ppp-on-dialer                      查找另一个必须的配置脚本

  exec /usr/sbin/pppd lock modem crtscts /dev/ttyS0 115200       设置 COM 口,及速度

  asyncmap                   0             kdebug            4           

  $LOCAL_IP:$REMOTE_IP           noipdefault   netmask   $NETMASK     defaultroute   

  connect $DIALER_SCRIPT&

将这个文件加上执行权限:


# chmod 700 ppp-on

# ./ppp-on
就可以拨号上网了,这种方法可以适用于多数的 Linux 系统,如果是 Red Hat Linux,我们

可以使用 redhat-config-network 命令轻松的在文本界面上配置拨号连接,如图 1。




图 1 文本界面下的 redhat-config-network

如果我启动了 X-window,gnome 与 kde 都自带图形界面的拨号程序。


2.内置 Modem 驱动程序的安装:

内置 Modem 比起外置的 Modem 来要更麻烦一些,我们来安装 Dell D600 笔记本的内置

Modem     的    驱      动   程     序   。    首   先    我    们    下     载     该   驱   动

http://www.Linuxant.com/drivers/hsf/full/downloads.php ,选定适合自己系统内核版本的

驱动程序,下载后是一个 rpm 包:

# rpm -ivh hsfmodem-6.03.00lnxt04061800full_k2.4.21_4.EL-1rh.i686.rpm

    ……

    Config for modem unit 0: /dev/ttySHSF0

        Device instance: 0-PCI-8086:24c6-14f1:5422

        HW revision   : CXT22

        HW profile name: hsfmc97ich
Registration ID: 115C-247C-BFC0

          License owner : unknown

          License key     : FREE

          License status : FREE (max 14.4kbps data only)

          Current region : CHINA (T.35 code: 0026)

     The /dev/modem alias (symlink) points to /dev/ttySHSF0

     ……

我们可以看到,安装程序自动建立了一个设备文件 /dev/ttySHSF0 ,并且为它创建了名叫/

dev/modem 的软链接文件,这个文件与其他的 ttyS 文件的类型是不同的:

# ls /dev/ttyS0 -l

crw-rw----   1 root     uucp    4, 64 Sep 15 2003 /dev/ttyS

# ls /dev/ttySHSF0 -l

crw-rw-rw-    1 root    root   240, 64 Jun 29 02:36 /dev/ttySHSF0

我们可以看到,实际上 /dev/ttySHSF0 文件不是标准的 COM 口,是该驱动程序自己注册

的 240 类型的驱动程序。

实际上,驱动内置 modem 的过程是先加载驱动程序,模拟一个 ttyS 的串口设备文件,然

后我们像在普通外置 Modem 建立 PPP 链接那样,来为内置的 Modem 一样的步骤建立拨

号连接,不过这时要选定 /dev/modem 来作为设备文件。


3.ADSL 及宽带连接驱动过程:

ADSL 设备通常是通过我们的以太网卡来拨号,建立 PPP 链接,这时的 PPP 协议叫做

PPPoE ,就是 PPP over Ethernet (在以太网上的点对点通讯协议),一般我们不需要任

何 ADSL modem 的驱动,只需直接建立 PPPoE 的连接就可以了,在命令行下,我们可以

下载 ADSL 拨号程序 rp-pppoe ,可以通过 Linuxsir 下载:

http://www.Linuxsir.org/postnuke/modules.php?

op=modload&name=Downloads&file=index&req=getit&lid=242          或 直 接 下 载 rpm 包 :
http://www.neweasier.com/software.html?class=4 ,配置起来非常简单,下载包解开后,

直接运行:

# ./go

运行解压缩出文件夹中的 go 文件后,将会出现的 PPPoE 配置向导,会提示你输入用户名

和密码,然后使用以下命令可以让你建立起连接:

# adsl-start

或者


# ifup ppp0

系统中会在配置完后出现一个 SysV 的服务:


# chkconfig --list adsl

adsl      0:off 1:off 2:off   3:off   4:off   5:off   6:off

# chkconfig adsl on

可以在每次启动时启动 ADSL 拨号

如果不用 rp-pppoe 的向导,我们也可以在 X-window 中直接使用如下命令:

#neat

或

#redhat-config-network

如图 2
图 2 X Window 中运行网络配置工具

这两个命令是在 Red Hat Linux 中的命令,可以在图形界面下,建立 PPPoE 的连接,其他

版本的 Linux 也应该有自己的 ADSL 拨号程序。




图 3 单击建立新连接

单击上面的 New ,建立新连接,如 VPN,eth,ISDN,modem 之类的连接都可以建立,

如下图:
图 4 选择 xDSL 连接,建立 PPPoE 连接

这里的 xDSL 并不是只有 ADSL 等 DSL 的连接,一般的 PPPoE 连接都可以用,比如网通

的 LAN 宽带,点击 Forward,进行下一步
图 5 输入 ADSL 或 LAN 宽带接入的连接信息

将网通或电信提供给你的用户名密码输入,点击下一步。

建立好了链接后,大家会发现在 /etc/sysconfig/network-scripts/ 目录中会出现 ifcfg-ppp0

的文件,你可以通过以下命令

# ifup ppp0

可以让系统通过 ADSL 拨号上网,建立宽带连接,也可以用刚才的向导拨号上网,如图

6:
图 6 建立 PPPoE 连接

先选中 PPP0 再单击上面的 Activate 按钮

有些地方提供 LAN 宽带接入方式也需要进行拨号,如北京的网通 LAN 接入宽带,它实际

使用跟 ADSL 一样的 PPPoE 协议,建立连接时也与 ADSL 的拨号方式一样,也可以用 rp-

pppoe 或 redhat-config-network 来建立拨号连接,运行向导时没有区别。

Troubleshooting:

如果在配置网络时出现问题,请遵循以下的步骤检查:

(1) ifconfig 看一下网络接口是否启动,IP 地址是否绑定,如果网络接口没有启动,如:

      PPP0 没有启动,使用命令:ifup ppp0。如果 IP 地址没有绑定,使用命令 ifconfig
eth0 192.168.1.1 设置地址。也可以使用命令 netconfig 设置 IP 地址,网关,及

    DNS 服务器的地址,然后用 service network restart 来重启网络。

(2) 如果网络接口及 IP 没有问题,但是不能上网,使用 ping 211.XXX 的一个外网地址,

    如 果 能 通 , 则 应 该 是 DNS 服 务 器 的 问 题 , 更 改 /etc/resolv.conf 文 件 中 的

    nameserver 的地址,换一个能用的 DNS 服务器的地址。

(3) 如果都没有问题就是 ping 不通外网的 IP,使用命令 route –n 看一默认网关是否正

    确,如果不正确使用 route del/add 来设置默认网关,使用 netconfig 可以永久更改

    默认网关。

总结:从我们在该节中的叙述可以看到,我们遇到的情况可能是千差万别,安装的方式也

是多种多样的,没有统一的方式。但是不论哪一种设备,大家应该首先理解这种设备的驱动

方式,然后再来学习具体的驱动程序。比如内置 Modem,我们需要先将驱动程序装入内核,

模拟一个/dev/ttyS 串口设备,再来建立 PPP 的连接。明白了这个过程,再遇到各种内置的

Modem 我们就能很好应付了。
尚观 Linux 研究室 - Linux 驱动程序全解析之 移动设备的驱动安装

各种数码设备越来越多,而 Linux 在对他们的配置上还没有做到像 Windows 一样方便,很

多人正是因为心爱的数码相机无法在 Linux 下使用,而不得不保留一个 Windows 系统。所

以掌握如优盘、移动硬盘、数码相机等设备在 Linux 下的驱动方法对于熟练使用 Linux 而言

是必备的技能。本节中将会介绍常见 USB、IEEE1394、PCMCIA 等移动设备的驱动概念和安

装技巧,为读者更好地配置和使用这些设备提供帮助。本节将着重介绍 USB 设备。


1、 USB 设备的驱动概述

USB 是 通 用 串 行 总 线 ( Universal Serial Bus ) , 是 在 1994 年 由 Intel 、 NEC 、 微 软 、

Compaq、DEC、IBM 等公司共同提出。USB 的目的在于将众多的接口(串口、并口、PS2 口

等),改为通用的标准。它仅仅使用一个 4 针插头作为标准插头,并通过这个标准接头,连

接各种外设,如鼠标、键盘、游戏手柄、打印机、数码相机等。USB 接口的特点是支持热插拔,

支持单接口上接多个设备,USB 的优点就不再赘述了,我们接下来看看 Linux 对 USB 的支

持。

USB 采用串行方式传输数据, USB1.1 最大数据传输率为 12Mbps,内核版本为 2.4 以上都

可以支持。USB2.0 规范是由 USB1.1 规范演变而来的,它理论上速度较 1.1 提高了 40 倍达

到了 480Mb/s ,但目前常见的 2.0 设备只能达到理论值的一半。 内核版本 2.4.19 开始对

USB2.0 进行支持。

除了内核的版本要对 USB 接口进行支持之外,你还要确定目前的系统是否编译了 USB 的

驱动模块。如果让 Linux 系统支持 USB 设备还需要一些驱动模块才行,我们都知道内置的

驱动程序都在 /lib/modules/2.4XXX/kernel/drivers 目录中,到这个目录中会有 usb 目录及

几个子目录,你可以从中找到以下的几个 USB 关键基础模块:

         usbcore.o          所有 USB 设备都需要的基本驱动模块


         host/ehci-hcd.o     USB2.0 设备支持

         host/usb-uhci.o     Intel VIA 等芯片组 USB 部分的驱动

         host/usb-ohci.o     Compaq iMac SiS Ali 等非 intel 芯片组 USB 部分的驱动

         storage/usb-storage.o   USB 接口的存储设备 如移动硬盘、U 盘等用到

         hid.o             USB 接口的键盘、鼠标等人机交互设备的基础支持
在该目录下还有些具体设备的驱动程序,分别驱动不同设备:


   # ls -p /lib/modules/2.4.21-4.EL/kernel/drivers/usb/

   acm.o      CDCEther.o hpusbscsi.o microtek.o rtl8150.o usbcore.o wacom.o

   audio.o    dabusb.o     kaweth.o     pegasus.o       scanner.o usb-midi.o

   brlvger.o hid.o       kbtab.o   powermate.o serial/       usbnet.o

   catc.o     host/     mdc800.o      printer.o   storage/ uss720.o

   比如 scanner.o 模块对应的就是 USB 扫描仪的驱动,audio.o 对应 USB 接口的扬声器

驱动。

从上面看来,Linux 对 USB 设备的支持一般分为两个部分,首先通过通用的 usbcore 等模

块驱动 USB 芯片,这样识别出 USB 设备,然后再通过具体的驱动程序驱动该设备。所以常

驻内存的 USB 驱动模块为 usbcore ehci-hcd usb-uhci 等:


   # lsmod

   Module               Size Used by      Not tainted

   ……

   hid                22212 0 (unused)

   input               5888 0 [keybdev mousedev hid]

   ehci-hcd            20104 0 (unused)

   usb-uhci            26412 0 (unused)

   usbcore              79392 1 [hid ehci-hcd usb-uhci]

   ……

在这些 USB 基础驱动模块已经加载的情况下,我们插入优盘等 USB 设备才能被识别出来,

系统将会自动加载相对应的驱动。如果你插入优盘没有反应,那么可能是这些 USB 基础驱

动没有加载,可以手动通过以下方式加载:
# modprobe usbcore

   # modprobe ehci-hcd

   # modprobe usb-uhci

   # modprobe hid        (如果是 USB 鼠标或键盘)




二、USB 存储设备的使用,本部分包括 优盘、USB 硬盘、USB 读卡器、部分数码相机等


USB 存储设备使用的非常多,如优盘、移动硬盘、数码相机等,它们都是在加载了 USB 的

通用驱动后,再使用 /lib/modules/2.XXX/kernel/drivers/usb/storage/usb-storage.o 作为存

储的驱动模块,该驱动会将存储设备模拟成 SCSI 设备。需要注意,只有在系统加载上节中

叙述的几种 USB 基础驱动后,该 USB 设备才可以被认出,然后系统会将它们模拟成 SCSI

设备(主要原因是系统允许 SCSI 设备热插拔),如 SCSI 硬盘,SCSI 光驱等,让我们先

来看一下这类设备还需要哪些配套驱动模块,这些模块分散在 /lib/modules/2.XXX/kernel/

drivers 目录中:

         usb-storage.o    USB 对与存储部分的驱动模块

         scsi_mod.o       对 SCSI 设备的支持


         sd_mod.o               对 SCSI 硬盘支持模块,对于 USB 硬盘


         sr_mod.o               对 SCSI 光盘支持模块,USB 光驱需要


         sg.o             SCSI 序列的通用支持模块

         ide-scsi.o       我们在第二节的刻录机部分见过这个模块

                         它可以把 IDE 设备模拟 SCSI 接口

大家可以通过查看 /lib/modules/2.XXX/modules.dep 文件,来查看这些模块是否存在,一

般情况下这些模块会被编译的,没有的话需要重新编译内核模块了。在正确的装载了驱动后,

我们可以通过访问/dev/sd? 设备来访问优盘或移动硬盘。通常情况下我们访问 sda1 来访问

移动硬盘或优盘的第一个分区,在 USB 基本驱动存在的情况下,我们插入优盘,大家可以

看到如下信息:
usb.c: USB device 7 (vend/prod 0xea0/0x6803) is not claimed by any active

  driver.

     Starting timer : 0 0

       Vendor: Netac        Model: OnlyDisk       Rev: 1.11

       Type: Direct-Access                    ANSI SCSI revision: 02

     Starting timer : 0 0

     Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0

     SCSI device sda: 32256 512-byte hdwr sectors (17 MB)

     sda: Write Protect is off

这一段是 usb-storage.o 和 SCSI 的驱动在起作用,我们可以看到,优盘被认成是 sda,要

使用它可以先查看分区表:

     # fdisk –l /dev/sda

     Disk /dev/sda: 16 MB, 16515072 bytes

     2 heads, 32 sectors/track, 504 cylinders

     Units = cylinders of 64 * 512 = 32768 bytes

        Device Boot    Start      End    Blocks Id System

     /dev/sda1 *           1     503    16080    1 FAT12

     # mkdir /mnt/usb

     # mount –t msdos /dev/sda1 /mnt/usb         该优盘得类型为 FAT12

之后我们就可以通过访问 /mnt/usb 来访问我们的优盘了,注意如果要拔掉优盘或移动存储

设备,请先 umount 然后再拔出,这样可以保证数据全部被写入,否则系统会出错,数据

可能不完整。


     # umount /mnt/usb

三、USB 数码相机的驱动
数码相机类型繁多,但是在 Linux 下有使用数码相机的简便方法。我们知道 USB 接口是数

码相机的主要接口,通常在 Linux 访问数码相机,我们可以通过两种方法:

1.使用专门软件,如果 Red Hat Linux 中自带的 gtkam,它是一个提供了数码照相机的图形

化界面的程序,支持 100 多种数码相机。 gtkam 直接连接你的数码照相机,允许你直接打

开、查看、并删除图像。在 Red Hat 9 的光盘中,有 gtkam 的 rpm 包:


        # ls gtkam*

        gtkam-XXXX.i386.rpm gtkam-gimp-XXXX.i386.rpm

        # rpm –ivh --aid gtkam*

        # rpm –ivh --aid --force gphoto2-XXXX.i386.rpm

            ( gtkam 基于 gphoto ,有时无法使用 gtkam 的原因是 gphoto 没有安装

        或模块被覆盖,所以需要重新安装 gphoto)

安装完毕后,在 X 中运行 gtkam 可以看到如下界面:


                       # gtkam
图 1 点击 gtkam 的 camera — Add Camera 来添加数码相机,然后在弹出的窗体中单击

Detect,来测试数码相机的连接类型。点击 OK 就可以看到数码相机中的照片了
图 2 使用 gtkam 连接 Kodak DX6340 相机看到的存储卡中的照片,选择照片,单击保存就

可以把照片保存到硬盘上。

我 们 也 可 以 从 以 下 地 址 获 得 gtkam 的 最 新 版 本 及 源 代 码 ,

http://sourceforge.net/project/showfiles.php?group_id=8874&release_id=209817 , 下 载

后可以使用其中的 install.sh 来进行安装。


1.另一种方式是把数码相机当做是 USB 存储设备(如优盘、读卡器等)来访问

这样我们可以像访问优盘那样来访问数码相机:


                                      # mount –t vfat /dev/sda1 /mnt/usb

但是这种方式极可能遇到不能支持的数码相机,比如我使用的 Kodak DX6340 数码相机,

在插入 USB 口之后出现以下信息。

          usb.c: USB device 2 (vend/prod 0x40a/0x570) is not claimed by any active

          driver.

还好我们有解决的办法,注意这种方法不只可以驱动不支持的数码相机,像不支持的存储

设备都可以使用,比如优盘、读卡器等都可以使用这种方法:

           a)   首先使用 lsmod 确定 USB 基本驱动模块已经装载,如果没有使用以上的

                命令:

                     # modprobe ehci-hcd; modprobe usb-uhci; modprobe usb-storage

                    # modprobe ide-scsi; modprobe scsi_mod; modprobe sd_mod

           b)   接着使用 cat /proc/bus/usb/devices 得到当前系统 USB 总线上的设备信

                息。尤其注意 Vendor、ProdID、Product 等信息:

            C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA

            I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

            E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms

            T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0

            D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1

            P: Vendor=040a ProdID=0570 Rev= 1.00
S: Manufacturer=Eastman Kodak Company

          S: Product=KODAK EasyShare DX6340 Zoom Digital Camera

          S: SerialNumber=KCKCJ33400274

数码相机也是一种存储设备,然而对于 Linux 下得移动存储设备,我们知道都是通过 usb-

storage.o 驱动,然后模拟为 SCSI 设备,这台数码相机无法使用,通常是 usb-storage 驱

动未包括此厂商识别和产品识别信息(在类似 skel_probe 的 USB 最初探测时被屏蔽了)。

对于 USB 存储设备的硬件访问部分,通常是一致的。所以我们要支持它,仅需要修改 usb-

storage 中关于厂商识别和产品识别列表部分。

所以我们要注意USB设备识别信息,其中重要的部分是


          P: Vendor=040a ProdID=0570 Rev= 1.00

          S: Manufacturer=Eastman Kodak Company

          S: Product=KODAK EasyShare DX6340 Zoom Digital Camera

若/proc/bus/usb 下没有相应 USB 设备信息,应输入以下命令将 USB 设备文件系统手动挂

装到 /proc/bus/usb:

          # mount -t usbdevfs none /proc/bus/usb

         c)   编辑 drivers/usb/storage/unusual_devs.h 文件,这里是所有已知的 USB

              产品登记列表,格式为

         UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax,

              vendor_name,

              product_name,

              use_protocol, use_transport, init_function,

              Flags).

Usb-storage.o 就 是 根 据 这 个 列 表 来 识 别 各 种 设 备 , 这 样 我 们 可 以 根 据 刚

才/proc/bus/usb/devices 文件中得出得信息,添加在上面,重新编译模块,这样就可以让

usb-storage 驱动去认识和发现它。
UNUSUAL_DEV( 0x040a, 0x0570, 0x0001, 0x0001,

                            "Eastman Kodak Company",

                            "KODAK EasyShare DX6340 Zoom Digital Camera",

                            US_SC_SCSI, US_PR_CB, NULL,

                            US_FL_FIX_INQUIRY     |    US_FL_START_STOP     |

          US_FL_MODE_XLATE ),




注意:添加以上几句的位置,一定要正确。比较发现, usb-storage 驱动对所有注册都是按

idVendor, idProduct 数值从小到大排列的。我们也要放在相应位置。

          d)   重新编译模块,之后插入的数码相机就可以跟其他 U 盘一样作为 USB 存

               储设备去访问

               # make dep

               # make modules

               # make modules_install

四、尚观 Linux 研究室 - Linux 驱动程序全解析之 USB 摄像头的驱动

内核源文件中自带了部分摄像头的驱动,如果你的 USB 摄像头无法使用,可以试试重新编

译模块,目前大量的杂牌摄像头都可以使用 OV511 的驱动模块。如果你刚刚购买了一个

USB 摄像头,没有相关的驱动,让我们来尝试用 OV511 来驱动它:

     1.    先从 Red Hat 光盘或 网站 kernel.org 获取当前版本的内核源码,并安装:


     # rpm –ivh kernel-source-2.XXX.rpm

     或


     # tar zxvf Linux-2.XXX.tar.gz

     2.    到源码目录中运行:


     # make menuconfig
或


# make xconfig 需要在 X-window 下

3.   选择 USB 的模块,如图 1 所示:




图 3 编译内核,选择 USB support

选择要编译的驱动,可以查看说明书,看看摄像头的芯片是什么型号,如图 2:
图 4 在 USB support 下可以选择多种驱动的模块,比如非常常用的 OV511 芯片的摄像头的

驱动,USB 打印机的驱动等,选定 OV511 摄像头的支持

     4.    最后保存,编译模块,并安装模块


          # make dep
# make modules

              # make modules_install

         5.     加载驱动,使用摄像头:


                # modprobe ehci-hcd

                #                   modprobe          usb-uhci

                # modprobe ov511

                cat /proc/devices

接着运行 gnomemeeting 之类的工具,选择 /dev/video0 或/dev/video1 作为摄像头的设备

文件,摄像头就可以使用了。

五、尚观 Linux 研究室 - Linux 驱动程序全解析之外置 USB 光驱及刻录机


USB 光驱与其他的 USB 存储设备使用类似,只不过 USB 光驱会被识别为 SCSI 光驱,如 /

dev/sr0 或/dev/scd0 等设备,它需要 sr_mod.o(SCSI CD-ROM 设备)驱动模块。

         # modprobe sr_mod (如果 sr_mod 模块没有编译,请重新编译内核,在 SCSI

    部分)

         # mount –t iso9660 /dev/scd0 /mnt/cdrom

外置刻录机的详见使用见第 8 期,Linux 完全驱动 第二节部分:


         # mkisofs -Jv -V examplecd -o example.iso /root/

将 /root/ 目 录 下 的 文 件 做 成 一 个 名 叫 example.iso 的 光 盘 镜 像 文 件 , 该 文 件 的 卷 标 为

     examplecd

还可通过命令


# mkdir /mnt/iso

# mount –t iso9660 –o loop example.iso /mnt/iso

将该文件加载到/mnt/iso 文件夹中,可以自由添加删除镜像中的文件,但要注意不要超过

     光盘的容量

在调整完/mnt/iso 文件的内容后
# umount /mnt/iso

最后使用 cdrecord 命令来刻录:


# cdrecord –scanbus

查看 SCSI 总线中刻录机的配置信息:


Cdrecord 2.0 (i686-pc-Linux-gnu) Copyright (C) 1995-2002 Jörg Schilling

Linux sg driver version: 3.1.25

Using libscg version 'schily-0.7'

cdrecord: Warning: using inofficial libscg transport code version (schily - Red
      Hat-scsi-Linux-sg.c-1.75-RH '@(#)scsi-Linux-sg.c          1.75 02/10/21
      Copyright 1997 J. Schilling').

scsibus0:

   0,0,0    0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM

   0,1,0    1) *

   0,2,0    2) *

   0,3,0    3) *

   0,4,0    4) *

   0,5,0    5) *

   0,6,0    6) *

   0,7,0    7) *

我们可以看到目前的光驱在 SCSI 总线的参数,然后根据参数来输入下面的命令刻录光盘:


# cdrecord -v -eject speed=24 dev=0,0,0 example.iso

speed=24 是以 24 速来刻录光盘,dev=后加上刚才显示的刻录机的 SCSI 参数。如果是外

     置 DVD ,则应使用命令 dvdrecord ,其用法与 cdrecord 相同,在 Red Hat 安装光盘
中有这个软件。


# rpm -ivh dvdrecord-0.1.2-12.i386.rpm

# man dvdrecord        查看帮助

六、USB 鼠标、USB 键盘

如果在 Red Hat Linux 中,大家可以简单使用命令 mouseconfig 来配置鼠标,选择 USB 接

口鼠标就可以了,如图 3:

     # mouseconfig




图 5 使用 mouseconfig 配置 USB 接口鼠标

如果使用手动的方式来配置,可以人工加入以下模块


      # modprobe hid

      # modprobe input

     # modprobe usbmouse

      # modprobe mousedev

      USB 键盘:
# modprobe hid

     # modprobe input

    # modprobe usbkbd

     # modprobe keybdev

七、IEEE1394 设备在 Linux 下的驱动


IEEE1394 又称 Firewire(火线)、i-Link(Sony 的叫法),跟 USB 接口类似,目前可以

提供 400Mb/s 的带宽,虽然理论上较 USB2.0 的 480Mb/s 的速度慢,但是实际使用中 ,

Firewire 要比 USB2.0 的设备快不少,所以仍然有很多设备如 DV、移动硬盘配备这种接口。

与 USB 相比,Firewire 的通用性不够强,得到的支持较少,一般主板上不带该 Firewire 的

芯片,我们通常是购买带 1394 接口的 PCI 卡来支持 1394 的设备。对于 1394 设备,在内核

2.4.10 之后的版本对它进行支持,IEEE1394 的驱动放在以下位置:

   # ls /lib/modules/2.XXX/kernel/drivers/ieee1394

   amdtp.o dv1394.o ieee1394.o raw1394.o video1394.o

   cmp.o   eth1394.o ohci1394.o sbp2.o

2.6 内核中的内核模块已经使用 .ko 结尾

它的驱动方式较 USB 大同小异,只是首先加载的是对 1394 总线的驱动(ieee1394.o),

和 1394 芯片的驱动( ohci1394.o),如果你使用 1394 卡连接 DV(数字摄像机)那么你

需要 1394 视频驱动( video1394.o )和 DV 视频 I/O 驱动(dv1394.o);如果你需要访问

的是 1394 外接硬盘或 CD-ROM、刻录机等,则需要对 SBP-2 协议的支持(sbp2.o);如

果你使用 1394 接口的以太网卡,需要加载驱动 eth1394.o。

如果没有某种驱动,可以重新编译内核模块,选择以下模块:


   # cd /usr/src/Linux-2.XXX

   # make xconfig              选择其中的 IEEE1394 选项,如图 6:
图 6 选择需要的 IEE1394 模块,然后重新编译模块


  # make dep

  # make modules

  # make modules_install

驱动 1394 接口的硬盘或光驱时,需要预先加载的驱动有 ieee1394.o 和 ohci1394.o:


  # modprobe ohci1394      将会将两样驱动全装载上,因为 ohci1394 依赖 ieee1394

硬盘需要的驱动是 sbp2.o,插入硬盘后它应该会自动加载,与 USB 设备相同,硬盘会被
模拟成 SCSI 设备,留意屏幕上显示的信息,看看被模拟为 sda 还是其他的设备,我们使

用以下命令来使用硬盘:

  # mkdir /mnt/1394

  # mount –t vfat /dev/sda1 /mnt/1394

如果是 1394 光驱,应该使用设备为 /dev/scd0,如果在插入设备时没有自动加载,试着手

动加载 sbp2 模块及 SCSI 模块:

         scsi_mod.o         对 SCSI 设备的支持


         sd_mod.o                    对 SCSI 硬盘支持模块,对应硬盘


         sr_mod.o                    对 SCSI 光盘支持模块,对应光驱


         sg.o               SCSI 序列的通用支持模块

与 USB 下相应的设备驱动非常相似,这里就不再叙述了。

各种移动设备层出不穷,花样繁多,国内网站的资料不是很全,使用 google 搜索英文网站,

往往能得到自己需要的东西,以下是使用优盘或 USB 硬盘的常见问题的解决方法:

    1.   加载 /dev/sda1 时出错

         这是因为较早的优盘不分区,它们使用 /dev/sda ,也有可能是 /dev/sda2 或

         sda3 等设备文件,请仔细观察 fdisk –l /dev/sda 的输出结果,看看优盘的分区

         到底是哪一个。


    2.   主机中已经有 SCSI 设备或 USB 设备,比如 /dev/sda 硬盘,或另一个优盘

         这时你可以尝试 sdb sdc 等设备,实际上每一次在插入优盘时可以留意以下屏

         幕上显示的信息,那里有该优盘被转换成哪一个 sd 设备了。

    3.   优盘插入后没有反应,访问 /dev/sd?设备时也没有反应?

         这时你可以查看相关模块是否已经加载,如果没有,手动加载,然后重新插入

         你的设备,看看是否有反应:

                # modprobe ehci-hcd; modprobe usb-uhci; modprobe usb-storage.o

                # modprobe ide-scsi; modprobe scsi_mod.o; modprobe sd_mod.o
4.   设备驱动已经加载,我怎么知道访问哪个设备文件呢?比如访问摄像头时需要

          用到哪个设备文件?

           对比加载驱动前和加载驱动后的 /proc/devices 文件,多出哪一行就是这种驱

           动程序注册的主设备号,如对比 ov511 加载前后/proc/devices 文件的变化,

           你会发现多出如下一行:


           # cat /proc/devices

           Character devices:

           …

           81 video_capture

           …

 表 示 C 型 设 备 , 主 设 备 号 为 81 的 设 备 文 件 是 访 问 ov511 驱 动 的 入 口 , 再 对

照 /usr/src/Documentation/devices.txt 中查找 c 类型的主设备号 81 ,就可以知道对应如下

设备文件:


          81 char    video4Linux

                    0 = /dev/video0   Video capture/overlay device

                     ...

显示设备的驱动及声卡驱动的安装

图形化的界面能让我们方便的享用 Linux 的强大功能,而且现在 Linux 的图形化界面已经

越来越完善了,我们在 Linux 中使用的图形显示系统是 X - Window ,但是由于与常见的

MS Windows 系统有很大的差异,所以在使用时,即使有时面对的是很小的问题,却不知

才能如何解决,比如无法驱动显卡,显示器参数错误,花屏,图形界面无法启动等。本节中,

我们将首先向大家讲述, X-Window 的概述,如何安装常见显卡的驱动程序,相关的配置

文件,以及参数调整等内容。让大家对 Linux 下显示部分的驱动有较清楚的认识。之后,我

们还会介绍常见的声卡驱动安装方法。


1、 X-Window 的概述
X 是一套显示体系,包括 Server 端,Client 端,他们之间使用 X 协议互相通信。X Client 将

希望显示的图形发送到 X Server,X Server 将图形显示在显示器上,同时为 X Client 提供

鼠标键盘的输入服务。因为 C/S 结构,我们可以将 X 的 Server 和 Client 分别运行在两台计

算机上,甚至可以安装一些软件,让 Windows 作为 X Server ,让 Linux 作为 Client ,将

KDE 或 GNOME 等桌面环境显示到 Windows 主机上来,如图:

  图 1:让 Windows 作为 X Server




  图 1:让 Windows 作为 X Server,我们使用图中的 Xmanager 1.3.9,在 Windows XP

上 运行 了 X Server ,然 后运 行一 台 Linux 主 机下 的 startkde ,将 kde 桌 面环 境显 示在

Windows XP 下。

X 诞生于 1984 年,在较短的时间内 X 发布到了 11 个版本 X11,X11 经过多年的发展,现

在使用的是 X11R6。


我们都知道,使用 startx 命令可以启动 X-Window,实际上,我们是在同一台计算机上同

时运行的 Server 和 Client,在运行 startx 后,首先启动的是 XFree86,它是 Linux 平台最

常用的 X 的 Server 端,然后,又运行 X 的 Client 程序,如 startkde(KDE 的启动脚本)或
gnome-session(GNOME 的启动脚本),他们利用 X 协议连接本机的 X Server,将图形

显示出来。


现在我们就知道了,Linux 上最常使用的 X Server 程序就是 XFree86,它的任务是驱动显

示卡、显示器、鼠标、键盘等设备,为 X Client 提供显示服务、输入服务等。XFree86 的主要文

件分别在:


   /usr/X11R6                                                   XFree86 文 件 所 在

的主要目录

   /usr/X11R6/bin     XFree86 的可执行程序文件

   /usr/X11R6/lib/modules/drivers     XFree86 自带的驱动程序所在的目录

# ls /usr/X11R6/lib/modules/drivers

如上所示,其中 *_drv.o 的文件就是各种硬件的驱动程序,如 sis_drv.o 就是 SIS 显卡的驱

动程序文件。

   /etc/X11         X 的配置文件及启动脚本所在目录

   /etc/X11/XF86Config 或 XF86Config-4 XFree86 的启动配置文件如果两个文件都存在,

XF86Config-4 文 件 优 先 , XFree86 自 带 了 一 些 设 备 的 驱 动 , 具 体 位 置 在

/usr/X11R6/lib/modules/drivers,如果你的显示卡太新,无法使用 X-Window ,比如用了

Intel 的 855GM 芯片组中集成的显卡,无法启动 X ,你可以考虑升级 XFree86 ,当前的

XFree86 成熟的版本是 4.3,最新的版本.4.4 正在完善之中。您可以从以下的链接中可获得

4.3 的 XFree86 所支持的所有显卡列表:

   http://xfree86.Linuxforum.net/4.3.0/RELNOTES2.html#3

XFree86 官方的版本下载网站是 http://www.xfree86.org/downloads.html ,中国的镜像网

站是:http://xfree86.Linuxforum.net/downloads.html


也可以或从中科红旗的网站上下载:


   http://www.redflag-Linux.com/source/download/XFree86_driver4.3.tgz

   以上 tgz 包的安装步骤:
# tar zxvf XFree86_driver4.3.tgz       解压缩包


   # sh install.sh              运行安装脚本

如果只是希望安装显卡的驱动程序,请看下面。


2、 安装 Intel i865G 芯片组中的显卡驱动

Intel i865G 是一种较新的芯片组,它内置了显示模块,但是在安装较早的 Linux 版本之后,

X 有可能无法启动,一种方法是直接升级到 XFree86 4.3,另一种方法是通过 Intel 官方的

网站下载驱动程序:


http://downloadfinder.intel.com/scripts-df/support_intel.asp?

iid=HPAGE+header_support_download&


在该链接的下载页面下,你可以选择下载 RPM 包,也可以下载 tar.gz 的压缩文档。安装方

式略有不同,经过以下三步可以让显卡在 X 中正常使用,其他的显卡驱动安装大同小异:


第一步,安装驱动程序:

如果你选择下载上面 RPM 包时:


     # rpm –Uvh --force intelgraphics_20040607_i386.rpm         升级/安装 rpm 包

     如果你选择下载的是 tar.gz 压缩包时要执行:


     # tar xzvf IntelGraphics_060704.tar.gz

     # cd dripkg

     # ./install.sh

程序将自动安装,安装程序将更新 /usr/X11R6/modules/drivers/i810_drv.o 的驱动程序,

使其支持新的 i865G 芯片组中的显卡。


第二步 选择驱动程序,共有三种方法可以在配置文件 XF86Config 中,指定正确的驱动程

序:


方法一:如果是 Red Hat 系统则可以运行:
# redhat-config-xfree86

图 2 使用 redhat-config-xfree86
图 2 使用 redhat-config-xfree86,这个命令可以自动侦测显卡,让你配置分辨率和色深,

选择 Advanced 页面,然后点击 Video Card 的 Configure 按钮,选择正确的显卡。但是如果

版本在 Red Hat8.0 之前,则没有这个命令,应该运行:


   # Xconfigurator     程序会一步步提示你,其中选择正确的驱动程序

这两个程序都会将结果写入 /etc/X11/XF86Config 这个配置文件,当然你可以直接更改这

个文件。


方法二:直接更改 XFree86 的配置文件,这种方法在 Linux 系统较通用,不用非要 Red

Hat。


   # vi /etc/X11/XF86Config 或 XF86Config-4

在其中找到


       Section "Device"

        Identifier "Videocard0"
Driver    "i810"           (将会使用 i810_drv.o的驱动程序)


      VendorName "Videocard vendor"

      BoardName "Intel 865"

      EndSection

将 Driver 后面改为 i810,表示使用 i810_drv.o 驱动程序

该配置文件中其他需要注意的地方:


      Section "Monitor"

      Identifier "Monitor0"

      VendorName "Monitor Vendor"

      ModelName      "Unknown monitor"

      HorizSync    31.5 - 37.9

      VertRefresh 50.0 - 70.0

      Option       "dpms"

      EndSection

这个部分是设置你的显示器类型,如果不知道自己的显示器叫什么没关系,但需要将显示

器的垂直刷新率和水平刷新率正确设置,可以查看显示器的说明书,以上是15寸显示器最

常用的频率,如果这个参数设置错误,显示器就会花屏或黑屏。


      Section "Screen"

      Identifier "Screen0"

      Device    "Videocard0"

      Monitor   "Monitor0"

      DefaultDepth       16

      SubSection "Display"
Depth   16

                   Modes   "1024x768" "800x600" "640x480" (默认会使用最高的分辨

        率)

         EndSubSection

        EndSection

这里是设置显示模式的地方,包括屏幕的分辨率,和色深,默认使用最高的分辨率,如果

想使用较低的分辨率,将高分辨率删除就可以了,在这个配置文件中显示器会使

用"1024x768" 的分辨率,色深是16位色。有关XF86Config文件的详解可以看它的man

page:

# man XF86Config

  方法三:让XFree86自己来生成XF86Config文件

运行命令


# XFree86 -configure

XFree86 自动侦测显卡及显示器,在用户的主目录下生成一个名叫 XF86Config.new 的文

件

可以以下命令测试这个文件是否正常运行:


# XFree86 -xf86config ~/XF86Config.new

这个命令是指定X Server使用 ~/XF86Config.new作为配置文件

看一下是否有白色 X 型的光标显示出来,如果有,就可以按ctl+alt+Backspace结束X,

然后运行下面的命令,用新的配置文件来替换系统配置文件。

# cp ~/XF86Config.new /etc/X11/XF86Config

第三步 启动X

您可以运行 startx 启动X,这种方式依赖于控制台(tty),将X作为当前控制台得Shell的

子进程来运行,也可以运行桌面管理程序:

gdm     (Gnome 桌面管理程序)
或 kdm (KDE的桌面管理程序)

或 xdm (XFree86的桌面管理程序)

这些方式不依赖于当前的Shell,即使当前Shell关闭,X一样会继续运行。

以上三步是Linux下安装X部分显卡驱动程序的通常步骤,绝大多数显卡都可以经过以上的

步骤正常使用,不同的是下载地址和具体的驱动程序的生成方式可能不一样,最关键是理

解以上每一步的意义。

笔记本上Intel815集成显卡安装方式:

我们从同样从Intel网站上下载815显卡部分的rpm包:


http://downloadfinder.intel.com/scripts-df/filter_results.asp?strOSs=39&strTypes=DRV

%2CARC&ProductID=797&OSFullName=Linux*&submit=Go%21

# rpm –ivh xfcom_i810-1.2-3.i386(1).rpm

重复以上的第二至第三步:


# redhat-config-xfree86          选择正确的驱动程序


# startx                  启动X

三、安装其他显卡的驱动


1.GeForce FX 6800显卡驱动安装,包含其他NVIDIA显卡的驱动

如果你购买了GeForce FX 6800显卡,希望玩玩刚刚发布的DOOM3,结果发现X无法启动

了,这时可以去 NVIDIA网站下载最新的驱动了:http://www.nvidia.com/object/Linux.html

NVIDIA的Linux驱动程序做得相当精细,下载后得到文件NVIDIA-Linux-x86-1.0-6106-

pkg1.run,运行就可以看到一个tui(文本用户界面):

# chmod 700 NVIDIA-Linux-x86-1.0-6106-pkg1.run        设置执行权限


# ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run.          运行安装程序

程序将会提示你一步步安装NVIDIA的驱动,该驱动包含两部分,一部分是内核驱动,用于

命令行界面的驱动,在安装这部分时,如果不是它支持的几种内核版本,需要编译内核,

另一部分是针对XFree86的驱动。
运行中常常出现的错误是在编译内核时找不到内核的源文件,可以用以下的方法解决,先

下载安装kernel的源文件:

# rpm –ivh kernel-sourceXXX.rpm         在Red Hat的安装光盘上

或者


# tar zxvf Linux-2.XXX.tar.gz         可以从网上下载,如:kernel.org

指定源文件位置:


# ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run. --kernel-source-path=<kernel 源文件目录的位

置>

安装驱动程序后,如果有问题,可以参考刚才安装i865显示驱动的方法,来调整显卡的驱

动和参数,运行 redhat-config-xfree86 或 XFree86 –configure 或者直接更改 /etc/X11下的

XF86Config文件。

另外,如果希望直接得到NVIDIA的驱动程序,不想自动安装,可以运行以下命令来将包中

的文件解开。

# ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run –x

在 ./NVIDIA-Linux-x86-1.0-6106-pkg1/usr/share/doc 目录下有一个XF86Config.example

的文件,如果遇到XF86Config文件配置有问题,可以直接查看该文件中的显卡驱动部分内

容。


2.ATI 9800显卡驱动的安装:

从链接 http://www2.ati.com/drivers/Linux/fglrx-4.3.0-3.11.1.i386.rpm 下载

fglrx-4.3.0-3.11.1.i386.rpm文件,然后执行:

# rpm -Uvh --force fglrx-4.3.0-3.11.1.i386.rpm   强制升级/安装驱动程序包

注意看看是否有错误发生,如果有注意查看出错的信息是什么。


# fglrxconfig

          使用ATI自己的配置工具,配置驱动程序

该程序会提示你回答一些问题,当问到是否创建一个XF86Config-4 文件, 回答y,就可以生

成新的配置文件。
# startx                       重新启动X


# fglrxinfo                     可以查看驱动程序是否安装成功


3.常见显卡驱动的下载地址:

NVIDIA显卡驱动:                  http://www.nvidia.com/object/Linux.html

ATI显卡驱动:                    http://www.ati.com/support/driver.html (ATI网站访问速度较慢,

可以多试几次)


VIA芯片集成显卡的驱动程序: http://www.viaarena.com/?PageID=296

SIS 显卡驱动程序:                   http://www.mypcera.com/qu/2/soft1/xsis.rpm

Intel 芯片组显卡部分的驱动程序:

http://downloadfinder.intel.com/scripts-df/support_intel.asp?

iid=HPAGE+header_support_download&


Intel 笔记本迅驰显示驱动程序:

http://downloadfinder.intel.com/scripts-df/filter_results.asp?strOSs=39&strTypes=DRV

%2CARC&ProductID=922&OSFullName=Linux*&submit=Go%21


ATI 系列笔记本驱动程序:升级 XFree86

如果实在找不到驱动程序,试着按照上面的介绍升级 XFree86 到.4.3 或 4.4,它自带如 ATI

M9000 笔记本显卡、SIS 显卡等驱动程序。


4.内核支持显示模式调整

在命令行界面下,你可以调整内核的显示模式,让他使用较高分辨率,设置方法如下:

如果使用的是 grub 作为 boot loader 则运行命令:


# vi /boot/grub/grub.conf

在 kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/ 行后添加 vga=0x314,这是设置显示模式,
vga 是 kernel 的参数,0x314 表示的是 16 进制的 314,换算成 10 进制为 788,所

vga=788 跟与 vga=0x314 是一样的,我们把该行改为:

kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/ vga=0x314

你会发现 Linux 启动时显示一个企鹅图标,使用的是 800x600 的分辨率了, vga 的参数意

义如下:


            640x480 800x600 1024x768 1280x1024


  256 色        0x301   0x303   0x305   0x307


  16 位色 0x311          0x314   0x317   0x31A


  24 位色 0x312          0x315   0x318   0x31B

如果你使用的是 lilo 作为 boot loader,则在/etc/lilo.conf 文件中将 append 处改为:


append=" root=LABEL=/ vga=0x314"

之后运行命令:


# lilo –v               使用新的配置文件更新 MBR。

四、尚观 Linux 研究室 - Linux 驱动程序全解析之常见显卡故障的解决

当我们无法启动 X 时,应仔细查看出错信息,以下为 X 启动不成功的常见原因:


1. 当屏幕为全黑或花屏时,应该是显示器参数有误。应先按 ctl+alt+Backspace 结束 X,

    查看显示器说明书,在 /etc/X11/XF86Config-4 或 XF86Config 文件中,将水平和垂直

    刷新率改成正确的值,或者运行 redhat-config-xfree86 、XFree86 –configure


2. XF86Config 文件损坏,或丢失,运行 redhat-config-xfree86 或者 XFree86 –configure

3. 没有控制台所有权,比如你是以 zorro 用户登陆,然后用命令 su – joan 切换为用户

    joan,这时使用 startx 就会出错,提示没有该控制台的所有权,你可以 exit 退出 joan

    的 shell 然后再运行 startx。


4. 硬盘没有空间,在使用 kde 或 gnome 时,每次启动 X 都要占用一定空间,放临时文件,
如果/tmp 或 主目录下无法写入文件,这时 X 就会出一些奇怪的错误。


5. 显 卡 驱 动 问 题 , 下 载 安 装 正 确 的 驱 动 , 运 行 redhat-config-xfree86 或 XFree86 –

   configure


6. xfs 服务没有启动,xfs 是字体服务,它不起动则 X 无法启动,使用命令

   # service xfs start

   或


   # /etc/rc.d/init.d/xfs start    可以启动该服务

   如果希望该服务每次自动启动,使用命令:

   #chkconfig xfs on。

五、声卡驱动程序概述


Linux 下 声 卡 的 驱 动 是 作 为 普 通 内 核 模 块 来 加 载 的 , 系 统 内 置 的 声 卡 驱 动 在

/lib/modules/2.XXX/kernel/drivers/sound/目录下,以下是系统内置的声卡驱动模块:


# ls /lib/modules/2.XXX/kernel/drivers/sound/

ac97_codec.o        cs4232.o          forte.o     uart401.o

ac97.o         cs4281             i810_audio.o   via82cxxx_audio.o

ad1848.o         cs46xx.o           maestro3.o    ymfpci.o

ad1889.o         emu10k1            rme96xx.o

audigy         es1370.o            soundcore.o

cmpci.o         es1371.o           sound.o

结合我们上节课所讲内容,我们可以知道系统在启动时会通过以下两个文件来加载模块: /

etc/modules.conf 和 /etc/rc.d/rc.sysinit,声卡也是在这里加载的。如果我们新安装了块声卡,

在 Red Hat Linux 中,你可以使用命令:kudzu 来搜索声卡,并且自动配置。如果系统中没

有内置的驱动程序,我们可以按以下步骤来安装,我们以 VIA 的 8237 南桥集成声卡为例:
从 VIA 的网站上下载最新的驱动程序:http://www.viaarena.com/?PageID=294

下载 LinuxAudiov230.gz 文件,解压缩:


# tar xzvf LinuxAudiov230.gz

编译 src.rpm 包:


# rpmbuild --rebuild viaudiocombo-2.2-3.src.rpm

如果没有 rpmbuild 命令则运行:


# rpm --rebuild viaudiocombo-2.2-3.src.rpm

# cd /usr/src/RPM/RPMS/iX86. ( 这里的 X 根据你机器的情况不同而不同 )

# rpm –ivh --force viaudiocombo-2.2-3.iX86.rpm    安装编译好的驱动程序


Intel 主板的集成声卡一般使用的是 i810_audio.o 作为驱动,目前新版本的 Linux 内置的驱

动可以直接支持。


六、尚观 Linux 研究室 - Linux 驱动程序全解析之 Linux“万能声卡驱动”安装

计算机中的声卡千差万别,除了 Intel、VIA 等大厂,大多数声卡都没有专门写 Linux 下的驱

动程序,那么我们怎样在 Linux 中使用没有找不到驱动程序的声卡呢?你可以试试 Linux

下的“万能声卡驱动”,他们可以驱动大量的声卡,目前主要有两种万能声卡驱动,一种是

ALSA,是 Advanced Linux Sound Architecture 的缩写 ,采用 GPL,针对 Linux 系统,源代

码公开,主页是 http://www.alsa-project.org/ ;另一种是 OSS , Open Sound System ,它

是 商 用 软 件 , 针 对 主 流 UNIX 系 统 , Linux 也 在 它 的 支 持 之 列 , 主 页 是

http://www.opensound.com/。我们将主要介绍 ALSA 驱动的安装。

A.安装 ALSA 驱动程序:

1 .从 http://www.alsa-project.org/alsa-doc/ 处查找是否有你的声卡,如果有, 一 定 要 从

此 处 点 击 后 面 “ details”链 接 , 来 查 找 安 装 方 法 , 这里以安装创新 Soundblaster Audigy

声卡的驱动为例,其他的声卡请查看 details 中的具体方法:

在安装之前需要安装内核的源代码包,可以从 Red Hat 光盘上安装 kernel-sourceXXX.rpm
包,或者从 kernel.org 网站上下载当前系统版本的源代码包,安装源码包:


# rpm –ivh kernel-soureXXX.rpm

或


# tar zxvf kernel-2.XXX.tar.gz

# cd /usr/src/Linux2.XXX/                   到源代码的目录中


# cp /boot/config-2.XXX ./.config                                   将当前版本的内核配

置文件拷贝至源码目录


2.下载驱动程序

从 http://www.alsa-project.org/alsa/ftp/driver/ 下载驱动程序 alsa-dirver-1.0.6rc1.tar.bz2

从 http://www.alsa-project.org/alsa/ftp/lib/ 下载库文件 alsa-lib-1.0.6rc1.tar.bz2

从 http://www.alsa-project.org/alsa/ftp/utils/ 下载工具 alsa-utils-1.0.6rc1.tar.bz2


3.安装驱动

# cd /usr/src

# mkdir alsa

# cd alsa

# cp alsa* ./

 # tar -xjvf alsa-driver-1.0.6rc1.tar.bz2

# cd alsa-driver-1.0.6rc1

# ./configure --with-cards=emu10k1 --with-sequencer=yes;

 # make

 # make install

 # chmod a+rw /dev/dsp /dev/mixer /dev/sequencer /dev/midi
同样安装 lib 包和 utils 包:


# cd ..

# tar -jxvf alsa-lib-1.0.6rc1.tar.bz2

# cd alsa-lib-1.0.6rc1

# ./configure

# make

# make install

# cd ..

# tar -jxvf alsa-utils-1.0.6rc1.tar.bz2

# cd alsa-utils-1.0.6rc1

# ./configure

# make

# make install

4.更改配置文件:

# vi /etc/modules.conf 添加如下:

     alias char-major-116 snd

     alias snd-card-0 snd-emu10k1

          # module options should go here

     alias char-major-14 soundcore

     alias sound-slot-0 snd-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 sound-service-0-12 snd-pcm-oss

但是 ALSA 驱动后的声卡默认是不发声的,你可以用 ALSA mixer 来开启,直接运行以下

命令可以简单全部开启所有的音量


#./audunmute

也可以使用以下命令来设置音量的大小


#      amixer      -c      0      sset     'Master',0    100%,100%       unmute
# amixer -c 0 sset 'PCM ',0 100% unmute


可以编辑/etc/modules.conf 文件中添加如下一行可以让声卡每次启动时调整音
量为 100%:


post-install snd-card-0 amixer -c 0 sset 'Master',0 100%,100% unmute &&
amixer -c 0 sset 'PCM ',0 100% unmute


B.设置 OSS 声卡驱动

1.从 http://www.opensound.com/download.cgi 可以选择下载 OSS 的版本,如针对 2.4 的

内 核 的 驱 动 , 或 针 对 2.6 内 核 的 驱 动 , 以 下 是 2.4 内 核 驱 动 的 下 载 地 址 :

ftp://www.se.opensound.com/pub/oss/Linux/oss3991e-Linux-x86-v24.tar.gz

2.安装驱动程序:

# tar zxvf oss3991e-Linux-x86-v24.tar.gz

#./oss-install

将会自动安装其中包含的驱动程序,安装驱动模块前,请使用命令 modprobe –r 或 rmmod

把原有的驱动程序卸载。

以上为 Linux 声卡驱动的大致安装过程,因为 Linux 下的声卡众多,不可能有一个固定的
安装步骤,但大致的步骤是编译出针对目前内核版本的驱动模块,然后再使用 insmod 或

modprobe 加 载 上 去 , 更 多 的 是 通 过 /etc/modules.conf 文 件 自 动 加 载 。 理 解

/etc/modules.conf 文件很重要,这是大多数 Linux 系统加载模块的文件,有些 Linux 是/etc/

conf.modules, 如 果 声 卡 是 非 即 插 即 用 的 , 可 以 再 该 文 件 中 使 用 options snd-card-0

io=0x300 irq=5 来设置 io 资源及中断号。

Más contenido relacionado

La actualidad más candente

Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
Clonezilla tutorial.v7
Clonezilla tutorial.v7Clonezilla tutorial.v7
Clonezilla tutorial.v7hs1250
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯SZ Lin
 
Aix操作系统培训文档
Aix操作系统培训文档Aix操作系统培训文档
Aix操作系统培训文档lwj2012
 
Debian 套件打包教學指南 - 繁體中文翻譯
Debian 套件打包教學指南 - 繁體中文翻譯Debian 套件打包教學指南 - 繁體中文翻譯
Debian 套件打包教學指南 - 繁體中文翻譯SZ Lin
 
VMware Rhel5 Oracle10g Rac
VMware Rhel5 Oracle10g RacVMware Rhel5 Oracle10g Rac
VMware Rhel5 Oracle10g Racguest77e407
 
soyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Oksoyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Okguest69f195
 
The New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemDThe New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemDfreedman6022e20
 
鳥哥三到六章
鳥哥三到六章鳥哥三到六章
鳥哥三到六章Edward Yi
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guidephantoxe
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
5, system admin
5, system admin5, system admin
5, system adminted-xu
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案cao jincheng
 
Linux必学的60个命令
Linux必学的60个命令Linux必学的60个命令
Linux必学的60个命令yiditushe
 
20121111 linux intro
20121111 linux intro20121111 linux intro
20121111 linux introChang Mt
 

La actualidad más candente (18)

Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
Clonezilla tutorial.v7
Clonezilla tutorial.v7Clonezilla tutorial.v7
Clonezilla tutorial.v7
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
 
Aix操作系统培训文档
Aix操作系统培训文档Aix操作系统培训文档
Aix操作系统培训文档
 
Linuxguide4f2e
Linuxguide4f2eLinuxguide4f2e
Linuxguide4f2e
 
Debian 套件打包教學指南 - 繁體中文翻譯
Debian 套件打包教學指南 - 繁體中文翻譯Debian 套件打包教學指南 - 繁體中文翻譯
Debian 套件打包教學指南 - 繁體中文翻譯
 
VMware Rhel5 Oracle10g Rac
VMware Rhel5 Oracle10g RacVMware Rhel5 Oracle10g Rac
VMware Rhel5 Oracle10g Rac
 
soyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Oksoyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Ok
 
The New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemDThe New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemD
 
鳥哥三到六章
鳥哥三到六章鳥哥三到六章
鳥哥三到六章
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guide
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
5, system admin
5, system admin5, system admin
5, system admin
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案
 
Linux必学的60个命令
Linux必学的60个命令Linux必学的60个命令
Linux必学的60个命令
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Sth About SSD
Sth About SSDSth About SSD
Sth About SSD
 
20121111 linux intro
20121111 linux intro20121111 linux intro
20121111 linux intro
 

Destacado

Financial manager job description
Financial manager job descriptionFinancial manager job description
Financial manager job descriptionfinancemanagement
 
140917運用管理勉強会job scheduler
140917運用管理勉強会job scheduler140917運用管理勉強会job scheduler
140917運用管理勉強会job schedulerOSSラボ株式会社
 
7 Ways to Enrich Email Marketing with Predictive Intelligence
7 Ways to Enrich Email Marketing with Predictive Intelligence7 Ways to Enrich Email Marketing with Predictive Intelligence
7 Ways to Enrich Email Marketing with Predictive IntelligenceSalesforce Marketing Cloud
 
Simple Mail Transfer Protocol
Simple Mail Transfer ProtocolSimple Mail Transfer Protocol
Simple Mail Transfer ProtocolRajan Pandey
 
Email Marketing Ppt Presentation
Email Marketing Ppt PresentationEmail Marketing Ppt Presentation
Email Marketing Ppt PresentationDiseño Domingo
 
Email Marketing Presentation
Email Marketing PresentationEmail Marketing Presentation
Email Marketing PresentationIain Davenport
 
Marketing strategy ppt slides
Marketing strategy ppt slidesMarketing strategy ppt slides
Marketing strategy ppt slidesYodhia Antariksa
 
Job interview slide show
Job interview slide showJob interview slide show
Job interview slide showlmcdonaldbe
 
Marketing Strategy of Nestle ppt
Marketing Strategy of Nestle pptMarketing Strategy of Nestle ppt
Marketing Strategy of Nestle pptBaba Chaudhry
 
Email Marketing 101: Strategy
Email Marketing 101: StrategyEmail Marketing 101: Strategy
Email Marketing 101: StrategySendGrid
 
JMS Providers Overview
JMS Providers OverviewJMS Providers Overview
JMS Providers OverviewVadym Lotar
 
Marketing - Definition & Importance, Concepts & Marketing Management Tasks
Marketing - Definition & Importance, Concepts & Marketing Management TasksMarketing - Definition & Importance, Concepts & Marketing Management Tasks
Marketing - Definition & Importance, Concepts & Marketing Management Taskssharen1967
 

Destacado (20)

Service worker API
Service worker APIService worker API
Service worker API
 
Financial manager job description
Financial manager job descriptionFinancial manager job description
Financial manager job description
 
140917運用管理勉強会job scheduler
140917運用管理勉強会job scheduler140917運用管理勉強会job scheduler
140917運用管理勉強会job scheduler
 
JobSchedulerアップデート2016
JobSchedulerアップデート2016JobSchedulerアップデート2016
JobSchedulerアップデート2016
 
7 Ways to Enrich Email Marketing with Predictive Intelligence
7 Ways to Enrich Email Marketing with Predictive Intelligence7 Ways to Enrich Email Marketing with Predictive Intelligence
7 Ways to Enrich Email Marketing with Predictive Intelligence
 
Perfect competition
Perfect competitionPerfect competition
Perfect competition
 
Cartier
CartierCartier
Cartier
 
Simple Mail Transfer Protocol
Simple Mail Transfer ProtocolSimple Mail Transfer Protocol
Simple Mail Transfer Protocol
 
Smtp
SmtpSmtp
Smtp
 
Email Marketing Ppt Presentation
Email Marketing Ppt PresentationEmail Marketing Ppt Presentation
Email Marketing Ppt Presentation
 
Email Marketing Presentation
Email Marketing PresentationEmail Marketing Presentation
Email Marketing Presentation
 
Marketing strategy ppt slides
Marketing strategy ppt slidesMarketing strategy ppt slides
Marketing strategy ppt slides
 
Job interview slide show
Job interview slide showJob interview slide show
Job interview slide show
 
Creative Message Strategies
Creative Message StrategiesCreative Message Strategies
Creative Message Strategies
 
Marketing Strategy of Nestle ppt
Marketing Strategy of Nestle pptMarketing Strategy of Nestle ppt
Marketing Strategy of Nestle ppt
 
Email Marketing 101: Strategy
Email Marketing 101: StrategyEmail Marketing 101: Strategy
Email Marketing 101: Strategy
 
Online Marketing PPT
Online Marketing PPTOnline Marketing PPT
Online Marketing PPT
 
JMS Providers Overview
JMS Providers OverviewJMS Providers Overview
JMS Providers Overview
 
Marketing - Definition & Importance, Concepts & Marketing Management Tasks
Marketing - Definition & Importance, Concepts & Marketing Management TasksMarketing - Definition & Importance, Concepts & Marketing Management Tasks
Marketing - Definition & Importance, Concepts & Marketing Management Tasks
 
Marketing Strategy
Marketing StrategyMarketing Strategy
Marketing Strategy
 

Similar a 尚观Linux研究室 linux驱动程序全解析

unix toolbox 中文版
unix toolbox 中文版unix toolbox 中文版
unix toolbox 中文版Jie Bao
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linuxYiwei Ma
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)Yiwei Ma
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guidephantoxe
 
Apache安装配置mod security
Apache安装配置mod securityApache安装配置mod security
Apache安装配置mod securityHuang Toby
 
Aisanux安装光盘分析
Aisanux安装光盘分析Aisanux安装光盘分析
Aisanux安装光盘分析Guangyao Cheng
 
Linux系统工程师教程
Linux系统工程师教程Linux系统工程师教程
Linux系统工程师教程yiditushe
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 Lheima911
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解zzc89522
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)Timothy Chen
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Yiwei Ma
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建Liyang Tang
 
Linux 期末報告
Linux 期末報告Linux 期末報告
Linux 期末報告米米 林
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)acqua young
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档xuebao_zx
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介Kito Cheng
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂imShining @DevCamp
 
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security建融 黃
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理Jason Zheng
 

Similar a 尚观Linux研究室 linux驱动程序全解析 (20)

unix toolbox 中文版
unix toolbox 中文版unix toolbox 中文版
unix toolbox 中文版
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
 
康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)康盛创想项目部Linux 服务器部署标准(最新版)
康盛创想项目部Linux 服务器部署标准(最新版)
 
S3C44B0 User Guide
S3C44B0 User GuideS3C44B0 User Guide
S3C44B0 User Guide
 
Apache安装配置mod security
Apache安装配置mod securityApache安装配置mod security
Apache安装配置mod security
 
Aisanux安装光盘分析
Aisanux安装光盘分析Aisanux安装光盘分析
Aisanux安装光盘分析
 
Linux系统工程师教程
Linux系统工程师教程Linux系统工程师教程
Linux系统工程师教程
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
 
LinuxGuide4F2E
LinuxGuide4F2ELinuxGuide4F2E
LinuxGuide4F2E
 
Linux 期末報告
Linux 期末報告Linux 期末報告
Linux 期末報告
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
20030623 linuxbasic and-security
20030623 linuxbasic and-security20030623 linuxbasic and-security
20030623 linuxbasic and-security
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 

尚观Linux研究室 linux驱动程序全解析

  • 1. 尚观 Linux 研究室 - Linux 驱动程序全解析 V2 版 2006 尚观 Linux 研究室 - Linux 驱动程序全解析之块设备的驱动及网络驱动的配置 IDE 硬盘及光驱的设置、 刻录机的使用,以及如何安装 SCSI 硬盘驱动。 IDE 然后我们将为大 家介绍,以太网卡驱动模块的加载及网络接口的启功过程,如何调整网卡的参数 , Modem、ADSL 及宽带的驱动安装,怎样 PPP 连接的设置等内容。 1、 尚观 Linux 研究室 - Linux 驱动程序全解析之 IDE 硬盘及光驱 1. IDE 设备的驱动过程 操作系统首先是安装在块设备上,没有对块设备的支持,我们的系统就无法启动,所以我 们首先介绍常见块设备的安装。硬盘就是最常见的块设备,在普通 PC 上的硬盘通常是 IDE 接口的,而服务器上的硬盘通常是 SCSI 接口的。一般内核中内置对通用 IDE 控制芯片的支 持。让我们来看一下 IDE 硬盘在内核中的驱动过程, dmesg 命令可以看到内核在启功和加 载内核模块时的信息: # dmesg | less 我们可以看见,在 Linux 内核启动过程中,我们可以发现内核首先驱动初始化 CPU,内存, 系统时钟部分,接着加载 PCI 总线的驱动。然后就加载了通用的 IDE 驱动程序: Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4 接着初始化 IDE 的控制器,我的 IDE 控制器集成在 Intel 的 ICH4 南桥芯片组中, IDE 控制 芯片驱动加载后,进行初始化传输模式: ICH4: chipset revision 1 ICH4: not 100% native mode: will probe irqs later ide0: BM-DMA at 0xbfa0-0xbfa7, BIOS settings: hda:DMA, hdb:pio
  • 2. ide1: BM-DMA at 0xbfa8-0xbfaf, BIOS settings: hdc:DMA, hdd:pio 该驱动程序会向核心中注册主设备号为 3 的 block 型设备。我们可以看到在 IDE 控制器初始 化时,占用的 IO 资源及分配给它的中断号: ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 ide1 at 0x170-0x177,0x376 on irq 15 接着使用 IDE 控制器查找连接在 IDE 接口上的设备,如果检查到硬盘则加载 ide 硬盘的驱 动 程 序 , 设 置 了 该 硬 盘 的 基 本 参 数 , 设 置 传 输 方 式 为 UDMA ( 100 ) , 也 就 是 ATA100(100M/S 的传输速度),并且根据这个驱动程序检测硬盘上的分区: hda: attached ide-disk driver. hda: host protected area => 1 hda: 78140160 sectors (40008 MB) w/7898KiB Cache, CHS=4864/255/63, UDMA(100) ide-floppy driver 0.99.newide Partition check: hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 hda8 hda9 > /dev/hda 代 表 第 一 个 IDE 接 口 的 主 设 备 , 可 以 看 到 他 的 设 备 号 为 block ( 3/0 ) , 而 /dev/hda1 是这块硬盘的第一个分区,设备编号是 block ( 3/1 ) , /dev/hdb 代表第一个 IDE 接口的从设备,设备编号为 block(3/64)。所以我们可以看到,内核默认可以支持 1- 63 个分区,其中第一个逻辑分区的编号肯定为 /dev/hda5。但是我们在 /dev 目录下查找有 hda1-hda32,共 32 个分区文件,如果我们需要更多的分区,就需要使用 mknod 命令来 创建更多的设备文件(见第一节)。 /dev/hdc 是第二个 IDE 接口的主设备,/dev/hdd 是第二个 IDE 接口的从设备。 2. 安装、升级常见的 IDE 驱动程序 通用的 IDE 控制器可以通过内核这样加载起来,如果我们遇到一些较新的芯片组,当前的 内核无法完全发挥出新硬件的性能,我们就要向内核中打补丁了,如 2.4.20-8 的内核就无 法支持 VIA VT8237 芯片组中的 IDE ATA133 方式,需要向一些内核中打补丁,先到 VIA 的
  • 3. 网站上下载相关补丁,网址为 http://www.viaarena.com/?PageID=297#ATA ,注意要选择 适合当前自己内核的驱动,接下来是升级内核给内核打补丁的过程。 # rpm -ivh kernel-source-<Kernel Version>.i386.rpm 安装需要版本的源代码包 把刚才链接中的补丁下载,将这个 patch 文件解开 # tar xzvf VIA IDE ATA133 Patch 8237 ver0.8.gz 进入解包出来的目录,将需要的 patch 文件 cp 到 /usr/src 目录 # cp <Linux OS>-patch-<Kernel Version> /usr/src ( Kernel Version 代表内核的版本号,Linux OS 代表不同的 Linux 系统) # cd /usr/src # patch -p0 < XXX-patch-XXX 将 patch 打入内核中 重新编译内核: # cd /usr/src/Linux-<Kernel Version> 编辑 Makefile 文件,把 "EXTRAVERSION=" 改成 "EXTRAVERSION=-test",这是给新的 内核命名。 # cp /boot/config-XXX .config # make menuconfig ( config 或 xconfig 也可以 ) 确 定 "ATA/IDE/MFM/RLL support/IDE,ATA and ATAPI Block devices" 中 的 "VIA82CXXX chipset support"被选中, 开始编译内核 # make dep (2.6 内核已经不需要了) # make clean # make bzImage
  • 4. # make modules # make modules_install 2.6 内核中直接可以执行 make install 不用再执行以下斜体部分的步骤了 # cp arch/i386/boot/bzImage (或 vmlinuz-test) /boot/vmlinuz-test # cp /boot/initrd-< Kernel Version >.img /boot/initrd-test.img 编辑 /boot/grub/grub.conf 文件,在最后添加三行 title Linux-test kernel /boot/vmlinuz-test ro root=/dev/hda1 initrd /boot/initrd-test.img 重新启动系统,使用刚刚编译的内核,你会发现启动信息中多出一行“Linux-test” 留意启动时的信息,你会发现有一行信息: "VP_IDE: VIA vt8237 (rev 00) IDE UDMA133 Controller on pci00:0f.1" 如果正常启动,各种服务都没有问题,以后就可以用这个新的内核了,我们可以用以下的 命令来调整硬盘的传输方式: # hdparm –i 检查硬盘目前的传输模式 /dev/hda: Model=IC25N040ATCS05-0, FwRev=CS4OA63A, SerialNo=CLP429F4HALVPA Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=DualPortCache, BuffSize=7898kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78140160 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4
  • 5. DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 这里显示所支持的硬盘 传输模式 AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled Drive conforms to: ATA/ATAPI-5 T13 1321D revision 3:  signifies the current active mo 查看一下当前硬盘的工作模式,如果不是 ATA133,可以灵活使用控制硬盘传输模式的命 令: # hdparm -d1 /dev/hda ( enable DMA 模式 ) # hdparm -d0 /dev/hda ( disable DMA 模式 ) # hdparm -X70 /dev/hda ( 将传输模式切换到 UDMA 6 -ATA133 模式 ) -X 后数字 16~18 代表 SDMA 0~2, 32~34 代表 MDMA 0~2, 64~70 代表 UDMA 0~6. 将最后一行加入到 /etc/rc.d/rc.sysinit 或 /etc/rc.d/rc.local 文件中,可以让硬盘每次启动都 工作在 ATA133 下。 3.安装 nforce 芯片组的驱动程序 针对 AMD64 平台的 nforce 系列芯片组性能强劲,我们虽然可以用常规的方法加以驱动, 但有可能无法发挥新设备的特性,或着该芯片组的网卡、声卡无法使用,NVIDIA 提供了更 方便的 rpm 文件供我们使用,其中一些是源代码 tar 文件,需要进行编译,而有些是 rpm 包 , 直 接 进 行 安 装 就 可 以 了 , 如 下 为 nforce 芯 片 组 在 Linux 下 驱 动 的 下 载 地 址 : http://www.nvidia.com/object/Linux_nforce_1.0-0275.html,其中包含了对内核的补丁,芯 片组中对网卡及声卡的驱动程序,大家可以通过下载经过编译的 rpm 包直接安装: # rpm –ivh NVIDIA_nforce.athlon.rpm 如果你不是 SuSE 或 RedHat 系统,也可以下载带有源代码的 .src.rpm 包经过编译后再安
  • 6. 装: # rpm -ivh NVIDIA_nforce.src.rpm 这部是将驱动程序的源程序文件安装到系统中 # cd /usr/src/redhat/SPECS # rpmbuild -bb NVIDIA_nforce.specs 编译源驱动程序,编译成可直接使用的 rpm 文件 # cd /usr/src/redhat/RPM/i386/ 根据具体包的不同,也可能是 i686,noarch 等 这里有一个新的 rpm 包,这个是编译好的二进制文件 # rpm -ivh NVIDIA_nforce.i386.rpm 程序将自动安装包内的驱动程序,并利用rpm包中的脚本自动做配置。 二、尚观Linux研究室 - Linux驱动程序全解析之光驱的驱动及刻录机的使用 1.光驱的驱动过程:在我们编译内核时,在ATA/IDE/MFM/RLL 菜单中,都会有 IDE/ATAPI CDROM support的选项,通常我们所见到的内核,都将这个部分编译在了内核 中,所以我们不需设置,光驱就可以使用了,让我们看一下是系统启动时,光驱是如何驱 动的: # dmesg |grep CD hdc: HL-DT-STCD-RW/DVD-ROM GCC-4240N, ATAPI CD/DVD-ROM drive Uniform CD-ROM driver Revision: 3.12 一般的通用 CD/DVD-ROM 驱动程序就可以将我们的光驱驱动起来,不需要特别的配置, 如果我们遇到的是 SCSI 的光驱,一般的内核也可以驱动,因为在编译内核时,一般会将 SCSI 的内容编译出来,如果没有 SCSI 的光驱驱动,我们可以自己手动编译,make menuconfig(或 xconfig)时在 SCSI support 菜单中,只要将 SCSI support 设置为 Y 或者 M( Y 代表该部分编译在内核中,M 表示该部分编译为内核模块),SCSI CD-ROM
  • 7. support 设置为 Y 或者 M,SCSI generic support 设置为 Y 或者 M,这样就可以了驱动 SCSI 接口的光驱了。 3. CD/DVD 刻录机的驱动及使用 2.6内核与以下2.4内核不相同,已经可以直接跳过 ide-scsi模块的使用 但是随着 CD 或 DVD 刻录机的普及,我们该如何在 Linux 下使用内置的 CD 或 DVD 刻录机 呢 ?默 认的 情况 下, 我们 的系 统会 将我 们的 刻录 机视 作只 读的 驱动 器, 加载 普通 的 CD/DVD-ROM 驱动,这时我们的光驱无法写入。我们需要用 ide-scsi 伪设备驱动程序来驱 动刻录机,将普通的 IDE 接口的设备模拟成一个 SCSI 接口的设备,这时才能向其中刻录。 我们可以使用三种方式来实现将 IDE 光驱模拟为 SCSI 光驱,假设我们使用 grub 作为 bootloader ,我们的刻录机安装在第二个 IDE 接口,是主设备,则它默认应该为 /dev/hdc : 第一种方法是更改/boot/grub/grub.conf 文件,在 kernel /boot/vmlinuz-2.XXX ro root=/dev/hda1 之后添加 hdc=ide-scsi 即:kernel /boot/vmlinuz-2.XXX ro root=/dev/hda1 hdc=ide-scsi 第二种方法是更改 /etc/modules.conf 文件,添加两行 ide-cd ignore="hdc" ide-scsi 第三种方法是直接编译内核,不编译 ATA/IDE/MFM/RLL 菜单中的 IDE/ATAPI CDROM suppor 部分,但是要编译对 SCSI 光驱的支持 这三种方法都是不希望系统用自带的普通的 CD/DVD-ROM 驱动程序去驱动刻录机,希望 将刻录机模拟成一个 SCSI 设备,其中第一种最简单,成功后我们可以通过以下命令来刻 录 CD 或 DVD 光盘了。 # mkisofs -Jv -V examplecd -o example.iso /root/
  • 8. 将 /root/ 目 录 下 的 文 件 做 成 一 个 名 叫 example.iso 的 光 盘 镜 像 文 件 , 该 文 件 的 卷 标 为 examplecd 还可通过命令 # mkdir /mnt/iso # mount –t iso9660 –o loop example.iso /mnt/iso 将该文件加载到/mnt/iso 文件夹中,可以自由添加删除镜像中的文件,但要注意不要超过 光盘的容量 在调整完/mnt/iso 文件的内容后 # umount /mnt/iso 最后使用 cdrecord 命令来刻录: # cdrecord –scanbus 查看 SCSI 总线中刻录机的配置信息: Cdrecord 2.0 (i686-pc-Linux-gnu) Copyright (C) 1995-2002 Jörg Schilling Linux sg driver version: 3.1.25 Using libscg version 'schily-0.7' cdrecord: Warning: using inofficial libscg transport code version (schily - Red Hat-scsi-Linux-sg.c-1.75-RH '@(#)scsi-Linux-sg.c 1.75 02/10/21 Copyright 1997 J. Schilling'). scsibus0: 0,0,0 0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM 0,1,0 1) * 0,2,0 2) * 0,3,0 3) * 0,4,0 4) *
  • 9. 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * 我们可以看到目前的光驱在 SCSI 总线的参数,然后根据参数来输入下面的命令刻录光盘: # cdrecord -v -eject speed=24 dev=0,0,0 example.iso speed=24 是以 24 速来刻录光盘,dev=后加上刚才显示的刻录机的 SCSI 参数 3、 SCSI 设备驱动过程: 我们以 Adaptec SCSI RAID 3200S 卡为例,介绍 SCSI RAID 卡的驱动过程,这是常见的 带 RAID 功能的 SCSI 卡。在大部分编译好的内核中,都会编译对 SCSI 设备的支持,但是 需要知道,内核中只是支持通用的 SCSI 总线,而具体的 SCSI 卡还需要加载相应的驱动程 序,SCSI 芯片的驱动的安装比较特殊,我们分成两种情况来叙述: 第一种情况是,我们本身 Linux 系统的启动文件就是在 SCSI 硬盘上的,这种情况下 SCSI 设备的驱动程序不能像普通的驱动程序来安装,因为如果系统启动时没有加载 SCSI 卡的驱动程序,那么根本无法访问其他的 Linux 系统文件,所以我们必须在内核启动后立 刻就加载该设备的驱动程序,以下是 Red Hat 系统中具体的安装过程。 (1) 我们从 Adaptec 网站上下载 Adaptec SCSI RAID 3200S 卡针对 Red Hat 9 的驱动 程序: http://www.adaptec.com/worldwide/support/driverdetail.jsp? sess=no&language=English+US&cat=/Product/ASR-3200S&filekey=dpt_i20-drv_2.5.0- rh9-i686.img 大家可以看到是一个 .img 的镜像文件 (2) 将该镜像文件写入软盘中: Linux 下可以用一下命令: # dd if=dpt_i20-drv_2.5.0-rh9-i686.img of=/dev/fd0 或者
  • 10. # cat dpt_i20-drv_2.5.0-rh9-i686.img > /dev/fd0 在 windows 下利用 Red Hat 第一张安装光盘中的 /CDROM/dosutils/rawrite.exe 程 序 (3) 在启动 Red Hat 安装过程时,boot 提示符出现时,进入以下安装模式: boot: Linux dd 表示安装时需要 driver disk (4) 按照向导提示,将刚才制作的驱动软盘插入。以后的安装过程就没有什么不同了。安 装向导实际上将软盘上的驱动程序放到了 initrd 的 ramdisk (内存磁盘镜像)文件 中,每次内核启动后,都最先加载这个内存虚拟硬盘的镜像,利用里面的 SCSI 驱 动程序来驱动 SCSI RAID 卡和卡上连接的硬盘。 第二种情况是我们的系统已经存在了,比如已经安装到了一个 IDE 的硬盘上,我们需要驱 动 SCSI 卡,这种情况就跟其他的驱动程序没有太大的区别,用 modprobe 命令或者 insmod 命令将 SCSI 卡的驱动模块,加载到内存中,如: (1) # lspci -v | grep -i i2o 查看系统是否能访问到这个 PCI 设备 (2) 从 Adaptec 网站上下载驱动程序: http://www.adaptec.com/worldwide/support/driverdetail.jsp? sess=no&language=English+US&cat=/Product/ASR-3200S&filekey=dpt_i20- drv_2.5.0-rh9.rpm # rpm –ivh dpt_i20-drv_2.5.0-rh9.rpm # modprobe dpt_i2o 检验是否可以加载模块,如果没有问题 (3) 看看是否可以访问 /dev/sda 设备或着已经创建好的 /dev/md0 设备 4、 尚观 Linux 研究室 - Linux 驱动程序全解析之以太网卡驱动模块的加载及网络接口的启 功过程,网卡参数的调整
  • 11. 1.以太网卡的驱动过程 处理网络方面任务是 Linux 长项,在仅仅一两兆的 Linux 内核中就可以对 TCP/IP 的很好支 持,一般网络应用中 Linux 的效率要高于 Windows 系统,而且有很好的易用性。那么我们 如何驱动网络的设备呢?我们首先了解一下最常见的网络设备——以太网卡的驱动过程。 在内核加载后,虽然已经有了对 TCP/IP 协议的支持,但是具体的网络接口设备的驱动并 没有加载。在内核启动后,将硬盘上的根分区 mount 到系统中,我们的系统会查找模块配 置文件/etc/modules.conf,并按照该文件记录的内容来加载模块,以下是这个文件的内容: # cat /etc/modules.conf alias eth0 8139too alias sound-slot-0 i810_audio post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || : pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || : alias usb-controller usb-uhci alias usb-controller1 ehci-hcd 表示加载 8139too 模块,我的网卡是 8139 的百兆以太网芯片,并将该模块取别名叫做 eth0,这表示第一个以太网的网络接口,我们以后只要访问 eth0,就是访问这块网卡。然 后系统会在 /lib/modules/2.4XXX/ 的 modules.deps 中查找该模块的具体位置: # grep 8139too /lib/modules/2.4.21-4.EL/modules.dep /lib/modules/2.XXX/kernel/drivers/net/8139too.o: /lib/modules/2.4.21-4.EL/kernel/drivers/net/mii.o /lib/modules/2.4.21-4.EL/kernel/lib/crc32.o 以上内容在同一行中,表示 8139too 模块依存于 mii 模块和 crc32 模块,8139too 模块的具 体位置在 /lib/modules/2.XXX/kernel/drivers/net/8139too.o,所有系统内置的网络驱动程序 都在/lib/modules/2.XXX/kernel/drivers/net 目录下。
  • 12. 在驱动模块加载完成之后,可以直接通过命令 ifconfig 来设置网卡的 IP 地址,: # ifconfig eth0 192.168.1.1 这样设置的 IP 地址重启后就会失效,使用 netconfig 命令可以永久更改 IP 地址: # netconfig # service network restart 或者 # /etc/rc.d/init.d/network restart` 那么系统每次启动时是怎样配置网络的呢?在 Linux 系统中网络作为一项服务被加载,配 置文件是/etc/rc.d/init.d/network,在该文件中我们可以看到系统启动网络接口,绑定 IP 地 址,设定静态路由的过程,这个文件通过调用/etc/sysconfig/network-scripts/ifcfg-*的几个 文件来配置各个网卡的 IP 地址,比如我们有 eth0,则会生成一个文件 ifcfg-eth0,系统每 次启动时自动绑定 eth0 的 IP 地址: # cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=192.168.0.1 NETMASK=255.255.255.0 TYPE=Ethernet 以上就是为 eth0 设备绑定了 192.168.0.1 的 IP 地址 # cat /etc/sysconfig/network-scripts/ifcfg-eth0:1 DEVICE=eth0:1 ONBOOT=yes BOOTPROTO=none IPADDR=192.168.1.1
  • 13. NETMASK=255.255.255.0 TYPE=Ethernet 以上的 ifcfg-eth0:1 文件为 eth0 设定了第二个 IP 地址,192.168.1.1 的 IP 地址,这个文件 是我自己添加的,注意 DEVICE=eth0:1 跟上一个文件是不一样的。 2.尚观 Linux 研究室 - Linux 驱动程序全解析之安装 3COM 3CR990 网卡的驱动程序 注意在 2.6 内核中,所有模块都以 .ko 结尾 我们可以看到系统内置的网卡驱动程序在 /lib/modules/2.4.XXX/kernel/drivers/net 目录下, 如果你的网卡不在默认支持的硬件中,我们可以用以下方法来安装网卡驱动: 比如我们刚刚得到一块 3COM 3CR990 网卡,我们可以到 3COM 网站上下载针对 2.4 内核 的驱动:http://support.3com.com/infodeli/tools/nic/Linux/3c990-1.0.0a.tar.gz 。然后用 #t tar xvfz 3c990-1.0.0a.tar.gz 解压缩下载的文档,到解开的目录中 # make 当前文件下将会生成 3c990.o 的驱动模块 # modprobe ./3c990.o 看 一 下 模 块 是 否 可 以 被 正 常 加 载 , 如 果 没 有 问 题 , 更 改 /etc/modules.conf 文 件 /lib/modules/2.XXX/modules.dep 文件,让你的模块每次启动时加载: # echo “alias eth0 3c990” >> /etc/modules.conf # cp ./3c990.o /lib/modules/2.XXX/kernel/drivers/net # echo “/lib/modules/2.XXX/kernel/drivers/net/3c990.o:” >> /lib/modules/2.XXX/modules.deps 3.调整以太网卡的参数: 有时我们在加载完网卡的驱动后,如果网卡的状态不正确,比如我们驱动起一块网卡,但 是它在 100M 的速度上工作很不稳定,我们可以使用 mii-tool 命令来调整以太网卡的属性, 目前多数以太网卡为 10BaseT 与 100BaseTx 的 10M/100M 自适应网卡,也有较新的支持 1000BaseT 的千兆以太网卡。大家可以看 mii-tool 命令的一些用法: # mii-tool
  • 14. eth0: negotiated 100baseTx-FD flow-control, link ok 显示当前网卡所使用的以太网类型,目前这块网卡使用的是, 100baseTx 的全双工工作方 式。 # mii-tool -v eth0: negotiated 100baseTx-FD flow-control, link ok product info: vendor 00:08:18, model 22 rev 2 basic mode: autonegotiation enabled basic status: autonegotiation complete, link ok capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control 显示当前的网卡支持的所有以太网类型。 # mii-tool -F 10baseT-FD eth0 强制 eth0 使用 10baseT-FD 的方式(10M 全双工的方式)工作 # mii-tool -R resetting the transceiver... 解除 eth0 的强制状态,让 eth0 自动侦测使用什么方式通讯。 五、尚观 Linux 研究室 - Linux 驱动程序全解析之 Modem 及 ADSL 的驱动安装,PPP 连接 的设置 1.外置 Modem 的驱动程序安装: Modem 分为外置和内置两种,比较而言,外置的 Modem 配置较容易,使用非常方便 。 Modem 一般接在串口上,我们知道在 Linux 中,串口对应的设备文件为 /dev/ttyS*,如果 是 COM1 口,则对应 /dev/ttyS0。如果不知道连接的是哪一个 COM 口,可以先给 Modem 加电,用以下命令:
  • 15. # echo AT > /dev/ttyS0 如果 Modem 的 TR 灯亮,则该 Modem 接到 COM1 口上。如果不亮,再试一下 /dev/ttyS1 文件。 知道了 Modem 连接的是哪一个串口后,就可以拨号了,拨号的过程实际上是通过 Modem 建立 PPP(点对点通讯协议)的连接。 在命令行下,我们可以使用 pppd 来进行拨号,常见的 Linux 系统中会安装这个拨号程序, 大家可以看一下在 /etc/ppp 目录下是否有相关的脚本文件,如果没有可以下载并安装 ppp 的包 ftp://cs.anu.edu.au/pub/software/ppp : 将包安装后,大家可以查找 ppp-on 和 ppp-on-dialer 文件,把文件复制到 /etc/ppp 文件夹 下,在其中修改 ppp-on 文件的如下几个地方: TELEPHONE=270 ISP 提 供 的 上 网 电 话 号 码 ACCOUNT=user ISP 提 供 的 账 号 名 称 PASSWORD=123 登 录 密 码 LOCAL_IP=0.0.0.0 PPP 连接的 IP 地址, 0.0.0.0 表 示 由 ISP 动 态 分 配 REMOTE_IP=0.0.0.0 远 端 IP 地 址 , 一 般 为 0.0.0.0 NETMASK=255.255.255.0 export TELEPHONE ACCOUNT PASSWORD DIALER_SCRIPT=/etc/ppp/ppp-on-dialer 查找另一个必须的配置脚本 exec /usr/sbin/pppd lock modem crtscts /dev/ttyS0 115200 设置 COM 口,及速度 asyncmap 0 kdebug 4 $LOCAL_IP:$REMOTE_IP noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT& 将这个文件加上执行权限: # chmod 700 ppp-on # ./ppp-on
  • 16. 就可以拨号上网了,这种方法可以适用于多数的 Linux 系统,如果是 Red Hat Linux,我们 可以使用 redhat-config-network 命令轻松的在文本界面上配置拨号连接,如图 1。 图 1 文本界面下的 redhat-config-network 如果我启动了 X-window,gnome 与 kde 都自带图形界面的拨号程序。 2.内置 Modem 驱动程序的安装: 内置 Modem 比起外置的 Modem 来要更麻烦一些,我们来安装 Dell D600 笔记本的内置 Modem 的 驱 动 程 序 。 首 先 我 们 下 载 该 驱 动 http://www.Linuxant.com/drivers/hsf/full/downloads.php ,选定适合自己系统内核版本的 驱动程序,下载后是一个 rpm 包: # rpm -ivh hsfmodem-6.03.00lnxt04061800full_k2.4.21_4.EL-1rh.i686.rpm …… Config for modem unit 0: /dev/ttySHSF0 Device instance: 0-PCI-8086:24c6-14f1:5422 HW revision : CXT22 HW profile name: hsfmc97ich
  • 17. Registration ID: 115C-247C-BFC0 License owner : unknown License key : FREE License status : FREE (max 14.4kbps data only) Current region : CHINA (T.35 code: 0026) The /dev/modem alias (symlink) points to /dev/ttySHSF0 …… 我们可以看到,安装程序自动建立了一个设备文件 /dev/ttySHSF0 ,并且为它创建了名叫/ dev/modem 的软链接文件,这个文件与其他的 ttyS 文件的类型是不同的: # ls /dev/ttyS0 -l crw-rw---- 1 root uucp 4, 64 Sep 15 2003 /dev/ttyS # ls /dev/ttySHSF0 -l crw-rw-rw- 1 root root 240, 64 Jun 29 02:36 /dev/ttySHSF0 我们可以看到,实际上 /dev/ttySHSF0 文件不是标准的 COM 口,是该驱动程序自己注册 的 240 类型的驱动程序。 实际上,驱动内置 modem 的过程是先加载驱动程序,模拟一个 ttyS 的串口设备文件,然 后我们像在普通外置 Modem 建立 PPP 链接那样,来为内置的 Modem 一样的步骤建立拨 号连接,不过这时要选定 /dev/modem 来作为设备文件。 3.ADSL 及宽带连接驱动过程: ADSL 设备通常是通过我们的以太网卡来拨号,建立 PPP 链接,这时的 PPP 协议叫做 PPPoE ,就是 PPP over Ethernet (在以太网上的点对点通讯协议),一般我们不需要任 何 ADSL modem 的驱动,只需直接建立 PPPoE 的连接就可以了,在命令行下,我们可以 下载 ADSL 拨号程序 rp-pppoe ,可以通过 Linuxsir 下载: http://www.Linuxsir.org/postnuke/modules.php? op=modload&name=Downloads&file=index&req=getit&lid=242 或 直 接 下 载 rpm 包 :
  • 18. http://www.neweasier.com/software.html?class=4 ,配置起来非常简单,下载包解开后, 直接运行: # ./go 运行解压缩出文件夹中的 go 文件后,将会出现的 PPPoE 配置向导,会提示你输入用户名 和密码,然后使用以下命令可以让你建立起连接: # adsl-start 或者 # ifup ppp0 系统中会在配置完后出现一个 SysV 的服务: # chkconfig --list adsl adsl 0:off 1:off 2:off 3:off 4:off 5:off 6:off # chkconfig adsl on 可以在每次启动时启动 ADSL 拨号 如果不用 rp-pppoe 的向导,我们也可以在 X-window 中直接使用如下命令: #neat 或 #redhat-config-network 如图 2
  • 19. 图 2 X Window 中运行网络配置工具 这两个命令是在 Red Hat Linux 中的命令,可以在图形界面下,建立 PPPoE 的连接,其他 版本的 Linux 也应该有自己的 ADSL 拨号程序。 图 3 单击建立新连接 单击上面的 New ,建立新连接,如 VPN,eth,ISDN,modem 之类的连接都可以建立, 如下图:
  • 20. 图 4 选择 xDSL 连接,建立 PPPoE 连接 这里的 xDSL 并不是只有 ADSL 等 DSL 的连接,一般的 PPPoE 连接都可以用,比如网通 的 LAN 宽带,点击 Forward,进行下一步
  • 21. 图 5 输入 ADSL 或 LAN 宽带接入的连接信息 将网通或电信提供给你的用户名密码输入,点击下一步。 建立好了链接后,大家会发现在 /etc/sysconfig/network-scripts/ 目录中会出现 ifcfg-ppp0 的文件,你可以通过以下命令 # ifup ppp0 可以让系统通过 ADSL 拨号上网,建立宽带连接,也可以用刚才的向导拨号上网,如图 6:
  • 22. 图 6 建立 PPPoE 连接 先选中 PPP0 再单击上面的 Activate 按钮 有些地方提供 LAN 宽带接入方式也需要进行拨号,如北京的网通 LAN 接入宽带,它实际 使用跟 ADSL 一样的 PPPoE 协议,建立连接时也与 ADSL 的拨号方式一样,也可以用 rp- pppoe 或 redhat-config-network 来建立拨号连接,运行向导时没有区别。 Troubleshooting: 如果在配置网络时出现问题,请遵循以下的步骤检查: (1) ifconfig 看一下网络接口是否启动,IP 地址是否绑定,如果网络接口没有启动,如: PPP0 没有启动,使用命令:ifup ppp0。如果 IP 地址没有绑定,使用命令 ifconfig
  • 23. eth0 192.168.1.1 设置地址。也可以使用命令 netconfig 设置 IP 地址,网关,及 DNS 服务器的地址,然后用 service network restart 来重启网络。 (2) 如果网络接口及 IP 没有问题,但是不能上网,使用 ping 211.XXX 的一个外网地址, 如 果 能 通 , 则 应 该 是 DNS 服 务 器 的 问 题 , 更 改 /etc/resolv.conf 文 件 中 的 nameserver 的地址,换一个能用的 DNS 服务器的地址。 (3) 如果都没有问题就是 ping 不通外网的 IP,使用命令 route –n 看一默认网关是否正 确,如果不正确使用 route del/add 来设置默认网关,使用 netconfig 可以永久更改 默认网关。 总结:从我们在该节中的叙述可以看到,我们遇到的情况可能是千差万别,安装的方式也 是多种多样的,没有统一的方式。但是不论哪一种设备,大家应该首先理解这种设备的驱动 方式,然后再来学习具体的驱动程序。比如内置 Modem,我们需要先将驱动程序装入内核, 模拟一个/dev/ttyS 串口设备,再来建立 PPP 的连接。明白了这个过程,再遇到各种内置的 Modem 我们就能很好应付了。
  • 24. 尚观 Linux 研究室 - Linux 驱动程序全解析之 移动设备的驱动安装 各种数码设备越来越多,而 Linux 在对他们的配置上还没有做到像 Windows 一样方便,很 多人正是因为心爱的数码相机无法在 Linux 下使用,而不得不保留一个 Windows 系统。所 以掌握如优盘、移动硬盘、数码相机等设备在 Linux 下的驱动方法对于熟练使用 Linux 而言 是必备的技能。本节中将会介绍常见 USB、IEEE1394、PCMCIA 等移动设备的驱动概念和安 装技巧,为读者更好地配置和使用这些设备提供帮助。本节将着重介绍 USB 设备。 1、 USB 设备的驱动概述 USB 是 通 用 串 行 总 线 ( Universal Serial Bus ) , 是 在 1994 年 由 Intel 、 NEC 、 微 软 、 Compaq、DEC、IBM 等公司共同提出。USB 的目的在于将众多的接口(串口、并口、PS2 口 等),改为通用的标准。它仅仅使用一个 4 针插头作为标准插头,并通过这个标准接头,连 接各种外设,如鼠标、键盘、游戏手柄、打印机、数码相机等。USB 接口的特点是支持热插拔, 支持单接口上接多个设备,USB 的优点就不再赘述了,我们接下来看看 Linux 对 USB 的支 持。 USB 采用串行方式传输数据, USB1.1 最大数据传输率为 12Mbps,内核版本为 2.4 以上都 可以支持。USB2.0 规范是由 USB1.1 规范演变而来的,它理论上速度较 1.1 提高了 40 倍达 到了 480Mb/s ,但目前常见的 2.0 设备只能达到理论值的一半。 内核版本 2.4.19 开始对 USB2.0 进行支持。 除了内核的版本要对 USB 接口进行支持之外,你还要确定目前的系统是否编译了 USB 的 驱动模块。如果让 Linux 系统支持 USB 设备还需要一些驱动模块才行,我们都知道内置的 驱动程序都在 /lib/modules/2.4XXX/kernel/drivers 目录中,到这个目录中会有 usb 目录及 几个子目录,你可以从中找到以下的几个 USB 关键基础模块: usbcore.o 所有 USB 设备都需要的基本驱动模块 host/ehci-hcd.o USB2.0 设备支持 host/usb-uhci.o Intel VIA 等芯片组 USB 部分的驱动 host/usb-ohci.o Compaq iMac SiS Ali 等非 intel 芯片组 USB 部分的驱动 storage/usb-storage.o USB 接口的存储设备 如移动硬盘、U 盘等用到 hid.o USB 接口的键盘、鼠标等人机交互设备的基础支持
  • 25. 在该目录下还有些具体设备的驱动程序,分别驱动不同设备: # ls -p /lib/modules/2.4.21-4.EL/kernel/drivers/usb/ acm.o CDCEther.o hpusbscsi.o microtek.o rtl8150.o usbcore.o wacom.o audio.o dabusb.o kaweth.o pegasus.o scanner.o usb-midi.o brlvger.o hid.o kbtab.o powermate.o serial/ usbnet.o catc.o host/ mdc800.o printer.o storage/ uss720.o 比如 scanner.o 模块对应的就是 USB 扫描仪的驱动,audio.o 对应 USB 接口的扬声器 驱动。 从上面看来,Linux 对 USB 设备的支持一般分为两个部分,首先通过通用的 usbcore 等模 块驱动 USB 芯片,这样识别出 USB 设备,然后再通过具体的驱动程序驱动该设备。所以常 驻内存的 USB 驱动模块为 usbcore ehci-hcd usb-uhci 等: # lsmod Module Size Used by Not tainted …… hid 22212 0 (unused) input 5888 0 [keybdev mousedev hid] ehci-hcd 20104 0 (unused) usb-uhci 26412 0 (unused) usbcore 79392 1 [hid ehci-hcd usb-uhci] …… 在这些 USB 基础驱动模块已经加载的情况下,我们插入优盘等 USB 设备才能被识别出来, 系统将会自动加载相对应的驱动。如果你插入优盘没有反应,那么可能是这些 USB 基础驱 动没有加载,可以手动通过以下方式加载:
  • 26. # modprobe usbcore # modprobe ehci-hcd # modprobe usb-uhci # modprobe hid (如果是 USB 鼠标或键盘) 二、USB 存储设备的使用,本部分包括 优盘、USB 硬盘、USB 读卡器、部分数码相机等 USB 存储设备使用的非常多,如优盘、移动硬盘、数码相机等,它们都是在加载了 USB 的 通用驱动后,再使用 /lib/modules/2.XXX/kernel/drivers/usb/storage/usb-storage.o 作为存 储的驱动模块,该驱动会将存储设备模拟成 SCSI 设备。需要注意,只有在系统加载上节中 叙述的几种 USB 基础驱动后,该 USB 设备才可以被认出,然后系统会将它们模拟成 SCSI 设备(主要原因是系统允许 SCSI 设备热插拔),如 SCSI 硬盘,SCSI 光驱等,让我们先 来看一下这类设备还需要哪些配套驱动模块,这些模块分散在 /lib/modules/2.XXX/kernel/ drivers 目录中: usb-storage.o USB 对与存储部分的驱动模块 scsi_mod.o 对 SCSI 设备的支持 sd_mod.o 对 SCSI 硬盘支持模块,对于 USB 硬盘 sr_mod.o 对 SCSI 光盘支持模块,USB 光驱需要 sg.o SCSI 序列的通用支持模块 ide-scsi.o 我们在第二节的刻录机部分见过这个模块 它可以把 IDE 设备模拟 SCSI 接口 大家可以通过查看 /lib/modules/2.XXX/modules.dep 文件,来查看这些模块是否存在,一 般情况下这些模块会被编译的,没有的话需要重新编译内核模块了。在正确的装载了驱动后, 我们可以通过访问/dev/sd? 设备来访问优盘或移动硬盘。通常情况下我们访问 sda1 来访问 移动硬盘或优盘的第一个分区,在 USB 基本驱动存在的情况下,我们插入优盘,大家可以 看到如下信息:
  • 27. usb.c: USB device 7 (vend/prod 0xea0/0x6803) is not claimed by any active driver. Starting timer : 0 0 Vendor: Netac Model: OnlyDisk Rev: 1.11 Type: Direct-Access ANSI SCSI revision: 02 Starting timer : 0 0 Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0 SCSI device sda: 32256 512-byte hdwr sectors (17 MB) sda: Write Protect is off 这一段是 usb-storage.o 和 SCSI 的驱动在起作用,我们可以看到,优盘被认成是 sda,要 使用它可以先查看分区表: # fdisk –l /dev/sda Disk /dev/sda: 16 MB, 16515072 bytes 2 heads, 32 sectors/track, 504 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 503 16080 1 FAT12 # mkdir /mnt/usb # mount –t msdos /dev/sda1 /mnt/usb 该优盘得类型为 FAT12 之后我们就可以通过访问 /mnt/usb 来访问我们的优盘了,注意如果要拔掉优盘或移动存储 设备,请先 umount 然后再拔出,这样可以保证数据全部被写入,否则系统会出错,数据 可能不完整。 # umount /mnt/usb 三、USB 数码相机的驱动
  • 28. 数码相机类型繁多,但是在 Linux 下有使用数码相机的简便方法。我们知道 USB 接口是数 码相机的主要接口,通常在 Linux 访问数码相机,我们可以通过两种方法: 1.使用专门软件,如果 Red Hat Linux 中自带的 gtkam,它是一个提供了数码照相机的图形 化界面的程序,支持 100 多种数码相机。 gtkam 直接连接你的数码照相机,允许你直接打 开、查看、并删除图像。在 Red Hat 9 的光盘中,有 gtkam 的 rpm 包: # ls gtkam* gtkam-XXXX.i386.rpm gtkam-gimp-XXXX.i386.rpm # rpm –ivh --aid gtkam* # rpm –ivh --aid --force gphoto2-XXXX.i386.rpm ( gtkam 基于 gphoto ,有时无法使用 gtkam 的原因是 gphoto 没有安装 或模块被覆盖,所以需要重新安装 gphoto) 安装完毕后,在 X 中运行 gtkam 可以看到如下界面: # gtkam
  • 29. 图 1 点击 gtkam 的 camera — Add Camera 来添加数码相机,然后在弹出的窗体中单击 Detect,来测试数码相机的连接类型。点击 OK 就可以看到数码相机中的照片了
  • 30. 图 2 使用 gtkam 连接 Kodak DX6340 相机看到的存储卡中的照片,选择照片,单击保存就 可以把照片保存到硬盘上。 我 们 也 可 以 从 以 下 地 址 获 得 gtkam 的 最 新 版 本 及 源 代 码 , http://sourceforge.net/project/showfiles.php?group_id=8874&release_id=209817 , 下 载 后可以使用其中的 install.sh 来进行安装。 1.另一种方式是把数码相机当做是 USB 存储设备(如优盘、读卡器等)来访问 这样我们可以像访问优盘那样来访问数码相机: # mount –t vfat /dev/sda1 /mnt/usb 但是这种方式极可能遇到不能支持的数码相机,比如我使用的 Kodak DX6340 数码相机, 在插入 USB 口之后出现以下信息。 usb.c: USB device 2 (vend/prod 0x40a/0x570) is not claimed by any active driver. 还好我们有解决的办法,注意这种方法不只可以驱动不支持的数码相机,像不支持的存储 设备都可以使用,比如优盘、读卡器等都可以使用这种方法: a) 首先使用 lsmod 确定 USB 基本驱动模块已经装载,如果没有使用以上的 命令: # modprobe ehci-hcd; modprobe usb-uhci; modprobe usb-storage # modprobe ide-scsi; modprobe scsi_mod; modprobe sd_mod b) 接着使用 cat /proc/bus/usb/devices 得到当前系统 USB 总线上的设备信 息。尤其注意 Vendor、ProdID、Product 等信息: C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=040a ProdID=0570 Rev= 1.00
  • 31. S: Manufacturer=Eastman Kodak Company S: Product=KODAK EasyShare DX6340 Zoom Digital Camera S: SerialNumber=KCKCJ33400274 数码相机也是一种存储设备,然而对于 Linux 下得移动存储设备,我们知道都是通过 usb- storage.o 驱动,然后模拟为 SCSI 设备,这台数码相机无法使用,通常是 usb-storage 驱 动未包括此厂商识别和产品识别信息(在类似 skel_probe 的 USB 最初探测时被屏蔽了)。 对于 USB 存储设备的硬件访问部分,通常是一致的。所以我们要支持它,仅需要修改 usb- storage 中关于厂商识别和产品识别列表部分。 所以我们要注意USB设备识别信息,其中重要的部分是 P: Vendor=040a ProdID=0570 Rev= 1.00 S: Manufacturer=Eastman Kodak Company S: Product=KODAK EasyShare DX6340 Zoom Digital Camera 若/proc/bus/usb 下没有相应 USB 设备信息,应输入以下命令将 USB 设备文件系统手动挂 装到 /proc/bus/usb: # mount -t usbdevfs none /proc/bus/usb c) 编辑 drivers/usb/storage/unusual_devs.h 文件,这里是所有已知的 USB 产品登记列表,格式为 UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, vendor_name, product_name, use_protocol, use_transport, init_function, Flags). Usb-storage.o 就 是 根 据 这 个 列 表 来 识 别 各 种 设 备 , 这 样 我 们 可 以 根 据 刚 才/proc/bus/usb/devices 文件中得出得信息,添加在上面,重新编译模块,这样就可以让 usb-storage 驱动去认识和发现它。
  • 32. UNUSUAL_DEV( 0x040a, 0x0570, 0x0001, 0x0001, "Eastman Kodak Company", "KODAK EasyShare DX6340 Zoom Digital Camera", US_SC_SCSI, US_PR_CB, NULL, US_FL_FIX_INQUIRY | US_FL_START_STOP | US_FL_MODE_XLATE ), 注意:添加以上几句的位置,一定要正确。比较发现, usb-storage 驱动对所有注册都是按 idVendor, idProduct 数值从小到大排列的。我们也要放在相应位置。 d) 重新编译模块,之后插入的数码相机就可以跟其他 U 盘一样作为 USB 存 储设备去访问 # make dep # make modules # make modules_install 四、尚观 Linux 研究室 - Linux 驱动程序全解析之 USB 摄像头的驱动 内核源文件中自带了部分摄像头的驱动,如果你的 USB 摄像头无法使用,可以试试重新编 译模块,目前大量的杂牌摄像头都可以使用 OV511 的驱动模块。如果你刚刚购买了一个 USB 摄像头,没有相关的驱动,让我们来尝试用 OV511 来驱动它: 1. 先从 Red Hat 光盘或 网站 kernel.org 获取当前版本的内核源码,并安装: # rpm –ivh kernel-source-2.XXX.rpm 或 # tar zxvf Linux-2.XXX.tar.gz 2. 到源码目录中运行: # make menuconfig
  • 33. 或 # make xconfig 需要在 X-window 下 3. 选择 USB 的模块,如图 1 所示: 图 3 编译内核,选择 USB support 选择要编译的驱动,可以查看说明书,看看摄像头的芯片是什么型号,如图 2:
  • 34. 图 4 在 USB support 下可以选择多种驱动的模块,比如非常常用的 OV511 芯片的摄像头的 驱动,USB 打印机的驱动等,选定 OV511 摄像头的支持 4. 最后保存,编译模块,并安装模块 # make dep
  • 35. # make modules # make modules_install 5. 加载驱动,使用摄像头: # modprobe ehci-hcd # modprobe usb-uhci # modprobe ov511 cat /proc/devices 接着运行 gnomemeeting 之类的工具,选择 /dev/video0 或/dev/video1 作为摄像头的设备 文件,摄像头就可以使用了。 五、尚观 Linux 研究室 - Linux 驱动程序全解析之外置 USB 光驱及刻录机 USB 光驱与其他的 USB 存储设备使用类似,只不过 USB 光驱会被识别为 SCSI 光驱,如 / dev/sr0 或/dev/scd0 等设备,它需要 sr_mod.o(SCSI CD-ROM 设备)驱动模块。 # modprobe sr_mod (如果 sr_mod 模块没有编译,请重新编译内核,在 SCSI 部分) # mount –t iso9660 /dev/scd0 /mnt/cdrom 外置刻录机的详见使用见第 8 期,Linux 完全驱动 第二节部分: # mkisofs -Jv -V examplecd -o example.iso /root/ 将 /root/ 目 录 下 的 文 件 做 成 一 个 名 叫 example.iso 的 光 盘 镜 像 文 件 , 该 文 件 的 卷 标 为 examplecd 还可通过命令 # mkdir /mnt/iso # mount –t iso9660 –o loop example.iso /mnt/iso 将该文件加载到/mnt/iso 文件夹中,可以自由添加删除镜像中的文件,但要注意不要超过 光盘的容量 在调整完/mnt/iso 文件的内容后
  • 36. # umount /mnt/iso 最后使用 cdrecord 命令来刻录: # cdrecord –scanbus 查看 SCSI 总线中刻录机的配置信息: Cdrecord 2.0 (i686-pc-Linux-gnu) Copyright (C) 1995-2002 Jörg Schilling Linux sg driver version: 3.1.25 Using libscg version 'schily-0.7' cdrecord: Warning: using inofficial libscg transport code version (schily - Red Hat-scsi-Linux-sg.c-1.75-RH '@(#)scsi-Linux-sg.c 1.75 02/10/21 Copyright 1997 J. Schilling'). scsibus0: 0,0,0 0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM 0,1,0 1) * 0,2,0 2) * 0,3,0 3) * 0,4,0 4) * 0,5,0 5) * 0,6,0 6) * 0,7,0 7) * 我们可以看到目前的光驱在 SCSI 总线的参数,然后根据参数来输入下面的命令刻录光盘: # cdrecord -v -eject speed=24 dev=0,0,0 example.iso speed=24 是以 24 速来刻录光盘,dev=后加上刚才显示的刻录机的 SCSI 参数。如果是外 置 DVD ,则应使用命令 dvdrecord ,其用法与 cdrecord 相同,在 Red Hat 安装光盘
  • 37. 中有这个软件。 # rpm -ivh dvdrecord-0.1.2-12.i386.rpm # man dvdrecord 查看帮助 六、USB 鼠标、USB 键盘 如果在 Red Hat Linux 中,大家可以简单使用命令 mouseconfig 来配置鼠标,选择 USB 接 口鼠标就可以了,如图 3: # mouseconfig 图 5 使用 mouseconfig 配置 USB 接口鼠标 如果使用手动的方式来配置,可以人工加入以下模块 # modprobe hid # modprobe input # modprobe usbmouse # modprobe mousedev USB 键盘:
  • 38. # modprobe hid # modprobe input # modprobe usbkbd # modprobe keybdev 七、IEEE1394 设备在 Linux 下的驱动 IEEE1394 又称 Firewire(火线)、i-Link(Sony 的叫法),跟 USB 接口类似,目前可以 提供 400Mb/s 的带宽,虽然理论上较 USB2.0 的 480Mb/s 的速度慢,但是实际使用中 , Firewire 要比 USB2.0 的设备快不少,所以仍然有很多设备如 DV、移动硬盘配备这种接口。 与 USB 相比,Firewire 的通用性不够强,得到的支持较少,一般主板上不带该 Firewire 的 芯片,我们通常是购买带 1394 接口的 PCI 卡来支持 1394 的设备。对于 1394 设备,在内核 2.4.10 之后的版本对它进行支持,IEEE1394 的驱动放在以下位置: # ls /lib/modules/2.XXX/kernel/drivers/ieee1394 amdtp.o dv1394.o ieee1394.o raw1394.o video1394.o cmp.o eth1394.o ohci1394.o sbp2.o 2.6 内核中的内核模块已经使用 .ko 结尾 它的驱动方式较 USB 大同小异,只是首先加载的是对 1394 总线的驱动(ieee1394.o), 和 1394 芯片的驱动( ohci1394.o),如果你使用 1394 卡连接 DV(数字摄像机)那么你 需要 1394 视频驱动( video1394.o )和 DV 视频 I/O 驱动(dv1394.o);如果你需要访问 的是 1394 外接硬盘或 CD-ROM、刻录机等,则需要对 SBP-2 协议的支持(sbp2.o);如 果你使用 1394 接口的以太网卡,需要加载驱动 eth1394.o。 如果没有某种驱动,可以重新编译内核模块,选择以下模块: # cd /usr/src/Linux-2.XXX # make xconfig 选择其中的 IEEE1394 选项,如图 6:
  • 39. 图 6 选择需要的 IEE1394 模块,然后重新编译模块 # make dep # make modules # make modules_install 驱动 1394 接口的硬盘或光驱时,需要预先加载的驱动有 ieee1394.o 和 ohci1394.o: # modprobe ohci1394 将会将两样驱动全装载上,因为 ohci1394 依赖 ieee1394 硬盘需要的驱动是 sbp2.o,插入硬盘后它应该会自动加载,与 USB 设备相同,硬盘会被
  • 40. 模拟成 SCSI 设备,留意屏幕上显示的信息,看看被模拟为 sda 还是其他的设备,我们使 用以下命令来使用硬盘: # mkdir /mnt/1394 # mount –t vfat /dev/sda1 /mnt/1394 如果是 1394 光驱,应该使用设备为 /dev/scd0,如果在插入设备时没有自动加载,试着手 动加载 sbp2 模块及 SCSI 模块: scsi_mod.o 对 SCSI 设备的支持 sd_mod.o 对 SCSI 硬盘支持模块,对应硬盘 sr_mod.o 对 SCSI 光盘支持模块,对应光驱 sg.o SCSI 序列的通用支持模块 与 USB 下相应的设备驱动非常相似,这里就不再叙述了。 各种移动设备层出不穷,花样繁多,国内网站的资料不是很全,使用 google 搜索英文网站, 往往能得到自己需要的东西,以下是使用优盘或 USB 硬盘的常见问题的解决方法: 1. 加载 /dev/sda1 时出错 这是因为较早的优盘不分区,它们使用 /dev/sda ,也有可能是 /dev/sda2 或 sda3 等设备文件,请仔细观察 fdisk –l /dev/sda 的输出结果,看看优盘的分区 到底是哪一个。 2. 主机中已经有 SCSI 设备或 USB 设备,比如 /dev/sda 硬盘,或另一个优盘 这时你可以尝试 sdb sdc 等设备,实际上每一次在插入优盘时可以留意以下屏 幕上显示的信息,那里有该优盘被转换成哪一个 sd 设备了。 3. 优盘插入后没有反应,访问 /dev/sd?设备时也没有反应? 这时你可以查看相关模块是否已经加载,如果没有,手动加载,然后重新插入 你的设备,看看是否有反应: # modprobe ehci-hcd; modprobe usb-uhci; modprobe usb-storage.o # modprobe ide-scsi; modprobe scsi_mod.o; modprobe sd_mod.o
  • 41. 4. 设备驱动已经加载,我怎么知道访问哪个设备文件呢?比如访问摄像头时需要 用到哪个设备文件? 对比加载驱动前和加载驱动后的 /proc/devices 文件,多出哪一行就是这种驱 动程序注册的主设备号,如对比 ov511 加载前后/proc/devices 文件的变化, 你会发现多出如下一行: # cat /proc/devices Character devices: … 81 video_capture … 表 示 C 型 设 备 , 主 设 备 号 为 81 的 设 备 文 件 是 访 问 ov511 驱 动 的 入 口 , 再 对 照 /usr/src/Documentation/devices.txt 中查找 c 类型的主设备号 81 ,就可以知道对应如下 设备文件: 81 char video4Linux 0 = /dev/video0 Video capture/overlay device ... 显示设备的驱动及声卡驱动的安装 图形化的界面能让我们方便的享用 Linux 的强大功能,而且现在 Linux 的图形化界面已经 越来越完善了,我们在 Linux 中使用的图形显示系统是 X - Window ,但是由于与常见的 MS Windows 系统有很大的差异,所以在使用时,即使有时面对的是很小的问题,却不知 才能如何解决,比如无法驱动显卡,显示器参数错误,花屏,图形界面无法启动等。本节中, 我们将首先向大家讲述, X-Window 的概述,如何安装常见显卡的驱动程序,相关的配置 文件,以及参数调整等内容。让大家对 Linux 下显示部分的驱动有较清楚的认识。之后,我 们还会介绍常见的声卡驱动安装方法。 1、 X-Window 的概述
  • 42. X 是一套显示体系,包括 Server 端,Client 端,他们之间使用 X 协议互相通信。X Client 将 希望显示的图形发送到 X Server,X Server 将图形显示在显示器上,同时为 X Client 提供 鼠标键盘的输入服务。因为 C/S 结构,我们可以将 X 的 Server 和 Client 分别运行在两台计 算机上,甚至可以安装一些软件,让 Windows 作为 X Server ,让 Linux 作为 Client ,将 KDE 或 GNOME 等桌面环境显示到 Windows 主机上来,如图: 图 1:让 Windows 作为 X Server 图 1:让 Windows 作为 X Server,我们使用图中的 Xmanager 1.3.9,在 Windows XP 上 运行 了 X Server ,然 后运 行一 台 Linux 主 机下 的 startkde ,将 kde 桌 面环 境显 示在 Windows XP 下。 X 诞生于 1984 年,在较短的时间内 X 发布到了 11 个版本 X11,X11 经过多年的发展,现 在使用的是 X11R6。 我们都知道,使用 startx 命令可以启动 X-Window,实际上,我们是在同一台计算机上同 时运行的 Server 和 Client,在运行 startx 后,首先启动的是 XFree86,它是 Linux 平台最 常用的 X 的 Server 端,然后,又运行 X 的 Client 程序,如 startkde(KDE 的启动脚本)或
  • 43. gnome-session(GNOME 的启动脚本),他们利用 X 协议连接本机的 X Server,将图形 显示出来。 现在我们就知道了,Linux 上最常使用的 X Server 程序就是 XFree86,它的任务是驱动显 示卡、显示器、鼠标、键盘等设备,为 X Client 提供显示服务、输入服务等。XFree86 的主要文 件分别在: /usr/X11R6 XFree86 文 件 所 在 的主要目录 /usr/X11R6/bin XFree86 的可执行程序文件 /usr/X11R6/lib/modules/drivers XFree86 自带的驱动程序所在的目录 # ls /usr/X11R6/lib/modules/drivers 如上所示,其中 *_drv.o 的文件就是各种硬件的驱动程序,如 sis_drv.o 就是 SIS 显卡的驱 动程序文件。 /etc/X11 X 的配置文件及启动脚本所在目录 /etc/X11/XF86Config 或 XF86Config-4 XFree86 的启动配置文件如果两个文件都存在, XF86Config-4 文 件 优 先 , XFree86 自 带 了 一 些 设 备 的 驱 动 , 具 体 位 置 在 /usr/X11R6/lib/modules/drivers,如果你的显示卡太新,无法使用 X-Window ,比如用了 Intel 的 855GM 芯片组中集成的显卡,无法启动 X ,你可以考虑升级 XFree86 ,当前的 XFree86 成熟的版本是 4.3,最新的版本.4.4 正在完善之中。您可以从以下的链接中可获得 4.3 的 XFree86 所支持的所有显卡列表: http://xfree86.Linuxforum.net/4.3.0/RELNOTES2.html#3 XFree86 官方的版本下载网站是 http://www.xfree86.org/downloads.html ,中国的镜像网 站是:http://xfree86.Linuxforum.net/downloads.html 也可以或从中科红旗的网站上下载: http://www.redflag-Linux.com/source/download/XFree86_driver4.3.tgz 以上 tgz 包的安装步骤:
  • 44. # tar zxvf XFree86_driver4.3.tgz 解压缩包 # sh install.sh 运行安装脚本 如果只是希望安装显卡的驱动程序,请看下面。 2、 安装 Intel i865G 芯片组中的显卡驱动 Intel i865G 是一种较新的芯片组,它内置了显示模块,但是在安装较早的 Linux 版本之后, X 有可能无法启动,一种方法是直接升级到 XFree86 4.3,另一种方法是通过 Intel 官方的 网站下载驱动程序: http://downloadfinder.intel.com/scripts-df/support_intel.asp? iid=HPAGE+header_support_download& 在该链接的下载页面下,你可以选择下载 RPM 包,也可以下载 tar.gz 的压缩文档。安装方 式略有不同,经过以下三步可以让显卡在 X 中正常使用,其他的显卡驱动安装大同小异: 第一步,安装驱动程序: 如果你选择下载上面 RPM 包时: # rpm –Uvh --force intelgraphics_20040607_i386.rpm 升级/安装 rpm 包 如果你选择下载的是 tar.gz 压缩包时要执行: # tar xzvf IntelGraphics_060704.tar.gz # cd dripkg # ./install.sh 程序将自动安装,安装程序将更新 /usr/X11R6/modules/drivers/i810_drv.o 的驱动程序, 使其支持新的 i865G 芯片组中的显卡。 第二步 选择驱动程序,共有三种方法可以在配置文件 XF86Config 中,指定正确的驱动程 序: 方法一:如果是 Red Hat 系统则可以运行:
  • 45. # redhat-config-xfree86 图 2 使用 redhat-config-xfree86
  • 46. 图 2 使用 redhat-config-xfree86,这个命令可以自动侦测显卡,让你配置分辨率和色深, 选择 Advanced 页面,然后点击 Video Card 的 Configure 按钮,选择正确的显卡。但是如果 版本在 Red Hat8.0 之前,则没有这个命令,应该运行: # Xconfigurator 程序会一步步提示你,其中选择正确的驱动程序 这两个程序都会将结果写入 /etc/X11/XF86Config 这个配置文件,当然你可以直接更改这 个文件。 方法二:直接更改 XFree86 的配置文件,这种方法在 Linux 系统较通用,不用非要 Red Hat。 # vi /etc/X11/XF86Config 或 XF86Config-4 在其中找到 Section "Device" Identifier "Videocard0"
  • 47. Driver "i810" (将会使用 i810_drv.o的驱动程序) VendorName "Videocard vendor" BoardName "Intel 865" EndSection 将 Driver 后面改为 i810,表示使用 i810_drv.o 驱动程序 该配置文件中其他需要注意的地方: Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Unknown monitor" HorizSync 31.5 - 37.9 VertRefresh 50.0 - 70.0 Option "dpms" EndSection 这个部分是设置你的显示器类型,如果不知道自己的显示器叫什么没关系,但需要将显示 器的垂直刷新率和水平刷新率正确设置,可以查看显示器的说明书,以上是15寸显示器最 常用的频率,如果这个参数设置错误,显示器就会花屏或黑屏。 Section "Screen" Identifier "Screen0" Device "Videocard0" Monitor "Monitor0" DefaultDepth 16 SubSection "Display"
  • 48. Depth 16 Modes "1024x768" "800x600" "640x480" (默认会使用最高的分辨 率) EndSubSection EndSection 这里是设置显示模式的地方,包括屏幕的分辨率,和色深,默认使用最高的分辨率,如果 想使用较低的分辨率,将高分辨率删除就可以了,在这个配置文件中显示器会使 用"1024x768" 的分辨率,色深是16位色。有关XF86Config文件的详解可以看它的man page: # man XF86Config 方法三:让XFree86自己来生成XF86Config文件 运行命令 # XFree86 -configure XFree86 自动侦测显卡及显示器,在用户的主目录下生成一个名叫 XF86Config.new 的文 件 可以以下命令测试这个文件是否正常运行: # XFree86 -xf86config ~/XF86Config.new 这个命令是指定X Server使用 ~/XF86Config.new作为配置文件 看一下是否有白色 X 型的光标显示出来,如果有,就可以按ctl+alt+Backspace结束X, 然后运行下面的命令,用新的配置文件来替换系统配置文件。 # cp ~/XF86Config.new /etc/X11/XF86Config 第三步 启动X 您可以运行 startx 启动X,这种方式依赖于控制台(tty),将X作为当前控制台得Shell的 子进程来运行,也可以运行桌面管理程序: gdm (Gnome 桌面管理程序)
  • 49. 或 kdm (KDE的桌面管理程序) 或 xdm (XFree86的桌面管理程序) 这些方式不依赖于当前的Shell,即使当前Shell关闭,X一样会继续运行。 以上三步是Linux下安装X部分显卡驱动程序的通常步骤,绝大多数显卡都可以经过以上的 步骤正常使用,不同的是下载地址和具体的驱动程序的生成方式可能不一样,最关键是理 解以上每一步的意义。 笔记本上Intel815集成显卡安装方式: 我们从同样从Intel网站上下载815显卡部分的rpm包: http://downloadfinder.intel.com/scripts-df/filter_results.asp?strOSs=39&strTypes=DRV %2CARC&ProductID=797&OSFullName=Linux*&submit=Go%21 # rpm –ivh xfcom_i810-1.2-3.i386(1).rpm 重复以上的第二至第三步: # redhat-config-xfree86 选择正确的驱动程序 # startx 启动X 三、安装其他显卡的驱动 1.GeForce FX 6800显卡驱动安装,包含其他NVIDIA显卡的驱动 如果你购买了GeForce FX 6800显卡,希望玩玩刚刚发布的DOOM3,结果发现X无法启动 了,这时可以去 NVIDIA网站下载最新的驱动了:http://www.nvidia.com/object/Linux.html NVIDIA的Linux驱动程序做得相当精细,下载后得到文件NVIDIA-Linux-x86-1.0-6106- pkg1.run,运行就可以看到一个tui(文本用户界面): # chmod 700 NVIDIA-Linux-x86-1.0-6106-pkg1.run 设置执行权限 # ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run. 运行安装程序 程序将会提示你一步步安装NVIDIA的驱动,该驱动包含两部分,一部分是内核驱动,用于 命令行界面的驱动,在安装这部分时,如果不是它支持的几种内核版本,需要编译内核, 另一部分是针对XFree86的驱动。
  • 50. 运行中常常出现的错误是在编译内核时找不到内核的源文件,可以用以下的方法解决,先 下载安装kernel的源文件: # rpm –ivh kernel-sourceXXX.rpm 在Red Hat的安装光盘上 或者 # tar zxvf Linux-2.XXX.tar.gz 可以从网上下载,如:kernel.org 指定源文件位置: # ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run. --kernel-source-path=<kernel 源文件目录的位 置> 安装驱动程序后,如果有问题,可以参考刚才安装i865显示驱动的方法,来调整显卡的驱 动和参数,运行 redhat-config-xfree86 或 XFree86 –configure 或者直接更改 /etc/X11下的 XF86Config文件。 另外,如果希望直接得到NVIDIA的驱动程序,不想自动安装,可以运行以下命令来将包中 的文件解开。 # ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run –x 在 ./NVIDIA-Linux-x86-1.0-6106-pkg1/usr/share/doc 目录下有一个XF86Config.example 的文件,如果遇到XF86Config文件配置有问题,可以直接查看该文件中的显卡驱动部分内 容。 2.ATI 9800显卡驱动的安装: 从链接 http://www2.ati.com/drivers/Linux/fglrx-4.3.0-3.11.1.i386.rpm 下载 fglrx-4.3.0-3.11.1.i386.rpm文件,然后执行: # rpm -Uvh --force fglrx-4.3.0-3.11.1.i386.rpm 强制升级/安装驱动程序包 注意看看是否有错误发生,如果有注意查看出错的信息是什么。 # fglrxconfig 使用ATI自己的配置工具,配置驱动程序 该程序会提示你回答一些问题,当问到是否创建一个XF86Config-4 文件, 回答y,就可以生 成新的配置文件。
  • 51. # startx 重新启动X # fglrxinfo 可以查看驱动程序是否安装成功 3.常见显卡驱动的下载地址: NVIDIA显卡驱动: http://www.nvidia.com/object/Linux.html ATI显卡驱动: http://www.ati.com/support/driver.html (ATI网站访问速度较慢, 可以多试几次) VIA芯片集成显卡的驱动程序: http://www.viaarena.com/?PageID=296 SIS 显卡驱动程序: http://www.mypcera.com/qu/2/soft1/xsis.rpm Intel 芯片组显卡部分的驱动程序: http://downloadfinder.intel.com/scripts-df/support_intel.asp? iid=HPAGE+header_support_download& Intel 笔记本迅驰显示驱动程序: http://downloadfinder.intel.com/scripts-df/filter_results.asp?strOSs=39&strTypes=DRV %2CARC&ProductID=922&OSFullName=Linux*&submit=Go%21 ATI 系列笔记本驱动程序:升级 XFree86 如果实在找不到驱动程序,试着按照上面的介绍升级 XFree86 到.4.3 或 4.4,它自带如 ATI M9000 笔记本显卡、SIS 显卡等驱动程序。 4.内核支持显示模式调整 在命令行界面下,你可以调整内核的显示模式,让他使用较高分辨率,设置方法如下: 如果使用的是 grub 作为 boot loader 则运行命令: # vi /boot/grub/grub.conf 在 kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/ 行后添加 vga=0x314,这是设置显示模式,
  • 52. vga 是 kernel 的参数,0x314 表示的是 16 进制的 314,换算成 10 进制为 788,所 vga=788 跟与 vga=0x314 是一样的,我们把该行改为: kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/ vga=0x314 你会发现 Linux 启动时显示一个企鹅图标,使用的是 800x600 的分辨率了, vga 的参数意 义如下:    640x480 800x600 1024x768 1280x1024   256 色 0x301 0x303 0x305 0x307   16 位色 0x311 0x314 0x317 0x31A   24 位色 0x312 0x315 0x318 0x31B 如果你使用的是 lilo 作为 boot loader,则在/etc/lilo.conf 文件中将 append 处改为: append=" root=LABEL=/ vga=0x314" 之后运行命令: # lilo –v 使用新的配置文件更新 MBR。 四、尚观 Linux 研究室 - Linux 驱动程序全解析之常见显卡故障的解决 当我们无法启动 X 时,应仔细查看出错信息,以下为 X 启动不成功的常见原因: 1. 当屏幕为全黑或花屏时,应该是显示器参数有误。应先按 ctl+alt+Backspace 结束 X, 查看显示器说明书,在 /etc/X11/XF86Config-4 或 XF86Config 文件中,将水平和垂直 刷新率改成正确的值,或者运行 redhat-config-xfree86 、XFree86 –configure 2. XF86Config 文件损坏,或丢失,运行 redhat-config-xfree86 或者 XFree86 –configure 3. 没有控制台所有权,比如你是以 zorro 用户登陆,然后用命令 su – joan 切换为用户 joan,这时使用 startx 就会出错,提示没有该控制台的所有权,你可以 exit 退出 joan 的 shell 然后再运行 startx。 4. 硬盘没有空间,在使用 kde 或 gnome 时,每次启动 X 都要占用一定空间,放临时文件,
  • 53. 如果/tmp 或 主目录下无法写入文件,这时 X 就会出一些奇怪的错误。 5. 显 卡 驱 动 问 题 , 下 载 安 装 正 确 的 驱 动 , 运 行 redhat-config-xfree86 或 XFree86 – configure 6. xfs 服务没有启动,xfs 是字体服务,它不起动则 X 无法启动,使用命令 # service xfs start 或 # /etc/rc.d/init.d/xfs start 可以启动该服务 如果希望该服务每次自动启动,使用命令: #chkconfig xfs on。 五、声卡驱动程序概述 Linux 下 声 卡 的 驱 动 是 作 为 普 通 内 核 模 块 来 加 载 的 , 系 统 内 置 的 声 卡 驱 动 在 /lib/modules/2.XXX/kernel/drivers/sound/目录下,以下是系统内置的声卡驱动模块: # ls /lib/modules/2.XXX/kernel/drivers/sound/ ac97_codec.o cs4232.o forte.o uart401.o ac97.o cs4281 i810_audio.o via82cxxx_audio.o ad1848.o cs46xx.o maestro3.o ymfpci.o ad1889.o emu10k1 rme96xx.o audigy es1370.o soundcore.o cmpci.o es1371.o sound.o 结合我们上节课所讲内容,我们可以知道系统在启动时会通过以下两个文件来加载模块: / etc/modules.conf 和 /etc/rc.d/rc.sysinit,声卡也是在这里加载的。如果我们新安装了块声卡, 在 Red Hat Linux 中,你可以使用命令:kudzu 来搜索声卡,并且自动配置。如果系统中没 有内置的驱动程序,我们可以按以下步骤来安装,我们以 VIA 的 8237 南桥集成声卡为例:
  • 54. 从 VIA 的网站上下载最新的驱动程序:http://www.viaarena.com/?PageID=294 下载 LinuxAudiov230.gz 文件,解压缩: # tar xzvf LinuxAudiov230.gz 编译 src.rpm 包: # rpmbuild --rebuild viaudiocombo-2.2-3.src.rpm 如果没有 rpmbuild 命令则运行: # rpm --rebuild viaudiocombo-2.2-3.src.rpm # cd /usr/src/RPM/RPMS/iX86. ( 这里的 X 根据你机器的情况不同而不同 ) # rpm –ivh --force viaudiocombo-2.2-3.iX86.rpm 安装编译好的驱动程序 Intel 主板的集成声卡一般使用的是 i810_audio.o 作为驱动,目前新版本的 Linux 内置的驱 动可以直接支持。 六、尚观 Linux 研究室 - Linux 驱动程序全解析之 Linux“万能声卡驱动”安装 计算机中的声卡千差万别,除了 Intel、VIA 等大厂,大多数声卡都没有专门写 Linux 下的驱 动程序,那么我们怎样在 Linux 中使用没有找不到驱动程序的声卡呢?你可以试试 Linux 下的“万能声卡驱动”,他们可以驱动大量的声卡,目前主要有两种万能声卡驱动,一种是 ALSA,是 Advanced Linux Sound Architecture 的缩写 ,采用 GPL,针对 Linux 系统,源代 码公开,主页是 http://www.alsa-project.org/ ;另一种是 OSS , Open Sound System ,它 是 商 用 软 件 , 针 对 主 流 UNIX 系 统 , Linux 也 在 它 的 支 持 之 列 , 主 页 是 http://www.opensound.com/。我们将主要介绍 ALSA 驱动的安装。 A.安装 ALSA 驱动程序: 1 .从 http://www.alsa-project.org/alsa-doc/ 处查找是否有你的声卡,如果有, 一 定 要 从 此 处 点 击 后 面 “ details”链 接 , 来 查 找 安 装 方 法 , 这里以安装创新 Soundblaster Audigy 声卡的驱动为例,其他的声卡请查看 details 中的具体方法: 在安装之前需要安装内核的源代码包,可以从 Red Hat 光盘上安装 kernel-sourceXXX.rpm
  • 55. 包,或者从 kernel.org 网站上下载当前系统版本的源代码包,安装源码包: # rpm –ivh kernel-soureXXX.rpm 或 # tar zxvf kernel-2.XXX.tar.gz # cd /usr/src/Linux2.XXX/ 到源代码的目录中 # cp /boot/config-2.XXX ./.config 将当前版本的内核配 置文件拷贝至源码目录 2.下载驱动程序 从 http://www.alsa-project.org/alsa/ftp/driver/ 下载驱动程序 alsa-dirver-1.0.6rc1.tar.bz2 从 http://www.alsa-project.org/alsa/ftp/lib/ 下载库文件 alsa-lib-1.0.6rc1.tar.bz2 从 http://www.alsa-project.org/alsa/ftp/utils/ 下载工具 alsa-utils-1.0.6rc1.tar.bz2 3.安装驱动 # cd /usr/src # mkdir alsa # cd alsa # cp alsa* ./ # tar -xjvf alsa-driver-1.0.6rc1.tar.bz2 # cd alsa-driver-1.0.6rc1 # ./configure --with-cards=emu10k1 --with-sequencer=yes; # make # make install # chmod a+rw /dev/dsp /dev/mixer /dev/sequencer /dev/midi
  • 56. 同样安装 lib 包和 utils 包: # cd .. # tar -jxvf alsa-lib-1.0.6rc1.tar.bz2 # cd alsa-lib-1.0.6rc1 # ./configure # make # make install # cd .. # tar -jxvf alsa-utils-1.0.6rc1.tar.bz2 # cd alsa-utils-1.0.6rc1 # ./configure # make # make install 4.更改配置文件: # vi /etc/modules.conf 添加如下: alias char-major-116 snd alias snd-card-0 snd-emu10k1 # module options should go here alias char-major-14 soundcore alias sound-slot-0 snd-card-0 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss
  • 57. alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias sound-service-0-12 snd-pcm-oss 但是 ALSA 驱动后的声卡默认是不发声的,你可以用 ALSA mixer 来开启,直接运行以下 命令可以简单全部开启所有的音量 #./audunmute 也可以使用以下命令来设置音量的大小 # amixer -c 0 sset 'Master',0 100%,100% unmute # amixer -c 0 sset 'PCM ',0 100% unmute 可以编辑/etc/modules.conf 文件中添加如下一行可以让声卡每次启动时调整音 量为 100%: post-install snd-card-0 amixer -c 0 sset 'Master',0 100%,100% unmute && amixer -c 0 sset 'PCM ',0 100% unmute B.设置 OSS 声卡驱动 1.从 http://www.opensound.com/download.cgi 可以选择下载 OSS 的版本,如针对 2.4 的 内 核 的 驱 动 , 或 针 对 2.6 内 核 的 驱 动 , 以 下 是 2.4 内 核 驱 动 的 下 载 地 址 : ftp://www.se.opensound.com/pub/oss/Linux/oss3991e-Linux-x86-v24.tar.gz 2.安装驱动程序: # tar zxvf oss3991e-Linux-x86-v24.tar.gz #./oss-install 将会自动安装其中包含的驱动程序,安装驱动模块前,请使用命令 modprobe –r 或 rmmod 把原有的驱动程序卸载。 以上为 Linux 声卡驱动的大致安装过程,因为 Linux 下的声卡众多,不可能有一个固定的
  • 58. 安装步骤,但大致的步骤是编译出针对目前内核版本的驱动模块,然后再使用 insmod 或 modprobe 加 载 上 去 , 更 多 的 是 通 过 /etc/modules.conf 文 件 自 动 加 载 。 理 解 /etc/modules.conf 文件很重要,这是大多数 Linux 系统加载模块的文件,有些 Linux 是/etc/ conf.modules, 如 果 声 卡 是 非 即 插 即 用 的 , 可 以 再 该 文 件 中 使 用 options snd-card-0 io=0x300 irq=5 来设置 io 资源及中断号。