Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,091 views

Published on

  • Be the first to comment

  • Be the first to like this

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

  1. 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 1ICH4: not 100% native mode: will probe irqs later ide0: BM-DMA at 0xbfa0-0xbfa7, BIOS settings: hda:DMA, hdb:pio
  2. 2. ide1: BM-DMA at 0xbfa8-0xbfaf, BIOS settings: hdc:DMA, hdd:pio该驱动程序会向核心中注册主设备号为 3 的 block 型设备。我们可以看到在 IDE 控制器初始化时,占用的 IO 资源及分配给它的中断号:ide0 at 0x1f0-0x1f7,0x3f6 on irq 14ide1 at 0x170-0x177,0x376 on irq 15接着使用 IDE 控制器查找连接在 IDE 接口上的设备,如果检查到硬盘则加载 ide 硬盘的驱动 程 序 , 设 置 了 该 硬 盘 的 基 本 参 数 , 设 置 传 输 方 式 为 UDMA ( 100 ) , 也 就 是ATA100(100M/S 的传输速度),并且根据这个驱动程序检测硬盘上的分区:hda: attached ide-disk driver.hda: host protected area => 1hda: 78140160 sectors (40008 MB) w/7898KiB Cache, CHS=4864/255/63, UDMA(100)ide-floppy driver 0.99.newidePartition 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. 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" 中 的 "VIA82CXXXchipset support"被选中,开始编译内核# make dep (2.6 内核已经不需要了)# make clean# make bzImage
  4. 4. # make modules# make modules_install2.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. 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. 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 CDhdc: HL-DT-STCD-RW/DVD-ROM GCC-4240N, ATAPI CD/DVD-ROM driveUniform CD-ROM driver Revision: 3.12一般的通用 CD/DVD-ROM 驱动程序就可以将我们的光驱驱动起来,不需要特别的配置,如果我们遇到的是 SCSI 的光驱,一般的内核也可以驱动,因为在编译内核时,一般会将SCSI 的内容编译出来,如果没有 SCSI 的光驱驱动,我们可以自己手动编译,makemenuconfig(或 xconfig)时在 SCSI support 菜单中,只要将 SCSI support 设置为 Y 或者M( Y 代表该部分编译在内核中,M 表示该部分编译为内核模块),SCSI CD-ROM
  7. 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. 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 SchillingLinux sg driver version: 3.1.25Using libscg version schily-0.7cdrecord: 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. 9. 0,5,0 5) * 0,6,0 6) * 0,7,0 7) *我们可以看到目前的光驱在 SCSI 总线的参数,然后根据参数来输入下面的命令刻录光盘:# cdrecord -v -eject speed=24 dev=0,0,0 example.isospeed=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. 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. 11. 1.以太网卡的驱动过程处理网络方面任务是 Linux 长项,在仅仅一两兆的 Linux 内核中就可以对 TCP/IP 的很好支持,一般网络应用中 Linux 的效率要高于 Windows 系统,而且有很好的易用性。那么我们如何驱动网络的设备呢?我们首先了解一下最常见的网络设备——以太网卡的驱动过程。在内核加载后,虽然已经有了对 TCP/IP 协议的支持,但是具体的网络接口设备的驱动并没有加载。在内核启动后,将硬盘上的根分区 mount 到系统中,我们的系统会查找模块配置文件/etc/modules.conf,并按照该文件记录的内容来加载模块,以下是这个文件的内容:# cat /etc/modules.confalias eth0 8139tooalias sound-slot-0 i810_audiopost-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-uhcialias 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. 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-eth0DEVICE=eth0ONBOOT=yesBOOTPROTO=noneIPADDR=192.168.0.1NETMASK=255.255.255.0TYPE=Ethernet以上就是为 eth0 设备绑定了 192.168.0.1 的 IP 地址# cat /etc/sysconfig/network-scripts/ifcfg-eth0:1DEVICE=eth0:1ONBOOT=yesBOOTPROTO=noneIPADDR=192.168.1.1
  13. 13. NETMASK=255.255.255.0TYPE=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.deps3.调整以太网卡的参数:有时我们在加载完网卡的驱动后,如果网卡的状态不正确,比如我们驱动起一块网卡,但是它在 100M 的速度上工作很不稳定,我们可以使用 mii-tool 命令来调整以太网卡的属性,目前多数以太网卡为 10BaseT 与 100BaseTx 的 10M/100M 自适应网卡,也有较新的支持1000BaseT 的千兆以太网卡。大家可以看 mii-tool 命令的一些用法:# mii-tool
  14. 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 -Rresetting the transceiver...解除 eth0 的强制状态,让 eth0 自动侦测使用什么方式通讯。五、尚观 Linux 研究室 - Linux 驱动程序全解析之 Modem 及 ADSL 的驱动安装,PPP 连接的设置1.外置 Modem 的驱动程序安装:Modem 分为外置和内置两种,比较而言,外置的 Modem 配置较容易,使用非常方便 。Modem 一般接在串口上,我们知道在 Linux 中,串口对应的设备文件为 /dev/ttyS*,如果是 COM1 口,则对应 /dev/ttyS0。如果不知道连接的是哪一个 COM 口,可以先给 Modem加电,用以下命令:
  15. 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. 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. 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 -lcrw-rw---- 1 root uucp 4, 64 Sep 15 2003 /dev/ttyS# ls /dev/ttySHSF0 -lcrw-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. 18. http://www.neweasier.com/software.html?class=4 ,配置起来非常简单,下载包解开后,直接运行:# ./go运行解压缩出文件夹中的 go 文件后,将会出现的 PPPoE 配置向导,会提示你输入用户名和密码,然后使用以下命令可以让你建立起连接:# adsl-start或者# ifup ppp0系统中会在配置完后出现一个 SysV 的服务:# chkconfig --list adsladsl 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. 19. 图 2 X Window 中运行网络配置工具这两个命令是在 Red Hat Linux 中的命令,可以在图形界面下,建立 PPPoE 的连接,其他版本的 Linux 也应该有自己的 ADSL 拨号程序。图 3 单击建立新连接单击上面的 New ,建立新连接,如 VPN,eth,ISDN,modem 之类的连接都可以建立,如下图:
  20. 20. 图 4 选择 xDSL 连接,建立 PPPoE 连接这里的 xDSL 并不是只有 ADSL 等 DSL 的连接,一般的 PPPoE 连接都可以用,比如网通的 LAN 宽带,点击 Forward,进行下一步
  21. 21. 图 5 输入 ADSL 或 LAN 宽带接入的连接信息将网通或电信提供给你的用户名密码输入,点击下一步。建立好了链接后,大家会发现在 /etc/sysconfig/network-scripts/ 目录中会出现 ifcfg-ppp0的文件,你可以通过以下命令# ifup ppp0可以让系统通过 ADSL 拨号上网,建立宽带连接,也可以用刚才的向导拨号上网,如图6:
  22. 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. 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. 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. 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. 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. 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. 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. 29. 图 1 点击 gtkam 的 camera — Add Camera 来添加数码相机,然后在弹出的窗体中单击Detect,来测试数码相机的连接类型。点击 OK 就可以看到数码相机中的照片了
  30. 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. 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. 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. 33. 或# make xconfig 需要在 X-window 下3. 选择 USB 的模块,如图 1 所示:图 3 编译内核,选择 USB support选择要编译的驱动,可以查看说明书,看看摄像头的芯片是什么型号,如图 2:
  34. 34. 图 4 在 USB support 下可以选择多种驱动的模块,比如非常常用的 OV511 芯片的摄像头的驱动,USB 打印机的驱动等,选定 OV511 摄像头的支持 4. 最后保存,编译模块,并安装模块 # make dep
  35. 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. 36. # umount /mnt/iso最后使用 cdrecord 命令来刻录:# cdrecord –scanbus查看 SCSI 总线中刻录机的配置信息:Cdrecord 2.0 (i686-pc-Linux-gnu) Copyright (C) 1995-2002 Jörg SchillingLinux sg driver version: 3.1.25Using libscg version schily-0.7cdrecord: 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.isospeed=24 是以 24 速来刻录光盘,dev=后加上刚才显示的刻录机的 SCSI 参数。如果是外 置 DVD ,则应使用命令 dvdrecord ,其用法与 cdrecord 相同,在 Red Hat 安装光盘
  37. 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. 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.o2.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. 39. 图 6 选择需要的 IEE1394 模块,然后重新编译模块 # make dep # make modules # make modules_install驱动 1394 接口的硬盘或光驱时,需要预先加载的驱动有 ieee1394.o 和 ohci1394.o: # modprobe ohci1394 将会将两样驱动全装载上,因为 ohci1394 依赖 ieee1394硬盘需要的驱动是 sbp2.o,插入硬盘后它应该会自动加载,与 USB 设备相同,硬盘会被
  40. 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. 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. 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. 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#3XFree86 官方的版本下载网站是 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. 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. 45. # redhat-config-xfree86图 2 使用 redhat-config-xfree86
  46. 46. 图 2 使用 redhat-config-xfree86,这个命令可以自动侦测显卡,让你配置分辨率和色深,选择 Advanced 页面,然后点击 Video Card 的 Configure 按钮,选择正确的显卡。但是如果版本在 Red Hat8.0 之前,则没有这个命令,应该运行: # Xconfigurator 程序会一步步提示你,其中选择正确的驱动程序这两个程序都会将结果写入 /etc/X11/XF86Config 这个配置文件,当然你可以直接更改这个文件。方法二:直接更改 XFree86 的配置文件,这种方法在 Linux 系统较通用,不用非要 RedHat。 # vi /etc/X11/XF86Config 或 XF86Config-4在其中找到 Section "Device" Identifier "Videocard0"
  47. 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. 48. Depth 16 Modes "1024x768" "800x600" "640x480" (默认会使用最高的分辨 率) EndSubSection EndSection这里是设置显示模式的地方,包括屏幕的分辨率,和色深,默认使用最高的分辨率,如果想使用较低的分辨率,将高分辨率删除就可以了,在这个配置文件中显示器会使用"1024x768" 的分辨率,色深是16位色。有关XF86Config文件的详解可以看它的manpage:# man XF86Config 方法三:让XFree86自己来生成XF86Config文件运行命令# XFree86 -configureXFree86 自动侦测显卡及显示器,在用户的主目录下生成一个名叫 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. 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.htmlNVIDIA的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. 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. 51. # startx 重新启动X# fglrxinfo 可以查看驱动程序是否安装成功3.常见显卡驱动的下载地址:NVIDIA显卡驱动: http://www.nvidia.com/object/Linux.htmlATI显卡驱动: http://www.ati.com/support/driver.html (ATI网站访问速度较慢,可以多试几次)VIA芯片集成显卡的驱动程序: http://www.viaarena.com/?PageID=296SIS 显卡驱动程序: http://www.mypcera.com/qu/2/soft1/xsis.rpmIntel 芯片组显卡部分的驱动程序: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%21ATI 系列笔记本驱动程序:升级 XFree86如果实在找不到驱动程序,试着按照上面的介绍升级 XFree86 到.4.3 或 4.4,它自带如 ATIM9000 笔记本显卡、SIS 显卡等驱动程序。4.内核支持显示模式调整在命令行界面下,你可以调整内核的显示模式,让他使用较高分辨率,设置方法如下:如果使用的是 grub 作为 boot loader 则运行命令:# vi /boot/grub/grub.conf在 kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/ 行后添加 vga=0x314,这是设置显示模式,
  52. 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 –configure2. XF86Config 文件损坏,或丢失,运行 redhat-config-xfree86 或者 XFree86 –configure3. 没有控制台所有权,比如你是以 zorro 用户登陆,然后用命令 su – joan 切换为用户 joan,这时使用 startx 就会出错,提示没有该控制台的所有权,你可以 exit 退出 joan 的 shell 然后再运行 startx。4. 硬盘没有空间,在使用 kde 或 gnome 时,每次启动 X 都要占用一定空间,放临时文件,
  53. 53. 如果/tmp 或 主目录下无法写入文件,这时 X 就会出一些奇怪的错误。5. 显 卡 驱 动 问 题 , 下 载 安 装 正 确 的 驱 动 , 运 行 redhat-config-xfree86 或 XFree86 – configure6. 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.oac97.o cs4281 i810_audio.o via82cxxx_audio.oad1848.o cs46xx.o maestro3.o ymfpci.oad1889.o emu10k1 rme96xx.oaudigy es1370.o soundcore.ocmpci.o es1371.o sound.o结合我们上节课所讲内容,我们可以知道系统在启动时会通过以下两个文件来加载模块: /etc/modules.conf 和 /etc/rc.d/rc.sysinit,声卡也是在这里加载的。如果我们新安装了块声卡,在 Red Hat Linux 中,你可以使用命令:kudzu 来搜索声卡,并且自动配置。如果系统中没有内置的驱动程序,我们可以按以下步骤来安装,我们以 VIA 的 8237 南桥集成声卡为例:
  54. 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. 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.bz23.安装驱动# 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. 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 install4.更改配置文件:# 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. 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% unmuteB.设置 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.gz2.安装驱动程序:# tar zxvf oss3991e-Linux-x86-v24.tar.gz#./oss-install将会自动安装其中包含的驱动程序,安装驱动模块前,请使用命令 modprobe –r 或 rmmod把原有的驱动程序卸载。以上为 Linux 声卡驱动的大致安装过程,因为 Linux 下的声卡众多,不可能有一个固定的
  58. 58. 安装步骤,但大致的步骤是编译出针对目前内核版本的驱动模块,然后再使用 insmod 或modprobe 加 载 上 去 , 更 多 的 是 通 过 /etc/modules.conf 文 件 自 动 加 载 。 理 解/etc/modules.conf 文件很重要,这是大多数 Linux 系统加载模块的文件,有些 Linux 是/etc/conf.modules, 如 果 声 卡 是 非 即 插 即 用 的 , 可 以 再 该 文 件 中 使 用 options snd-card-0io=0x300 irq=5 来设置 io 资源及中断号。

×