Linux下设备驱动
本講主要概述Linux設(shè)備驅(qū)動框架、驅(qū)動程序的配置文件及常用的加載驅(qū)動程序的方法;并且介紹Red Hat Linux安裝程序是如何加載驅(qū)動的,通過了解這個過程, 我們可以自己將驅(qū)動程序放到引導(dǎo)盤中;安裝完系統(tǒng)后,使用kudzu自動配置硬件程序。
Linux設(shè)備驅(qū)動概述
1. 內(nèi)核和驅(qū)動模塊
操作系統(tǒng)是通過各種驅(qū)動程序來駕馭硬件設(shè)備,它為用戶屏蔽了各種各樣的設(shè)備,驅(qū)動硬件是操作系統(tǒng)最基本的功能,并且提供統(tǒng)一的操作方式。正如我們查看屏幕上的文檔時,不用去管到底使用nVIDIA芯片,還是ATI芯片的顯示卡,只需知道輸入命令后,需要的文字就顯示在屏幕上。硬件驅(qū)動程序是操作系統(tǒng)最基本的組成部分,在Linux內(nèi)核源程序中也占有較高的比例。
Linux內(nèi)核中采用可加載的模塊化設(shè)計(jì)(LKMs ,Loadable Kernel Modules),一般情況下編譯的Linux內(nèi)核是支持可插入式模塊的,也就是將最基本的核心代碼編譯在內(nèi)核中,其它的代碼可以選擇是在內(nèi)核中,或者編譯為內(nèi)核的模塊文件。
如果需要某種功能,比如需要訪問一個NTFS分區(qū),就加載相應(yīng)的NTFS模塊。這種設(shè)計(jì)可以使內(nèi)核文件不至于太大,但是又可以支持很多的功能,必要時動態(tài)地加載。這是一種跟微內(nèi)核設(shè)計(jì)不太一樣,但卻是切實(shí)可行的內(nèi)核設(shè)計(jì)方案。
我們常見的驅(qū)動程序就是作為內(nèi)核模塊動態(tài)加載的,比如聲卡驅(qū)動和網(wǎng)卡驅(qū)動等,而Linux最基礎(chǔ)的驅(qū)動,如CPU、PCI總線、TCP/IP協(xié)議、APM(高級電源管理)、VFS等驅(qū)動程序則編譯在內(nèi)核文件中。有時也把內(nèi)核模塊就叫做驅(qū)動程序,只不過驅(qū)動的內(nèi)容不一定是硬件罷了,比如ext3文件系統(tǒng)的驅(qū)動。
理解這一點(diǎn)很重要。因此,加載驅(qū)動時就是加載內(nèi)核模塊。下面來看一下有關(guān)模塊的命令,在加載驅(qū)動程序要用到它們:lsmod、modprob、insmod、rmmod、modinfo。
lsmod 列出當(dāng)前系統(tǒng)中加載的模塊,例如:
| #lsmod (與cat /proc/modules 得出的內(nèi)容是一致的)Module Size Used by Not taintedradeon 115364 1agpgart 56664 3nls_iso8859-1 3516 1 (autoclean)loop 12120 3 (autoclean)smbfs 44528 2 (autoclean)parport_pc 19076 1 (autoclean)lp 9028 0 (autoclean)parport 37088 1 (autoclean) [parport_pc lp]autofs 13364 0 (autoclean) (unused)ds 8704 2yenta_socket 13760 2pcmcia_core 57184 0 [ds yenta_socket]tg3 55112 1sg 36940 0 (autoclean)sr_mod 18104 0 (autoclean)microcode 4724 0 (autoclean)ide-scsi 12208 0scsi_mod 108968 3 [sg sr_mod ide-scsi]ide-cd 35680 0cdrom 33696 0 [sr_mod ide-cd]nls_cp936 124988 1 (autoclean)nls_cp437 5148 1 (autoclean)vfat 13004 1 (autoclean)fat 38872 0 (autoclean) [vfat]keybdev 2976 0 (unused)mousedev 5524 1hid 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]ext3 91592 2jbd 52336 2 [ext3] |
上面顯示了當(dāng)前系統(tǒng)中加載的模塊,左邊數(shù)第一列是模塊名,第二列是該模塊大小,第三列則是該模塊使用的數(shù)量。
如果后面為unused,則表示該模塊當(dāng)前沒在使用。如果后面有autoclean,則該模塊可以被rmmod -a命令自動清洗。rmmod -a命令會將目前有autoclean的模塊卸載,如果這時候某個模塊未被使用,則將該模塊標(biāo)記為autoclean。如果在行尾的[ ]括號內(nèi)有模塊名稱,則括號內(nèi)的模塊就依賴于該模塊。例如:
| cdrom 34144 0 [sr_mod ide-cd] |
其中ide-cd及sr_mod模塊就依賴于cdrom模塊。
系統(tǒng)的模塊文件保存在/lib/modules/2.4.XXX/kerne目錄中,根據(jù)分類分別在fs、net等子目錄中,他們的互相依存關(guān)系則保存在/lib/modules/2.4.XXX/modules.dep 文件中。
需要注意,該文件不僅寫入了模塊的依存關(guān)系,同時內(nèi)核查找模塊也是在這個文件中,使用modprobe命令,可以智能插入模塊,它可以根據(jù)模塊間依存關(guān)系,以及/etc/modules.conf文件中的內(nèi)容智能插入模塊。比如希望加載ide的光驅(qū)驅(qū)動,則可運(yùn)行下面命令:
| # modprobe ide-cd |
此時會發(fā)現(xiàn),cdrom模塊也會自動插入。
insmod也是插入模塊的命令,但是它不會自動解決依存關(guān)系,所以一般加載內(nèi)核模塊時使用的命令為modprobe。
rmmod可以刪除模塊,但是它只可以刪除沒有使用的模塊。
Modinfo用來查看模塊信息,如modinfo -d cdrom,在Red Hat Linux系統(tǒng)中,模塊的相關(guān)命令在modutils的RPM包中。
2.設(shè)備文件
當(dāng)我們加載了設(shè)備驅(qū)動模塊后,應(yīng)該怎樣訪問這些設(shè)備呢?Linux是一種類Unix系統(tǒng),Unix的一個基本特點(diǎn)是“一切皆為文件”,它抽象了設(shè)備的處理,將所有的硬件設(shè)備都像普通文件一樣看待,也就是說硬件可以跟普通文件一樣來打開、關(guān)閉和讀寫。
系統(tǒng)中的設(shè)備都用一個設(shè)備特殊文件代表,叫做設(shè)備文件,設(shè)備文件又分為Block(塊)型設(shè)備文件、Character(字符)型設(shè)備文件和Socket(網(wǎng)絡(luò)插件)型設(shè)備文件。Block設(shè)備文件常常指定哪些需要以塊(如512字節(jié))的方式寫入的設(shè)備,比如IDE硬盤、SCSI硬盤、光驅(qū)等。
而Character型設(shè)備文件常指定直接讀寫,沒有緩沖區(qū)的設(shè)備,比如并口、虛擬控制臺等。Socket(網(wǎng)絡(luò)插件)型設(shè)備文件指定的是網(wǎng)絡(luò)設(shè)備訪問的BSD socket 接口。
| #ls -l /dev/hda /dev/video0 /dev/logbrw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hdasrw-rw-rw- 1 root root 0 Jun 3 16:55 /dev/logcrw------- 1 root root 81, 0 Sep 15 2003 /dev/video0 |
上面顯示的是三種設(shè)備文件,注意它們最前面的字符,Block型設(shè)備為b,Character型設(shè)備為c,Socket設(shè)備為s。
由此可以看出,設(shè)備文件都放在/dev目錄下,比如硬盤就是用/dev/hd*來表示,/dev/hda表示第一個IDE接口的主設(shè)備,/dev/hda1表示第一個硬盤上的第一個分區(qū);而/dev/hdc 表示第二個IDE接口的主設(shè)備??梢允褂孟旅婷?#xff1a;
| #dd if=/dev/hda of=/root/a.img bs=446 count=1 |
把第一個硬盤上前446個字節(jié)的MBR信息導(dǎo)入到a.img文件中。
對于Block和Character型設(shè)備,使用主(Major)和輔(minor)設(shè)備編號來描述設(shè)備。主設(shè)備編號來表示某種驅(qū)動程序,同一個設(shè)備驅(qū)動程序模塊所控制的所有設(shè)備都有一個共同的主設(shè)備編號,而輔設(shè)備編號用于區(qū)分該控制器下不同的設(shè)備,比如,/dev/hda1(block 3/1)、/dev/hda2(block 3/2 )和/dev/hda3( block3/3 )都代表著同一塊硬盤的三個分區(qū),他們的主設(shè)備號都是3,輔設(shè)備號分別為1、2、3。 這些設(shè)備特殊文件用mknod命令來創(chuàng)建:
| # mknod harddisk b 3 0 |
我們就在當(dāng)前位置創(chuàng)建出一個與 /dev/hda一樣的、可以訪問第一個IDE設(shè)備主硬盤的文件,文件名叫做harddisk。
使用下面命令可以查看設(shè)備編號:
| #file /dev/hda/dev/hda: block special (3/0) |
其中Block代表/dev/hda是系統(tǒng)的Block型(塊型)設(shè)備文件,它的主設(shè)備編號為3,輔設(shè)備編號為0。
| #ls -l /dev/hda /dev/hdbbrw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hdabrw-rw---- 1 root disk 3, 64 Sep 15 2003 /dev/hdb |
使用ls -l也可以看到設(shè)備編號,/dev/hdb代表第一個IDE接口的從設(shè)備(Slave)也是Block設(shè)備,編號為(3/64),還有另外一種設(shè)備文件是/dev/tty*。使用如下命令:
| #echo "hello tty1" > /dev/tty1 |
將字符串“hello tty1”輸出到/dev/tty1代表的第一個虛擬控制臺上,此時按“Alt + F1”可以看到該字符出現(xiàn)在屏幕上,這個特殊的文件就代表著我們的第一虛擬控制臺。
| #file /dev/tty1/dev/tty1: character special (4/1) |
由上可以看到,它的類型為Character 型(字符型)設(shè)備文件,主設(shè)備號為4,輔設(shè)備號為1。同樣,/dev/tty2代表著第二個虛擬控制臺,是Character設(shè)備,編號為 (4/2)。
當(dāng)將/dev/cdrom加載到/mnt/cdrom中時,只要訪問/mnt/cdrom系統(tǒng)就會自動引入到/dev/cdrom對應(yīng)的驅(qū)動程序中,訪問實(shí)際的數(shù)據(jù)。
有關(guān)設(shè)備文件的編號可以看內(nèi)核文檔/usr/src/linux-2.*/Documentation/devices.txt 文件(在Kernel的源文件解包后的Documentation目錄中),其中詳細(xì)敘述了各種設(shè)備文件編號的意義。
3.使用/proc目錄中的文件監(jiān)視驅(qū)動程序的狀態(tài)
通過設(shè)備文件怎樣訪問到相應(yīng)的驅(qū)動程序呢?它們中間有一個橋梁,那就是proc文件系統(tǒng),它一般會被加載到/proc目錄。訪問設(shè)備文件時,操作系統(tǒng)通常會通過查找/proc目錄下的值,確定由哪些驅(qū)動模塊來完成任務(wù)。如果proc文件系統(tǒng)沒有加載,訪問設(shè)備文件時就會出現(xiàn)錯誤。
Linux系統(tǒng)中proc文件系統(tǒng)是內(nèi)核虛擬的文件系統(tǒng),其中所有的文件都是內(nèi)核中虛擬出來的,各種文件實(shí)際上是當(dāng)前內(nèi)核在內(nèi)存中的參數(shù)。它就像是專門為訪問內(nèi)核而打開的一扇門,比如訪問/proc/cpuinfo文件,實(shí)際上就是訪問目前的CPU的參數(shù),每一次系統(tǒng)啟動時系統(tǒng)都會通過/etc/fstab中設(shè)置的信息自動將proc文件系統(tǒng)加載到/proc目錄下:
| # grep proc /etc/fstabnone /proc proc defaults 0 0此外,也可以通過mount命令手動加載:# mount -t proc none /proc |
通過/proc目錄下的文件可以訪問或更改內(nèi)核參數(shù),可以通過/proc目錄查詢驅(qū)動程序的信息。下面先讓我們看一下/proc目錄中的信息:
| # ls /proc1 4725 5032 5100 5248 5292 crypto kcore partitions14 4794 5044 5110 5250 5293 devices kmsg pci2 4810 5075 5122 5252 5295 dma ksyms self3 4820 5079 5132 5254 5345 driver loadavg slabinfo4 4831 5080 5151 5256 6 execdomains locks stat4316 4910 5081 5160 5258 7 fb lvm swaps4317 4912 5082 5170 5262 70 filesystems mdstat sys4318 4924 5083 5180 5271 8 fs meminfo sysrq-trigger4319 4950 5084 5189 5287 9 ide misc sysvipc4620 4963 5085 5232 5288 apm interrupts modules tty4676 5 5086 5242 5289 bus iomem mounts uptime4680 5005 5087 5244 5290 cmdline ioports mtrr version4706 5018 5088 5246 5291 cpuinfo irq net |
需要知道的是,這些文件都是實(shí)時產(chǎn)生的虛擬文件,訪問它們就是訪問內(nèi)存中真實(shí)的數(shù)據(jù)。這些數(shù)據(jù)是實(shí)時變化產(chǎn)生的,可以通過以下命令來查看文件的具體值:
| # cat /proc/interruptsCPU00: 50662 XT-PIC timer1: 3 XT-PIC keyboard2: 0 XT-PIC cascade5: 618 XT-PIC ehci-hcd, eth18: 1 XT-PIC rtc9: 0 XT-PIC usb-uhci, usb-uhci11: 50 XT-PIC usb-uhci, eth012: 16 XT-PIC PS/2 Mouse14: 8009 XT-PIC ide015: 0 XT-PIC ide1NMI: 0ERR: 0 |
其它文件的含意見表1所示。
/proc/sys目錄下的文件一般可以直接更改,相當(dāng)于直接更改內(nèi)核的運(yùn)行參數(shù),例如:
| # echo 1 > /proc/sys/net/ipv4/ip_forward |
上面代碼可以將內(nèi)核中的數(shù)據(jù)包轉(zhuǎn)發(fā)功能打開。
另外,Linux系統(tǒng)中提供一些命令來查詢系統(tǒng)的狀態(tài),如free可以查看目前的內(nèi)存使用情況,ide_info可以查看ide設(shè)備的信息,例如:
| #ide_info /dev/had |
類似的命令還有scsi_info,可以查看SCSI設(shè)備的信息。這些命令一般也是查詢/proc目錄下的文件,并返回結(jié)果。
系統(tǒng)初始化過程驅(qū)動程序的安裝
在Linux安裝過程中,系統(tǒng)上的硬件會被檢測,基于檢測到的結(jié)果安裝程序會決定哪些模塊需要在引導(dǎo)時被載入。Red Hat的安裝程序?yàn)閍naconda,它提供了自動檢測硬件,并且安裝的機(jī)制。
但是,如果計(jì)算機(jī)內(nèi)的某些硬件沒有默認(rèn)的驅(qū)動程序,比如一塊SCSI卡,我們可以在啟動后的boot提示符下,輸入“l(fā)inux dd”,在加載完內(nèi)核后,系統(tǒng)會自動提示插入驅(qū)動盤,這時就有機(jī)會把該硬件的Linux驅(qū)動程序裝入。
如果在安裝系統(tǒng)時,某種硬件總是因?yàn)橹袛鄾_突(ISA總線的設(shè)備較常見,比如一塊ISA網(wǎng)卡)沒法正常驅(qū)動,或者是缺少驅(qū)動程序,那么可以在boot提示符下輸入“l(fā)inux noprobe”。在這種模式下,安裝程序不會自動配置找到的硬件,可以自己來選擇現(xiàn)有驅(qū)動,配置驅(qū)動程序的參數(shù),或者選擇用光盤或軟盤加載驅(qū)動程序。
定制引導(dǎo)盤
系統(tǒng)啟動時是如何加載驅(qū)動的?下面讓我們來看一下Red Hat的安裝光盤是怎樣引導(dǎo)的。當(dāng)Linux安裝光盤啟動時,加載位于光盤上isolinux中的內(nèi)核文件vmlinuz,內(nèi)核運(yùn)行完畢后,又將initrd.img的虛擬文件系統(tǒng)加載到內(nèi)存中。這個文件為ext2文件系統(tǒng)的鏡像,經(jīng)過gzip壓縮,可以通過以下步驟查看該鏡像中的內(nèi)容:
| # mount /mnt/cdrom# mkdir /mnt/imgdir# gunzip < /mnt/cdrom/isolinux/initrd.img > /ext2img# mount -t ext2 -o loop /ext2img /mnt/imgdir# cd /mnt/imgdir# ls -Fbin@dev/etc/linuxrc@lost+found/modules/proc/sbin/tmp/var/# cd modules# lsmodule-infomodules.cgzmodules.depmodules.pcimappcitable |
其中modules.dep為模塊的注冊文件,同時有各種模塊的依存關(guān)系。modules.cgz為cpio的打包文件,實(shí)際的各種驅(qū)動模塊就在該文件中。我們可以通過以下命令解包:
| # cpio -idmv < modules.cgz |
由此可以看到,解包出來的目錄2.4.21-4XXX。進(jìn)入該目錄下的i386目錄,就可以看到當(dāng)前啟動盤中支持的所以驅(qū)動程序:
| # ls3c59x.o3w-xxxx.o8139cp.o8139too.o8390.oaacraid.oacenic.oaic79xx.o…… |
若希望在系統(tǒng)中加入需要的驅(qū)動程序,可以相應(yīng)地修改這些文件,比如在modules.dep中加入該模塊的名字和依存關(guān)系,將編譯好的驅(qū)動模塊文件加入modules.cgz中,這樣就可以制定自己的安裝光盤。
硬盤上的系統(tǒng)啟動過程與上面類似,但是initrd的鏡像文件要更簡單些,一般在initrd-2.4.XXX.img的虛擬文件系統(tǒng)中,只會在/lib目錄下包含ext3.o jbd.o lvm-mod.o等少數(shù)文件,用來驅(qū)動硬盤上的ext3的文件系統(tǒng)。加載文件系統(tǒng)后,就可以使用/lib/modules/2.4.XXX/下的modules.dep文件及Kernel目錄中的各種驅(qū)動文件。
自動配置安裝
如果安裝完Linux系統(tǒng)后,又添加了新的硬件,那么系統(tǒng)必須載入正確的驅(qū)動程序才可以使用它。在Red Hat Linux中,可以使用kudzu來配置硬件。這是PnP設(shè)備的檢測程序,當(dāng)系統(tǒng)使用新硬件引導(dǎo)后,運(yùn)行kudzu(默認(rèn)會自動運(yùn)行),如果新硬件被支持,那么它就會被自動檢測到。該程序還會為它配置驅(qū)動模塊,把結(jié)果寫入到文件/etc/sysconfig/hwconf中,kudzu可以通過對比這個文件發(fā)現(xiàn)新安裝的硬件,并進(jìn)行配置;也可以通過編輯模塊配置文件/etc/modules.conf來手工指定加載模塊。
Kudzu服務(wù)默認(rèn)每次啟動時都要運(yùn)行,如果需要縮短啟動時間,使用下面命令可以停止系統(tǒng)啟動時的kudzu服務(wù):
| # chkconfig kudzu off |
如果要安裝新的硬件,可以手動運(yùn)行kudzu程序。
| # kudzu |
那么kudzu程序如何認(rèn)識硬件的呢?可以查看/usr/share/hwdata/目錄下的文件,根據(jù)這些文件中的PnP信息,kudzu可以識別各種硬件設(shè)備。
以上介紹了Linux下驅(qū)動程序的大體結(jié)構(gòu)、主要的加載方式和相關(guān)配置文件,在安裝Linux時加載驅(qū)動程序,并且根據(jù)需要定制自己的引導(dǎo)盤,在安裝完成后安裝新的、即插即用硬件。下一講開始,我們將學(xué)習(xí)具體硬件驅(qū)動的安裝方法。
前一節(jié)Linux培訓(xùn)園地:Linux下設(shè)備完全驅(qū)動之一,大家看過之后相信一定印象深刻。這一節(jié)首先講述IDE硬盤及光驅(qū)的設(shè)置、IDE刻錄機(jī)的使用,以及如何安裝SCSI硬盤驅(qū)動。然后介紹以太網(wǎng)卡驅(qū)動模塊的加載及網(wǎng)絡(luò)接口的啟功過程,如何調(diào)整網(wǎng)卡的參數(shù),Modem、ADSL和寬帶的驅(qū)動安裝,以及PPP連接的設(shè)置等。
IDE硬盤及光驅(qū)
1.IDE設(shè)備的驅(qū)動過程
操作系統(tǒng)首先是安裝在塊設(shè)備上,沒有對塊設(shè)備的支持系統(tǒng)就無法啟動,所以首先介紹常見塊設(shè)備的安裝。硬盤就是最常見的塊設(shè)備,普通PC上的硬盤通常是IDE接口的,而服務(wù)器上的硬盤通常是SCSI接口的。
一般內(nèi)核中內(nèi)置對通用IDE控制芯片的支持。下面看一下IDE硬盤在內(nèi)核中的驅(qū)動過程,dmesg命令可以看到內(nèi)核在啟功和加載內(nèi)核模塊時的信息:
| # dmesg | less |
在Linux內(nèi)核啟動過程中,可以發(fā)現(xiàn)內(nèi)核首先驅(qū)動初始化CPU、內(nèi)存、系統(tǒng)時鐘部分,接著加載PCI總線的驅(qū)動,然后就加載了通用的IDE驅(qū)動程序:
| Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4 |
接著初始化IDE的控制器,IDE控制器集成在Intel的ICH4南橋芯片組中,IDE控制芯片驅(qū)動加載后,進(jìn)行初始化傳輸模式:
| ICH4: chipset revision 1ICH4: not 100% native mode: will probe irqs lateride0: BM-DMA at 0xbfa0-0xbfa7, BIOS settings: hda:DMA, hdb:pioide1: BM-DMA at 0xbfa8-0xbfaf, BIOS settings: hdc:DMA, hdd:pio |
該驅(qū)動程序會向核心中注冊主設(shè)備號為3的block型設(shè)備??梢钥吹?#xff0c;在IDE控制器初始化時,占用的I/O資源及分配給它的中斷號:
| ide0 at 0x1f0-0x1f7,0x3f6 on irq 14ide1 at 0x170-0x177,0x376 on irq 15 |
接著使用IDE控制器查找連接在IDE接口上的設(shè)備,如果檢查到硬盤則加載IDE硬盤的驅(qū)動程序,設(shè)置了該硬盤的基本參數(shù),設(shè)置傳輸方式為UDMA(100),也就是ATA100(100Mb/s的傳輸速度),并且根據(jù)這個驅(qū)動程序檢測硬盤上的分區(qū):
| 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接口的主設(shè)備,它的設(shè)備號為block(3/0),而/dev/hda1是這塊硬盤的第一個分區(qū),設(shè)備編號是 block (3/1);/dev/hdb代表第一個IDE接口的從設(shè)備,設(shè)備編號為 block(3/64)。
由此我們可以看到,內(nèi)核默認(rèn)可以支持1~63個分區(qū),其中第一個邏輯分區(qū)的編號肯定為/dev/hda5。但是,在/dev目錄下查找有hda1~hda32,共32個分區(qū)文件,如果需要更多的分區(qū),就需要使用mknod命令來創(chuàng)建更多的設(shè)備文件。
/dev/hdc是第二個IDE接口的主設(shè)備;/dev/hdd是第二個IDE接口的從設(shè)備。
2.安裝、升級常見的IDE驅(qū)動程序
通用的IDE控制器可以通過內(nèi)核這樣加載起來,如果遇到一些較新的芯片組,當(dāng)前的內(nèi)核無法完全發(fā)揮出新硬件的性能,這時就要向內(nèi)核中打補(bǔ)丁,例如,2.4.20-8的內(nèi)核就無法支持VIA VT8237芯片組中的IDE ATA133方式,需要向內(nèi)核中打補(bǔ)丁。
先到VIA的網(wǎng)站上下載相關(guān)補(bǔ)丁,網(wǎng)址為http://www.viaarena.com/?PageID=297#ATA,注意要選擇適合當(dāng)前自己內(nèi)核的驅(qū)動,接下來是升級內(nèi)核,給內(nèi)核打補(bǔ)丁。
| # rpm -ivh kernel-source-<Kernel Version>.i386.rpm |
安裝需要版本的源代碼包。把剛才鏈接中的補(bǔ)丁下載,將這個patch文件解開:
| # tar xzvf VIA IDE ATA133 Patch 8237 ver0.8.gz |
進(jìn)入解包出來的目錄,將需要的patch文件cp到 /usr/src目錄:
| # cp <Linux OS>-patch-<Kernel Version> /usr/src |
Kernel Version代表內(nèi)核的版本號,Linux OS代表不同的Linux系統(tǒng)。
| # cd /usr/src# patch -p0 < <Linux OS>-patch-<Kernel Version> |
將patch打入內(nèi)核中,重新編譯內(nèi)核:
| # cd /usr/src/linux-<Kernel Version> |
編輯 Makefile文件,把 "EXTRAVERSION=" 改成 "EXTRAVERSION=-test",這是給新的內(nèi)核命名。
| # cp /boot/config-XXX .config# make menuconfig ( config 或 xconfig也可以 ) |
確定 "ATA/IDE/MFM/RLL support/IDE,ATA and ATAPI Block devices"中的"VIA82CXXX chipset support"被選中。
開始編譯內(nèi)核:
| # make dep# make clean# make bzImage# make modules# make modules_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-testkernel /boot/vmlinuz-test ro root=/dev/hda1initrd /boot/initrd-test.img |
重新啟動系統(tǒng),使用剛剛編譯的內(nèi)核就會發(fā)現(xiàn)啟動信息中多出一行“l(fā)inux-test”。留意啟動時的信息,就會發(fā)現(xiàn)有下面一行信息:
| "VP_IDE: VIA vt8237 (rev 00) IDE UDMA133 Controller on pci00:0f.1" |
如果正常啟動,各種服務(wù)也都沒有問題,那么以后就可以用這個新的內(nèi)核了??梢杂? hdparm -i命令來調(diào)整硬盤的傳輸方式,檢查硬盤目前的傳輸模式。
| /dev/hda:Model=IC25N040ATCS05-0, FwRev=CS4OA63A, SerialNo=CLP429F4HALVPAConfig={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4BuffType=DualPortCache, BuffSize=7898kB, MaxMultSect=16, MultSect=16CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=78140160IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}PIO modes: pio0 pio1 pio2 pio3 pio4DMA modes: mdma0 mdma1 mdma2UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 //這里顯示所支持的硬盤傳輸模式AdvancedPM=yes: mode=0x80 (128) WriteCache=enabledDrive conforms to: ATA/ATAPI-5 T13 1321D revision 3:* signifies the current active mo |
查看一下當(dāng)前硬盤的工作模式,如果不是ATA133,則可以靈活使用控制硬盤傳輸模式的命令:
| # hdparm -d1 /dev/hda //enable DMA 模式# hdparm -d0 /dev/hda //disable DMA 模式# hdparm -X70 /dev/hda //將傳輸模式切換到UDMA 6 -ATA133模式 |
-X后數(shù)字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芯片組的驅(qū)動程序
AMD64平臺的nforce系列芯片組性能強(qiáng)勁,雖然可以用常規(guī)的方法加以驅(qū)動,但有可能無法發(fā)揮新設(shè)備的特性,或者該芯片組的網(wǎng)卡、聲卡無法使用。nVIDIA提供了更方便的RPM文件供使用,其中一些是源代碼tar文件,需要進(jìn)行編譯;有些是RPM包,直接進(jìn)行安裝就可以了。
nforce芯片組在Linux下驅(qū)動的下載地址為http://www.nvidia.com/object/linux_nforce_1.0-0275.html,其中包含了內(nèi)核的補(bǔ)丁、芯片組中對網(wǎng)卡及聲卡的驅(qū)動程序。下載經(jīng)過編譯的RPM包可以直接安裝:
| # rpm -ivh NVIDIA_nforce.athlon.rpm |
如果使用的不是SuSE或Red Hat Linux系統(tǒng),也可以下載帶有源代碼的.src.rpm包經(jīng)過編譯后再安裝:
| # rpm -ivh NVIDIA_nforce.src.rpm//將驅(qū)動程序的源程序文件安裝到系統(tǒng)中# cd /usr/src/redhat/SPECS# rpmbuild -bb NVIDIA_nforce.specs//編譯源驅(qū)動程序,編譯成可直接使用的rpm文件# cd /usr/src/redhat/RPM/i386///根據(jù)具體包的不同,也可能是i686、noarch等# rpm -ivh NVIDIA_nforce.i386.rpm//程序自動安裝包內(nèi)的驅(qū)動程序,并利用RPM包中的腳本自動配置 |
光驅(qū)的驅(qū)動及刻錄機(jī)的使用
1.光驅(qū)的驅(qū)動過程
編譯內(nèi)核時,在ATA/IDE/MFM/RLL選單中都會有IDE/ATAPI CDROM support的選項(xiàng),通常所見到的內(nèi)核都將這個部分編譯在了內(nèi)核中,所以不需設(shè)置光驅(qū)就可以使用。下面看一下系統(tǒng)啟動時光驅(qū)是如何驅(qū)動的:
| # 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驅(qū)動程序就可以將光驅(qū)驅(qū)動起來,不需要特別的配置。如果遇到的是SCSI光驅(qū),則一般的內(nèi)核也可以驅(qū)動,因?yàn)樵诰幾g內(nèi)核時,一般會將SCSI的內(nèi)容編譯出來。
如果沒有SCSI的光驅(qū)驅(qū)動,則可以自己手動編譯。make menuconfig(或xconfig)時,在SCSI support 選單中只要將SCSI support設(shè)置為“Y”或“M”(Y代表該部分編譯在內(nèi)核中,M表示該部分編譯為內(nèi)核模塊);SCSI CD-ROM support設(shè)置為“Y”或“M”;SCSI generic support設(shè)置為“Y”或“M”,這樣就可以驅(qū)動SCSI接口的光驅(qū)了。
2.CD/DVD刻錄機(jī)的驅(qū)動及使用
現(xiàn)在CD或DVD刻錄機(jī)越來越普及,那么在Linux下如何使用內(nèi)置的CD或DVD刻錄機(jī)呢?默認(rèn)的情況下,系統(tǒng)會將刻錄機(jī)視作只讀的驅(qū)動器,只加載普通的CD/DVD-ROM驅(qū)動,光驅(qū)無法寫入。
因此,需要用ide-scsi 偽設(shè)備驅(qū)動程序來驅(qū)動刻錄機(jī),將普通的IDE接口的設(shè)備模擬成一個SCSI接口的設(shè)備,這時才能向其中刻錄。我們可以使用三種方式來實(shí)現(xiàn)將IDE光驅(qū)模擬為SCSI光驅(qū)。假設(shè)使用GRUB作為bootloader,刻錄機(jī)安裝在第二個IDE接口,是主設(shè)備,則它默認(rèn)應(yīng)該為/dev/hdc 。
(1)更改/boot/grub/grub.conf文件在kernel /boot/vmlinuz-2.XXX ro root=/dev/hda1之后,添hdc=ide-scsi。
(2)更改 /etc/modules.conf文件添加下面兩行:
| ide-cd ignore=\"hdc\"ide-scsi |
(3)直接編譯內(nèi)核
不編譯ATA/IDE/MFM/RLL選單中的IDE/ATAPI CDROM support部分,但是要編譯對SCSI光驅(qū)的支持。
上面三種方法都是不希望系統(tǒng)用自帶的普通CD/DVD-ROM驅(qū)動程序去驅(qū)動刻錄機(jī),希望將刻錄機(jī)模擬成一個SCSI設(shè)備,其中第一種方法最簡單,成功后就可以通過以下命令來刻錄CD或DVD光盤。
| # mkisofs -Jv -V examplecd -o example.iso /root/ |
將/root/目錄下的文件做成一個名叫example.iso的光盤鏡像文件,該文件的卷標(biāo)為xamplecd。
還可通過命令將該文件加載到/mnt/iso文件夾中,可以自由添加刪除鏡像中的文件,但要注意不要超過光盤的容量。
| # mkdir /mnt/iso# mount -t iso9660 -o loop example.iso /mnt/iso |
調(diào)整/mnt/iso文件的內(nèi)容:
| # umount /mnt/iso |
最后使用cdrecord命令來刻錄:
| # cdrecord -scanbus |
查看SCSI總線中刻錄機(jī)的配置信息:
| Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 J?rg SchillingLinux sg driver version: 3.1.25Using 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.c1.75 02/10/21 Copyright 1997 J. Schilling').scsibus0:0,0,0 0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM0,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) * |
可以看到目前的光驅(qū)在SCSI總線的參數(shù),然后根據(jù)參數(shù)來輸入下面的命令刻錄光盤:
| # cdrecord -v -eject speed=24 dev=0,0,0 example.iso |
speed=24是以24倍速來刻錄光盤,dev=后加上剛才顯示的刻錄機(jī)的SCSI參數(shù)。
SCSI設(shè)備驅(qū)動過程
下面以Adaptec SCSI RAID 3200S卡為例,介紹SCSI RAID卡的驅(qū)動過程。這是常見的帶RAID功能的SCSI卡。在大部分編譯好的內(nèi)核中,都會編譯對SCSI設(shè)備的支持。但是需要知道,內(nèi)核中只是支持通用的SCSI總線,而具體的SCSI卡還需要加載相應(yīng)的驅(qū)動程序。SCSI芯片驅(qū)動的安裝比較特殊,下面分成兩種情況敘述。
1. Linux系統(tǒng)的啟動文件就是在SCSI硬盤上
這種情況下,SCSI設(shè)備的驅(qū)動程序不能像普通的驅(qū)動程序來安裝。因?yàn)槿绻到y(tǒng)啟動時沒有加載SCSI卡的驅(qū)動程序,那么根本無法訪問其它的Linux系統(tǒng)文件,所以必須在內(nèi)核啟動后立刻就加載該設(shè)備的驅(qū)動程序。以下是在Red Hat系統(tǒng)中具體的安裝過程。
(1)從Adaptec網(wǎng)站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 下載Adaptec SCSI RAID 3200S卡針對Red Hat 9.0的驅(qū)動程序,大家可以看到這是一個.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提示符出現(xiàn)時進(jìn)入安裝模式:
| boot: linux dd |
(4)按照向?qū)崾?#xff0c;將剛才制作的驅(qū)動軟盤插入。
以后的安裝過程就沒有什么不同了。安裝向?qū)?shí)際上將軟盤上的驅(qū)動程序放到了initrd的RAMDISK(內(nèi)存磁盤鏡像)文件中,每次內(nèi)核啟動后,都最先加載這個內(nèi)存虛擬硬盤的鏡像,利用里面的SCSI驅(qū)動程序來驅(qū)動SCSI RAID卡和卡上連接的硬盤。
2. Linux系統(tǒng)已經(jīng)安裝到一個IDE的硬盤上
這種情況跟其它的驅(qū)動程序沒有太大的區(qū)別,用modprobe或insmod將SCSI卡的驅(qū)動模塊加載到內(nèi)存中。(1)查看系統(tǒng)是否能訪問PCI設(shè)備:
| # lspci -v | grep -i i2o |
(2)從Adaptec網(wǎng)站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下載驅(qū)動程序,檢驗(yàn)是否可以加載模塊。
| # rpm -ivh dpt_i20-drv_2.5.0-rh9.rpm# modprobe dpt_i2o |
(3)察看是否可以訪問/dev/sda設(shè)備,或者已經(jīng)創(chuàng)建好/dev/md0設(shè)備。
加載以太網(wǎng)卡驅(qū)動模塊及參數(shù)調(diào)整
1.以太網(wǎng)卡的驅(qū)動過程
處理網(wǎng)絡(luò)方面任務(wù)是Linux的長項(xiàng),僅僅一兩兆的Linux內(nèi)核就可以對TCP/IP有很好的支持。下面首先了解一下最常見的網(wǎng)絡(luò)設(shè)備—以太網(wǎng)卡的驅(qū)動過程。
在內(nèi)核加載后,雖然已經(jīng)有了對TCP/IP協(xié)議的支持,但是具體的網(wǎng)絡(luò)接口設(shè)備的驅(qū)動并沒有加載。在內(nèi)核啟動后,將硬盤上的根分區(qū)mount到系統(tǒng)中,系統(tǒng)就會查找模塊配置文件/etc/modules.conf,并按照該文件記錄的內(nèi)容來加載模塊:
| # 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模塊,我的網(wǎng)卡是8139的100Mb以太網(wǎng)芯片,并將該模塊取別名叫做eth0。這表示第一個以太網(wǎng)的網(wǎng)絡(luò)接口,以后只要訪問eth0,就是訪問這塊網(wǎng)卡。然后系統(tǒng)會在/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 |
以上內(nèi)容在同一行中,表示8139too模塊依存于mii模塊和crc32模塊,8139too模塊的具體位置在/lib/modules/2.XXX/kernel/drivers/net/8139too.o,所有系統(tǒng)內(nèi)置的網(wǎng)絡(luò)驅(qū)動程序都在/lib/modules/2.XXX/kernel/drivers/net目錄下。
驅(qū)動模塊加載完成之后,可以直接通過命令ifconfig來設(shè)置網(wǎng)卡的IP地址,:
| # ifconfig eth0 192.168.1.1 |
這樣設(shè)置的IP地址重啟后就會失效,使用netconfig命令可以永久更改IP地址:
| # netconfig# service network restart 或者# /etc/rc.d/init.d/network restart` |
那么系統(tǒng)每次啟動時是怎樣配置網(wǎng)絡(luò)的呢?在Linux系統(tǒng)中,網(wǎng)絡(luò)作為一項(xiàng)服務(wù)被加載,配置文件是/etc/rc.d/init.d/network,在該文件中可以看到系統(tǒng)啟動網(wǎng)絡(luò)接口、綁定IP地址、設(shè)定靜態(tài)路由的過程,這個文件通過調(diào)用/etc/sysconfig/network-scripts/ifcfg-*的幾個文件來配置各個網(wǎng)卡的IP地址。比如有eth0,則會生成一個文件ifcfg-eth0,系統(tǒng)每次啟動時自動綁定eth0的IP地址:
| # cat /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0ONBOOT=yesBOOTPROTO=noneIPADDR=192.168.0.1NETMASK=255.255.255.0TYPE=Ethernet |
以上就為eth0設(shè)備綁定了192.168.0.1的IP地址。
| # cat /etc/sysconfig/network-scripts/ifcfg-eth0:1DEVICE=eth0:1ONBOOT=yesBOOTPROTO=noneIPADDR=192.168.1.1NETMASK=255.255.255.0TYPE=Ethernet |
以上的ifcfg-eth0:1文件為eth0設(shè)定了第二個IP地址192.168.1.1,這個文件是我添加的,注意DEVICE=eth0:1 跟上一個文件是不一樣的。
2.安裝3COM 3CR990網(wǎng)卡驅(qū)動程序
我們可以看到,系統(tǒng)內(nèi)置的網(wǎng)卡驅(qū)動程序在/lib/modules/2.4.XXX/kernel/drivers/net目錄下,如果網(wǎng)卡不在默認(rèn)支持的硬件中,可以用以下方法來安裝網(wǎng)卡驅(qū)動。
比如,我們有一塊3COM 3CR990網(wǎng)卡,可以到3COM網(wǎng)站上下載針對2.4內(nèi)核的驅(qū)動http://support.3com.com/infodeli/tools/nic/linux/3c990-1.0.0a.tar.gz。然后解壓縮下載的文檔到解開的目錄中:
| #t tar xvfz 3c990-1.0.0a.tar.gz# make |
此時當(dāng)前文件下將會生成3c990.o的驅(qū)動模塊。
| # 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.調(diào)整以太網(wǎng)卡的參數(shù)
有時在加載完網(wǎng)卡的驅(qū)動后,如果網(wǎng)卡的狀態(tài)不正確,比如驅(qū)動起一塊網(wǎng)卡,但是它在100Mb的速度上工作很不穩(wěn)定,就可以使用mii-tool命令調(diào)整以太網(wǎng)卡的屬性。目前多數(shù)以太網(wǎng)卡為10BaseT與100BaseTx的10Mb/100Mb自適應(yīng)網(wǎng)卡,也有較新的支持1000BaseT的千兆以太網(wǎng)卡。
下面介紹mii-tool命令的一些用法:
(1)顯示當(dāng)前網(wǎng)卡所使用的以太網(wǎng)類型,目前這塊網(wǎng)卡使用的是100baseTx的全雙工工作方式。
| # mii-tooleth0: negotiated 100baseTx-FD flow-control, link ok |
(2)顯示當(dāng)前的網(wǎng)卡支持的所有以太網(wǎng)類型。
| # mii-tool -veth0: negotiated 100baseTx-FD flow-control, link okproduct info: vendor 00:08:18, model 22 rev 2basic mode: autonegotiation enabledbasic status: autonegotiation complete, link okcapabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HDadvertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-controllink partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control |
(3)強(qiáng)制eth0使用10baseT-FD的方式(10Mb全雙工的方式)工作。
| # mii-tool -F 10baseT-FD eth0 |
(4)解除eth0的強(qiáng)制狀態(tài),讓eth0自動偵測使用什么方式通信。
| # mii-tool -Rresetting the transceiver... |
Modem和ADSL驅(qū)動安裝及PPP連接設(shè)置
1.外置Modem的驅(qū)動程序安裝
Modem分為外置和內(nèi)置兩種。比較而言,外置的Modem配置較容易,使用方便。Modem一般接在串口上,在Linux中串口對應(yīng)的設(shè)備文件為/dev/ttyS*,如果是COM1口,則對應(yīng)/dev/ttyS0。如果不知道連接的是哪一個COM口,可以先給Modem加電,用以下命令測試:
| # echo AT > /dev/ttyS0 |
如果Modem的TR燈亮,則表明該Modem接到COM1口上;如果不亮,再試一下/dev/ttyS1文件。知道了Modem連接的是哪一個串口后,就可以撥號了。撥號的過程實(shí)際上是通過Modem建立PPP(點(diǎn)對點(diǎn)通信協(xié)議)的連接。
在命令行下,可以使用pppd進(jìn)行撥號,常見的Linux系統(tǒng)中會安裝這個撥號程序,大家可以看一下/etc/ppp目錄下是否有相關(guān)的腳本文件,如果沒有可以下載并安裝ppp包ftp://cs.anu.edu.au/pub/software/ppp。將包安裝后,可以查找ppp-on和ppp-on-dialer文件,把文件復(fù)制到/etc/ppp文件夾下,修改ppp-on文件如下幾個地方:
| TELEPHONE=270 //ISP提供的上網(wǎng)電話號碼ACCOUNT=user //ISP提供的賬號名稱PASSWORD=123 //登錄密碼LOCAL_IP=0.0.0.0 //PPP連接的IP地址,0.0.0.0表示由ISP動態(tài)分配REMOTE_IP=0.0.0.0 //遠(yuǎn)端IP地址,一般為0.0.0.0NETMASK=255.255.255.0export TELEPHONE ACCOUNT PASSWORD \DIALER_SCRIPT=/etc/ppp/ppp-on-dialer \ //查找另一個必須的配置腳本exec /usr/sbin/pppd lock modem crtscts /dev/ttyS0 115200 \ //設(shè)置COM口及速度asyncmap 0 kdebug 4 \$LOCAL_IP:$REMOTE_IP noipdefault netmask $NETMASK defaultroute \connect $DIALER_SCRIPT& |
給這個文件加上執(zhí)行權(quán)限:
| # chmod 700 ppp-on# ./ppp-on |
這樣就可以撥號上網(wǎng)了。這種方法可以適用于多數(shù)的Linux系統(tǒng),如果是Red Hat Linux,可以使用redhat-config-network命令輕松地在文本界面上配置撥號連接,如圖1。
?
圖1 文本界面下的redhat-config-network
如果啟動了X-Window,GNOME與KDE都自帶圖形界面的撥號程序。
2.內(nèi)置Modem驅(qū)動程序的安裝
內(nèi)置Modem比起外置的Modem配置要麻煩一些,下面在Dell D600筆記本安裝內(nèi)置Modem的驅(qū)動程序。到下面網(wǎng)址下載驅(qū)動http://www.linuxant.com /drivers/hsf/full/downloads.php,選定適合本系統(tǒng)內(nèi)核版本的驅(qū)動程序,下載后是一個RPM包。
| #rpm-ivhhsfmodem-6.03.00lnxt04061800full _k2.4.21_4.EL-1rh.i686.rpm... ...Config for modem unit 0: /dev/ttySHSF0Device instance: 0-PCI-8086:24c6-14f1:5422HW revision : CXT22HW profile name: hsfmc97ichRegistration ID: 115C-247C-BFC0License owner : unknownLicense key : FREELicense status : FREE (max 14.4kbps data only)Current region : CHINA (T.35 code: 0026)The /dev/modem alias (symlink) points to /dev/ttySHSF0…… |
由上可以看到,安裝程序自動建立了一個設(shè)備文件/dev/ttySHSF0,并且為它創(chuàng)建了名叫/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文件不是標(biāo)準(zhǔn)的COM口,而是該驅(qū)動程序自己注冊的240類型的驅(qū)動程序。
實(shí)際上,驅(qū)動內(nèi)置Modem的過程是先加載驅(qū)動程序,模擬一個ttyS的串口設(shè)備文件,然后像給普通外置Modem建立PPP鏈接那樣,為內(nèi)置的Modem建立撥號連接,不過這時要選定/dev/modem作為設(shè)備文件。
3.ADSL及寬帶連接驅(qū)動
ADSL設(shè)備通常是通過以太網(wǎng)卡來撥號,建立PPP鏈接,這時的PPP協(xié)議叫做PPPoE,就是PPP over Ethernet(在以太網(wǎng)上的點(diǎn)對點(diǎn)通信協(xié)議),一般不需要任何ADSL Modem的驅(qū)動,只需直接建立PPPoE連接。
在命令行下,下載ADSL撥號程序rp-pppoe,可以通過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 。
配置非常簡單,下載包解壓縮后直接運(yùn)行下面代碼:
| # ./go |
則出現(xiàn)PPPoE配置向?qū)?#xff0c;會提示輸入用戶名和密碼,然后使用以下命令建立連接:
| # adsl-start |
或者
| # ifup ppp0 |
系統(tǒng)中會在配置完后出現(xiàn)一個SysV的服務(wù):
| # chkconfig --list adsladsl 0:off 1:off 2:off 3:off 4:off 5:off 6:off# chkconfig adsl on |
這樣以后每次啟動就會啟用ADSL撥號。
如果不用rp-pppoe的向?qū)?#xff0c;也可以在X-Window中直接使用下面命令(如圖2):
| #neat |
或者
| #redhat-config-network |
上面兩個命令是Red Hat Linux中的命令,可以在圖形界面下建立PPPoE的連接,其它版本的Linux也應(yīng)該有自己的ADSL撥號程序。
如圖3所示中,單擊上面的“New”建立新連接,如VPN、eth、ISDN、Modem等,則出現(xiàn)圖4所示頁面。
圖4里的xDSL并不是只有ADSL等DSL的連接,一般的PPPoE連接都可以使用,比如即使是建立類似網(wǎng)通的寬帶LAN接入形式也應(yīng)該選擇這一項(xiàng)。單擊“Forward”進(jìn)行下一步。
輸入ADSL或LAN寬帶接入的連接信息,如圖5所示。然后單擊“Forward”。
建立好了鏈接后,在/etc/sysconfig/network-scripts/ 目錄中會出現(xiàn)ifcfg-ppp0的文件,可以通過以下命令讓系統(tǒng)通過ADSL撥號上網(wǎng),建立寬帶連接;也可以用剛才的向?qū)芴柹暇W(wǎng),如圖6。
| # ifup ppp0 |
有些地方提供LAN寬帶接入方式也需要進(jìn)行撥號,如北京網(wǎng)通LAN接入寬帶,它實(shí)際上使用跟ADSL一樣的PPPoE協(xié)議,建立連接時與ADSL的撥號方式一樣,也可以用rp-pppoe或redhat-config-network來建立撥號連接,運(yùn)行向?qū)r沒有區(qū)別。
4.常見故障處理
如果在配置網(wǎng)絡(luò)時出現(xiàn)問題,可遵循以下步驟檢查:
(1)用ifconfig看一下網(wǎng)絡(luò)接口是否啟動,IP地址是否綁定,如果網(wǎng)絡(luò)接口沒有啟動。例如,PPP0沒有啟動,可使用ifup ppp0命令。如果IP地址沒有綁定,使用命令ifconfig eth0 192.168.1.1設(shè)置地址;也可以使用命令netconfig設(shè)置IP地址、網(wǎng)關(guān)及DNS服務(wù)器的地址。然后用service network restart重啟網(wǎng)絡(luò)。
(2)如果網(wǎng)絡(luò)接口及IP沒有問題,但是不能上網(wǎng),可使用ping 211.XXX的一個外網(wǎng)地址,如果能通,則應(yīng)該是DNS服務(wù)器的問題,更改/etc/resolv.conf文件中的nameserver的地址,換一個能用的DNS服務(wù)器的地址。
(3)如果都沒有問題就是ping不通外網(wǎng)的IP,可使用命令route -n看一下默認(rèn)網(wǎng)關(guān)是否正確,如果不正確使用route del/add來設(shè)置默認(rèn)網(wǎng)關(guān),使用netconfig可以永久更改默認(rèn)網(wǎng)關(guān)。
從上面的講解中可以看到,我們遇到的情況可能是千差萬別的,安裝的方式也是多種多樣的。但是,不論哪一種設(shè)備應(yīng)該首先理解這種設(shè)備的驅(qū)動方式,然后再來了解具體的驅(qū)動程序。
圖形化的界面能讓我們方便地享用Linux的強(qiáng)大功能,而且現(xiàn)在Linux的圖形化界面已經(jīng)越來越完善。Linux中經(jīng)常使用的圖形顯示系統(tǒng)是X-Window,但是由于其與常見的MS Windows系統(tǒng)有很大的差異,所以在使用時常會遇到一些問題,比如無法驅(qū)動顯卡、顯示器參數(shù)錯誤、花屏和圖形界面無法啟動等。
因此,本文將在簡介X-Window的基礎(chǔ)上,介紹如何安裝常見顯卡和聲卡的驅(qū)動程序、相關(guān)的配置文件,以及參數(shù)調(diào)整等內(nèi)容。
X-Window概述
X-Window是一套顯示系統(tǒng),包括Server端和Client端,他們之間使用X協(xié)議互相通信。X誕生于1984年,在較短的時間內(nèi)它就發(fā)布到了11個版本—X11。X11經(jīng)過多年的發(fā)展,現(xiàn)在已經(jīng)發(fā)布到X11R6。
X Client將希望顯示的圖形發(fā)送到X Server,X Server將圖形顯示在顯示器上,同時為X Client提供鼠標(biāo)、鍵盤的輸入服務(wù)。因?yàn)镃/S結(jié)構(gòu),可以將X的Server和Client分別運(yùn)行在兩臺計(jì)算機(jī)上,甚至可以安裝一些軟件,讓W(xué)indows作為X Server,讓Linux作為Client,將KDE或GNOME等桌面環(huán)境顯示到Windows主機(jī)上來。
使用Xmanager 1.3.9,在Windows XP上運(yùn)行X Server,然后運(yùn)行一臺Linux主機(jī)下的startkde,將KDE桌面環(huán)境顯示在Windows XP下。
使用startx命令可以啟動X-Window系統(tǒng)。實(shí)際上,是在一臺計(jì)算機(jī)上同時運(yùn)行Server和Client,在運(yùn)行startx之后,首先啟動的是XFree86,它是Linux平臺上最常用的X Server端;然后,又運(yùn)行X的Client程序,如startkde(KDE的啟動腳本)或gnome-session(GNOME的啟動腳本)。
它們利用X協(xié)議連接本機(jī)的X Server,將圖形顯示出來。
Linux上經(jīng)常使用的X
Server程序就是XFree86,它的任務(wù)是驅(qū)動顯示卡、顯示器、鼠標(biāo)、鍵盤等設(shè)備,為X Client提供顯示、輸入服務(wù)等。
XFree86的主要文件目錄如下:
XFree86文件所在的主要目錄為/usr/X11R6;
XFree86的可執(zhí)行程序文件目錄為/usr/X11R6/bin;
XFree86自帶的驅(qū)動程序所在目錄為/usr/X11R6/lib/modules/drivers;
X的配置文件及啟動腳本所在目錄為/etc/X11;
XFree86的啟動配置文件目錄為/etc/X11/XF86Config或XF86Config-4,如果這兩個文件都存在,XF86Config-4文件優(yōu)先。
XFree86自帶了一些設(shè)備的驅(qū)動,具體位置在/usr/X11R6/lib/modules/drivers,如果機(jī)器顯示卡太新,無法使用X-Window,比如使用了Intel的855GM芯片組中集成的顯卡無法啟動X,則可以考慮升級XFree86。
當(dāng)前XFree86成熟的版本是4.3,最新的版本4.4正在完善之中。從以下的鏈接中可獲得4.3版的XFree86所支持的所有顯卡列表http://xfree86.linuxforum.net/4.3.0/RELNOTES2.html#3。
XFree86官方版本下載網(wǎng)站是http://www.xfree86.org/downloads.html ,中國的鏡像網(wǎng)站是http://xfree86.linuxforum.net/downloads.html。
也可以從中科紅旗網(wǎng)站http://www.redflag-linux.com/source/download/XFree86_driver4.3.tgz下載。
下載后安裝tgz包:
| # tar zxvf XFree86_driver4.3.tgz# sh install.sh |
安裝Intel i865G芯片組顯卡驅(qū)動
Intel i865G是一種比較新的顯卡芯片組,它內(nèi)置了顯示模塊,但是安裝較早的Linux版本X-Window有可能無法啟動。處理這個問題的方法是,一種是直接升級到XFree86 4.3;另一種是通過Intel官方的網(wǎng)站http://downloadfinder. intel.com/scripts-df/support_ intel.asp?iid=HPAGE+header_support_download&下載驅(qū)動程序。
在該鏈接的下載頁面可以選擇下載RPM包,也可以選擇下載tar.gz的壓縮文檔。盡管這兩種的安裝方式略有不同,但是經(jīng)過以下三步基本上可以讓顯卡在X-Window中正常使用。
1.安裝驅(qū)動程序
(1)選擇下載RPM包:
| # rpm -Uvh --force intelgraphics_ 20040607_i386.rpm |
(2)選擇下載的是tar.gz壓縮包要執(zhí)行下面代碼:
| # tar xzvf IntelGraphics_060704.tar.gz# cd dripkg# ./install.sh |
這時程序?qū)⒆詣影惭b,安裝程序?qū)⒏?usr/X11R6/modules/drivers/i810_drv.o的驅(qū)動程序,使其支持新的i865G芯片組中的顯卡。
2.選擇驅(qū)動程序
有三種方法可以選擇驅(qū)動程序:
(1)如果是Red Hat系統(tǒng)則可以運(yùn)行下面代碼:
| # redhat-config-xfree86 |
圖2顯示為使用redhat-config-xfree86。這個命令可以自動偵測顯卡、配置分辨率和色深,以及選擇Advanced頁面,然后單擊Video Card的Configure按鈕,選擇正確的顯卡。但是,如果是Red Hat Linux 8.0之前版本,則沒有這個命令,應(yīng)該運(yùn)行下面代碼:
| # Xconfigurator |
這樣程序會一步步提示選擇正確的驅(qū)動程序。
這兩種方法都會將結(jié)果寫入/etc/X11/XF86Config配置文件。
(2)直接更改XFree86的配置文件
直接更改XFree86的配置文件這種方法在Linux系統(tǒng)中比較通用,運(yùn)行下面命令:
| # vi /etc/X11/XF86Config或者XF86Config-4 |
在其中找到下面代碼,將Driver后面改為i810,表示使用i810_drv.o驅(qū)動程序:
| Section "Device"Identifier "Videocard0"Driver "i810"VendorName "Videocard vendor"BoardName "Intel 865"EndSection |
該配置文件中其它需要注意的地方如下:
| Section "Monitor"Identifier "Monitor0"VendorName "Monitor Vendor"ModelName "Unknown monitor"HorizSync 31.5 - 37.9VertRefresh 50.0 - 70.0Option "dpms"EndSection |
上面這個部分是設(shè)置顯示器的類型,不知道自己的顯示器叫什么名字沒關(guān)系,但需要將顯示器的垂直刷新率和水平刷新率正確設(shè)置,這兩個參數(shù)可以查看顯示器的說明書。以上是15英寸顯示器最常用的頻率,如果這個參數(shù)設(shè)置錯誤,顯示器就會花屏或黑屏。
| Section "Screen"Identifier "Screen0"Device "Videocard0"Monitor "Monitor0"DefaultDepth 16SubSection "Display"Depth 16Modes "1024x768" "800x600" "640x480" //默認(rèn)會使用最高的分辨率EndSubSectionEndSection |
| # man XF86Config |
(3)讓XFree86自己生成XF86Config文件
運(yùn)行下面命令:
| # XFree86 -configure |
XFree86將自動偵測顯卡及顯示器,在用戶的主目錄下生成一個名叫XF86Config.new的文件??梢杂靡韵旅顪y試這個文件運(yùn)行是否正常:
| # XFree86 -xf86config ~/XF86Config.new |
這個代碼是指定X Server使用 ~/XF86Config.new作為配置文件。
如果有白色X型的光標(biāo)顯示,就可以按“Ctrl+Alt+Backspace”結(jié)束X。然后運(yùn)行下面的命令,用新的配置文件來替換系統(tǒng)配置文件。
| # cp ~/XF86Config.new /etc/X11/XF86Config |
3.啟動X-Window
運(yùn)行startx,啟動X-Window。這種方式依賴于控制臺(tty),將X-Window作為當(dāng)前控制臺的Shell子進(jìn)程來運(yùn)行。
另一種方法是運(yùn)行桌面管理程序gdm(GNOME桌面管理程序)、kdm(KDE的桌面管理程序)或xdm(XFree86的桌面管理程序)。這種方式不依賴于當(dāng)前的Shell,即使當(dāng)前Shell關(guān)閉,X-Window一樣會繼續(xù)運(yùn)行。
以上三步是Linux下安裝X-Window顯卡驅(qū)動程序的通常步驟,絕大多數(shù)顯卡都可以經(jīng)過以上的步驟正常使用,所不同的是下載地址和具體的驅(qū)動程序的生成方式可能不一樣。 比如,筆記本電腦上常用的Intel 815集成顯卡的安裝,我們同樣可從Intel網(wǎng)站上下載815顯卡部分的RPM包,網(wǎng)址為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.rpm |
然后重復(fù)以上的第二至第三步:
| # redhat-config-xfree86 //選擇正確的驅(qū)動程序# startx //啟動X-Window |
安裝其它顯卡的驅(qū)動
1. 安裝GeForce FX 6800顯卡驅(qū)動
如果購買了GeForce FX 6800顯卡(包含其它nVIDIA顯卡),希望玩玩剛剛發(fā)布的DOOM3,結(jié)果卻發(fā)現(xiàn)X-Window無法啟動,這時可以去nVIDIA網(wǎng)站http://www.nvidia.com/object/linux.html下載最新的顯卡驅(qū)動。
nVIDIA的Linux驅(qū)動程序做得相當(dāng)精細(xì),下載后得到文件NVIDIA-Linux-x86-1.0-6106-pkg1.run,運(yùn)行它就可以看到一個tui(文本用戶界面):
| # chmod 700 NVIDIA-Linux-x86-1.0-6106-pkg1.run //設(shè)置執(zhí)行權(quán)限# ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run. //運(yùn)行安裝程序 |
程序?qū)徊讲教崾景惭bnVIDIA的驅(qū)動。該驅(qū)動包含兩部分:一部分是內(nèi)核驅(qū)動,用于命令行界面的驅(qū)動,在安裝這部分時,如果不是它支持的幾種內(nèi)核版本需要編譯內(nèi)核;另一部分是針對XFree86的驅(qū)動。
運(yùn)行中常常出現(xiàn)的錯誤是在編譯內(nèi)核時找不到內(nèi)核的源文件,用以下方法可以解決這個問題。先下載安裝Kernel的源文件:
| # rpm -ivh kernel-sourceXXX.rpm //在Red Hat安裝光盤上或者# tar zxvf linux-2.XXX.tar.gz //可以從網(wǎng)上下載,比如kernel.org |
指定源文件位置:
| # ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run. --kernel-source-path=<kernel 源文件目錄的位置> |
安裝驅(qū)動程序后,如果有問題可以參考剛才安裝Inter i865顯示驅(qū)動的方法,來調(diào)整顯卡的驅(qū)動和參數(shù),運(yùn)行 redhat-config-xfree86、XFree86 -configure或直接更改/etc/X11下的XF86Config文件。另外,如果希望直接得到nVIDIA的驅(qū)動程序,不想自動安裝,可以運(yùn)行以下命令將包中的文件解開。
| # ./ NVIDIA-Linux-x86-1.0-6106-pkg1.run -x |
在./NVIDIA-Linux-x86-1.0-6106-pkg1/usr/share/doc目錄下,有一個XF86Config.example的文件,如果遇到XF86Config文件配置有問題,可以直接查看該文件中的顯卡驅(qū)動部分內(nèi)容。
2.安裝ATI 9800顯卡驅(qū)動
從下面地址http://www2.ati.com/drivers/linux/fglrx-4.3.0-3.11.1.i386.rpm可以下載ATI 9800顯卡驅(qū)動fglrx-4.3.0-3.11.1.i386.rpm文件,然后執(zhí)行:
| # rpm -Uvh --force fglrx-4.3.0-3.11.1.i386.rpm //強(qiáng)制升級/安裝驅(qū)動程序包 |
注意,要看看是否有錯誤發(fā)生,如果有請仔細(xì)查看出錯信息。
| # fglrxconfig //使用ATI的配置工具配置驅(qū)動程序 |
該程序會提問一些問題,當(dāng)問到是否創(chuàng)建一個XF86Config-4文件時,要回答“y”,這樣就可以生成新的配置文件。
| # startx //重新啟動X# fglrxinfo //可以查看驅(qū)動程序是否安裝成功 |
3.常見顯卡驅(qū)動的下載地址
◆nVIDIA顯卡驅(qū)動程序地址http://www.nvidia.com/object/linux.html。
◆ATI顯卡驅(qū)動程序地址http://www.ati.com/support/driver.html(ATI網(wǎng)站訪問速度較慢,可以多試幾次)。
◆VIA芯片集成顯卡驅(qū)動程序http://www.viaarena.com/?PageID=296。
◆SIS顯卡驅(qū)動程序地址http://www.mypcera.com/qu/2/soft1/xsis.rpm。
◆Intel芯片組顯卡驅(qū)動程序地址http://downloadfinder.intel.com/scripts-df/support_intel.asp?iid=HPAGE+ header_support_download&。
◆Intel筆記本迅馳顯示驅(qū)動程序地址http://downloadfinder.intel.com/scripts-df/filter_results.asp?strOSs=39&strTypes=DRV%2CARC&ProductID= 922&OSFullName= Linux*&submit=Go%21。
ATI系列筆記本驅(qū)動程序要升級XFree86。
如果實(shí)在找不到顯卡驅(qū)動程序,可以試著按照上面的介紹升級XFree86到4.3或4.4。它自帶有一些顯卡驅(qū)動程序,如ATI M9000筆記本顯卡、SIS顯卡等驅(qū)動程序。
4.內(nèi)核支持顯示模式調(diào)整
在命令行界面下,可以調(diào)整內(nèi)核的顯示模式,讓它使用較高分辨率,設(shè)置方法如下。
(1)使用GRUB作為boot loader,則運(yùn)行命令:
| # vi /boot/grub/grub.conf |
在kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/行后添加vga=0x314。這是設(shè)置顯示模式,vga是Kernel的參數(shù),0x314表示的是16進(jìn)制的314換算成10進(jìn)制為788,所以vga=788跟與vga=0x314是一樣的。我們把該行改為下面一行:
| kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/ vga=0x314 |
這時會發(fā)現(xiàn)Linux啟動時顯示一個企鵝圖標(biāo),使用的是800×600分辨率,vga參數(shù)含意如表1。
(2)使用LILO作為boot loader,則在/etc/lilo.conf文件中將append處改為如下一行:
| append=" root=LABEL=/ vga=0x314" |
之后運(yùn)行下面命令:
| # lilo -v |
使用新的配置文件更新MBR。
常見顯卡故障的處理
當(dāng)無法啟動X-Window時,應(yīng)該仔細(xì)查看出錯信息。以下為X-Window啟動不成功的常見原因。
1.當(dāng)屏幕為全黑或花屏?xí)r,一般是顯示器參數(shù)設(shè)置有誤。首先應(yīng)該按“Ctrl+Alt+Backspace”,結(jié)束X-Window。然后查看顯示器說明書,在/etc/X11/XF86Config-4或XF86Config文件中,將水平和垂直刷新率改成正確的值,或者運(yùn)行redhat-config-xfree86和XFree86-configure。
2.XF86Config文件損壞或丟失,運(yùn)行redhat-config-xfree86或XFree86 -configure。
3.沒有控制臺所有權(quán)。比如,以shrek用戶登陸,然后用命令“su - joan”切換為用戶joan,這時使用startx就會出錯,提示沒有該控制臺的所有權(quán)。這時,可以用exit退出joan的Shell,然后再運(yùn)行startx。
4.硬盤沒有空間。在使用KDE或GNOME時,每次啟動X-Window都要占用一定空間放臨時文件,如果/tmp或主目錄下無法寫入文件,這時X-Window就會出現(xiàn)一些奇怪的錯誤。
5.顯卡驅(qū)動有問題。下載安裝正確的驅(qū)動,運(yùn)行redhat-config-xfree86或XFree86 -configure。
6.xfs服務(wù)沒有啟動。xfs是字體服務(wù),它不啟動則X-Window無法啟動。使用下面命令可以啟動該服務(wù):
| # service xfs start |
或者
| # /etc/rc.d/init.d/xfs start |
如果希望該服務(wù)每次自動啟動,則使用下面命令:
| #chkconfig xfs on |
聲卡驅(qū)動程序概述
Linux下聲卡的驅(qū)動是作為普通內(nèi)核模塊來加載的,系統(tǒng)內(nèi)置的聲卡驅(qū)動在/lib/modules/2.XXX/kernel/drivers/sound/目錄下。以下是系統(tǒng)內(nèi)置的聲卡驅(qū)動模塊:
| # 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 |
結(jié)合前一篇所介紹的內(nèi)容可以知道,系統(tǒng)在啟動時會通過以下兩個文件來加載模塊:/etc/modules.conf和/etc/rc.d/rc.sysinit,聲卡也是在這里加載的。如果新安裝了一塊聲卡,在Red Hat Linux中則可以使用kudzu命令來搜索聲卡,并且自動配置。如果系統(tǒng)中沒有內(nèi)置的驅(qū)動程序,則可以按以下步驟來安裝(以VIA的8237南橋集成聲卡為例)。
從VIA的網(wǎng)站http://www.viaarena.com/?PageID=294上下載最新的驅(qū)動程序LinuxAudiov230.gz。
解壓縮:
| # tar xzvf LinuxAudiov230.gz |
編譯src.rpm包:
| # rpmbuild --rebuild viaudiocombo-2.2-3.src.rpm |
如果沒有rpmbuild命令則運(yùn)行:
| # rpm --rebuild viaudiocombo-2.2-3.src.rpm# cd /usr/src/RPM/RPMS/iX86 //這里的X-Window根據(jù)機(jī)器情況而不同# rpm -ivh --force viaudiocombo-2.2-3.iX86.rpm //安裝編譯好的驅(qū)動程序 |
Intel主板的集成聲卡一般使用的是i810_audio.o作為驅(qū)動,目前新版本Linux內(nèi)置的驅(qū)動可以直接支持。
Linux“萬能聲卡驅(qū)動”安裝
計(jì)算機(jī)中的聲卡千差萬別,除了Intel、VIA等大廠的聲卡外,大多數(shù)聲卡都沒有專門寫Linux下的聲卡驅(qū)動程序。那么怎樣在Linux中使用找不到驅(qū)動程序的聲卡呢?可以試一試Linux下的“萬能聲卡驅(qū)動”,它可以驅(qū)動大量的聲卡。
目前主要有兩種萬能聲卡驅(qū)動:一種是ALSA(Advanced Linux Sound Architecture),它采用GPL,針對Linux系統(tǒng)源代碼公開,主頁是http://www.alsa-project.org/;另一種是OSS(Open Sound System),它是商用軟件,針對主流Unix系統(tǒng),Linux也在它的支持之列,主頁是http://www.opensound.com/。
1.安裝ALSA驅(qū)動程序
(1)查找聲卡型號
從http://www.alsa-project.org/alsa-doc/處查找是否有使用的聲卡型號,如果有則一定要從此處點(diǎn)擊后面“details”鏈接來查找安裝方法。這里以安裝創(chuàng)新Soundblaster Audigy聲卡的驅(qū)動為例,其它的聲卡請查看details中的具體方法。
在安裝之前需要安裝內(nèi)核的源代碼包,可以從Red Hat光盤上安裝kernel-sourceXXX.rpm包,或者從kernel.org網(wǎng)站上下載當(dāng)前系統(tǒng)版本的源代碼包。
安裝源碼包:
| # rpm -ivh kernel-soureXXX.rpm |
或者
| # tar zxvf kernel-2.XXX.tar.gz# cd /usr/src/linux2.XXX/ //到源代碼的目錄中# cp /boot/config-2.XXX ./.config //將當(dāng)前版本的內(nèi)核配置文件拷貝至源碼目錄 |
(2)下載驅(qū)動程序
從http://www.alsa-project.org/alsa/ftp/driver/下載驅(qū)動程序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)安裝驅(qū)動
| # 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.confalias char-major-116 sndalias snd-card-0 snd-emu10k1# module options should go herealias char-major-14 soundcorealias sound-slot-0 snd-card-0alias sound-service-0-0 snd-mixer-ossalias sound-service-0-1 snd-seq-ossalias sound-service-0-3 snd-pcm-ossalias sound-service-0-8 snd-seq-ossalias sound-service-0-12 snd-pcm-oss |
但是,ALSA驅(qū)動后的聲卡默認(rèn)是不發(fā)聲的,可以用ALSA mixer來開啟。直接運(yùn)行以下命令可以全部開啟所有的音量:
| #./audunmute |
也可以使用以下命令來設(shè)置音量的大小:
| # amixer -c 0 sset 'Master',0 100%,100% unmute# amixer -c 0 sset 'PCM ',0 100% unmute |
可以編輯/etc/modules.conf文件,添加如下一行讓聲卡每次啟動時調(diào)整音量為100%:
| post-install snd-card-0 amixer -c 0 sset 'Master',0 100%,100% unmute && amixer -c 0 sset 'PCM ',0 100% unmute |
2.設(shè)置OSS聲卡驅(qū)動
(1)從http://www.opensound.com/download.cgi選擇下載OSS的版本,如針對2.4內(nèi)核的驅(qū)動,或者針對2.6內(nèi)核的驅(qū)動。
以下是2.4內(nèi)核驅(qū)動的下載地址ftp://www.se.opensound.com/pub/oss/linux/oss3991e-linux-x86-v24.tar.gz。
(2)安裝驅(qū)動程序:
| # tar zxvf oss3991e-linux-x86-v24.tar.gz#./oss-install |
將會自動安裝其中包含的驅(qū)動程序。安裝驅(qū)動模塊前,請使用命令modprobe -r或rmmod把原有的驅(qū)動程序卸載。
以上為Linux聲卡驅(qū)動的大致安裝過程。因?yàn)長inux下的聲卡眾多,不可能有一個固定的安裝步驟,但大致的步驟是,先編譯出針對目前內(nèi)核版本的驅(qū)動模塊,然后再使用insmod或modprobe加載上去,更多的是通過/etc/modules.conf文件自動加載。
理解/etc/modules.conf文件很重要,這是大多數(shù)Linux系統(tǒng)加載模塊的文件,有些Linux是/etc/conf.modules文件。如果聲卡是非即插即用的,可以在/etc/modules.conf文件中使用options snd-card-0 io=0x300 irq=5來設(shè)置I/O資源及中斷號。
盡管各種數(shù)碼設(shè)備越來越多,但是Linux在對它們的配置上還沒有做到像Windows一樣方便,很多人正是因?yàn)樾膼鄣臄?shù)碼相機(jī)無法在Linux下使用,而不得不保留一個Windows系統(tǒng)。所以,掌握如優(yōu)盤、移動硬盤、數(shù)碼相機(jī)等設(shè)備在Linux下的驅(qū)動方法,對于熟練使用Linux而言是必備的技能。
這一講將會介紹常見USB、IEEE1394、PCMCIA等移動設(shè)備的驅(qū)動概念和安裝技巧,為讀者更好地配置和使用這些設(shè)備提供幫助。
USB設(shè)備驅(qū)動概述
USB是通用串行總線(Universal Serial Bus),是在1994年由Intel、NEC、微軟和IBM等公司共同提出的。USB的目的在于將眾多的接口(串口、并口、PS2口等),改為通用的標(biāo)準(zhǔn)。它僅僅使用一個4針插頭作為標(biāo)準(zhǔn)插頭,并通過這個標(biāo)準(zhǔn)接頭連接各種外設(shè),如鼠標(biāo)、鍵盤、游戲手柄、打印機(jī)、數(shù)碼相機(jī)等。USB接口的特點(diǎn)是支持熱插拔,支持單接口上接多個設(shè)備等。
USB的優(yōu)點(diǎn)此處不再贅述,我們主要來看一看Linux對USB的支持。USB采用串行方式傳輸數(shù)據(jù),USB 1.1最大數(shù)據(jù)傳輸率為12Mbps,Linux內(nèi)核為2.4以上版本都可以支持。
USB 2.0規(guī)范是由USB 1.1規(guī)范演變而來的,它理論上速度較1.1提高了40倍,達(dá)到了480Mb/s,但目前常見的USB 2.0設(shè)備只能達(dá)到理論值的一半。 Linux內(nèi)核2.4.19版本開始對USB 2.0進(jìn)行支持。
除了內(nèi)核的版本要對USB接口進(jìn)行支持之外,還要確定目前的系統(tǒng)是否編譯了USB的驅(qū)動模塊。如果讓Linux系統(tǒng)支持USB設(shè)備,還需要一些驅(qū)動模塊。我們都知道內(nèi)置的驅(qū)動程序一般都在 /lib/modules/2.4XXX/kernel/drivers目錄中。這個目錄中會有usb及幾個子目錄,可以從中找到以下的幾個USB關(guān)鍵基礎(chǔ)模塊:
usbcore.o 所有USB設(shè)備都需要的基本驅(qū)動模塊;
host/ehci-hcd.o USB 2.0設(shè)備支持;
host/usb-uhci.o Intel VIA等芯片組USB部分的驅(qū)動;
host/usb-ohci.o iMac、SiS、Ali等非Intel芯片組USB部分的驅(qū)動;
storage/usb-storage.o USB接口的存儲設(shè)備,如移動硬盤、U盤等都會用到;
hid.o USB接口的鍵盤、鼠標(biāo)等人機(jī)交互設(shè)備的基礎(chǔ)支持。
在該目錄下還有一些具體設(shè)備的驅(qū)動程序,分別驅(qū)動不同設(shè)備:
| # 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.oaudio.o dabusb.o kaweth.o pegasus.o scanner.o usb-midi.obrlvger.o hid.o kbtab.o powermate.o serial/ usbnet.ocatc.o host/ mdc800.o printer.o storage/ uss720.o |
usb-storage.o USB對與存儲部分的驅(qū)動模塊;
scsi_mod.o 對SCSI設(shè)備的支持;
sd_mod.o 對SCSI硬盤支持模塊,針對USB硬盤;
sr_mod.o 對SCSI光盤支持模塊,針對USB光驅(qū);
sg.o SCSI序列的通用支持模塊;
ide-scsi.o 該模塊可以把IDE設(shè)備模擬成SCSI接口。
通過查看/lib/modules/2.XXX/modules.dep文件,可以查看上述這些模塊是否存在。一般情況下這些模塊已經(jīng)被編譯,否則需要重新編譯內(nèi)核模塊。
在正確地裝載了驅(qū)動以后,可以通過訪問/dev/sd?設(shè)備來訪問優(yōu)盤或移動硬盤。通常情況下,通過訪問sda1來訪問移動硬盤或優(yōu)盤的第一個分區(qū)。在USB基本驅(qū)動存在的情況下插入優(yōu)盤,就可以看到如下信息:
| usb.c: USB device 7 (vend/prod 0xea0/0x6803) is not claimed by any active driver.Starting timer : 0 0Vendor: Netac Model: OnlyDisk Rev: 1.11Type: Direct-Access ANSI SCSI revision: 02Starting timer : 0 0Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0SCSI device sda: 32256 512-byte hdwr sectors (17 MB)sda: Write Protect is off |
上面這一段是usb-storage.o和SCSI驅(qū)動在起作用,我們可以看到優(yōu)盤被認(rèn)成是sda,要使用它可以先查看分區(qū)表:
| # fdisk -l /dev/sdaDisk /dev/sda: 16 MB, 16515072 bytes2 heads, 32 sectors/track, 504 cylindersUnits = cylinders of 64 * 512 = 32768 bytesDevice Boot Start End Blocks Id System/dev/sda1 * 1 503 16080 1 FAT12# mkdir /mnt/usb# mount -t msdos /dev/sda1 /mnt/usb 該優(yōu)盤得類型為FAT12 |
之后就可以通過訪問/mnt/usb來訪問優(yōu)盤了。注意,如果要拔掉優(yōu)盤或移動存儲設(shè)備,請先umount然后再拔出,這樣可以保證數(shù)據(jù)全部被寫入,否則系統(tǒng)會出錯,數(shù)據(jù)可能不完整。
| # umount /mnt/usb |
USB數(shù)碼相機(jī)的驅(qū)動
數(shù)碼相機(jī)類型繁多,但是在Linux下使用數(shù)碼相機(jī)有比較簡便的方法。我們知道USB接口是數(shù)碼相機(jī)的主要接口,在Linux中訪問數(shù)碼相機(jī),通??梢酝ㄟ^下面兩種方法。
1.使用專門軟件
Red Hat Linux中自帶的gtkam軟件是一個提供了數(shù)碼照相機(jī)圖形化界面的程序,它支持100多種數(shù)碼相機(jī)。gtkam可以直接與數(shù)碼照相機(jī)相連,允許直接打開、查看、并刪除圖像。在Red Hat 9.0的光盤中,有g(shù)tkam的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的原因是因?yàn)間photo沒有安裝或模塊被覆蓋,所以需要重新安裝gphoto。安裝完畢后,在X-Window中運(yùn)行g(shù)tkam就可以看到如圖1所示界面。
| # gtkam |
在圖1中,單擊gtkam的“camera”→“Add Camera”可以添加數(shù)碼相機(jī),然后在彈出的窗體中單擊“Detect”,測試數(shù)碼相機(jī)的連接類型。最后單擊“OK”,就可以看到數(shù)碼相機(jī)中的照片了。
圖2所示使用gtkam連接Kodak DX6340相機(jī),看到存儲卡中的照片。選擇照片,單擊保存就可以把照片保存到硬盤上。
我們也可以從http://sourceforge.net/project/showfiles.php?group_id=8874&release_id=209817獲得gtkam的最新版本及源代碼,下載后可以使用其中的install.sh來進(jìn)行安裝。
2.把數(shù)碼相機(jī)當(dāng)做是USB存儲設(shè)備還有一種方式就是把數(shù)碼相機(jī)當(dāng)做是USB存儲設(shè)備,如優(yōu)盤、讀卡器等,這樣就可以像訪問優(yōu)盤那樣來訪問數(shù)碼相機(jī):
| # mount -t vfat /dev/sda1 /mnt/usb |
但是,采用這種方式極有可能遇到不能支持的數(shù)碼相機(jī),比如筆者使用的Kodak DX6340數(shù)碼相機(jī),插入USB口之后出現(xiàn)以下信息:
| usb.c: USB device 2 (vend/prod 0x40a/0x570)is not claimed by any active driver. |
對這種問題的解決辦法不只是可以驅(qū)動不支持的數(shù)碼相機(jī),像不支持的存儲設(shè)備也都可以使用,比如優(yōu)盤、讀卡器等。
(1)使用lsmod確定USB基本驅(qū)動模塊已經(jīng)裝載,如果沒有使用以上的命令裝載:
| # modprobe ehci-hcd; modprobe usb-uhci;modprobe usb-storage# modprobe ide-scsi; modprobe scsi_mod;modprobe sd_mod |
(2)使用cat /proc/bus/usb/devices得到當(dāng)前系統(tǒng)USB總線上的設(shè)備信息,尤其注意Vendor、ProdID、Product等信息:
| C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mAI: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hubE: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255msT: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1P: Vendor=040a ProdID=0570 Rev= 1.00S: Manufacturer=Eastman Kodak CompanyS: Product=KODAK EasyShare DX6340 Zoom Digital CameraS: SerialNumber=KCKCJ33400274 |
數(shù)碼相機(jī)也是一種存儲設(shè)備,然而對于Linux下的移動存儲設(shè)備都是通過usb-storage.o驅(qū)動的,然后模擬為 SCSI設(shè)備。如果數(shù)碼相機(jī)無法使用,通常是usb-storage驅(qū)動未包括此廠商識別和產(chǎn)品識別信息(在類似skel_probe的USB最初探測時被屏蔽了)。對于USB存儲設(shè)備的硬件訪問部分,通常是一致的。所以,要支持?jǐn)?shù)碼相機(jī),僅需要修改usb-storage中關(guān)于廠商識別和產(chǎn)品識別列表部分。
USB設(shè)備識別信息中重要的部分如下:
| P: Vendor=040a ProdID=0570 Rev= 1.00S: Manufacturer=Eastman Kodak CompanyS: Product=KODAK EasyShare DX6340 Zoom Digital Camera |
若/proc/bus/usb下沒有相應(yīng)USB設(shè)備信息,應(yīng)輸入以下命令將USB設(shè)備文件系統(tǒng)手動掛裝到/proc/bus/usb:
| # mount -t usbdevfs none /proc/bus/usb |
(3)編輯drivers/usb/storage/unusual_devs.h文件。下面是所有已知的USB產(chǎn)品登記列表,格式如下:
| UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax,vendor_name,product_name,use_protocol, use_transport, init_function,Flags). |
usb-storage.o就是根據(jù)這個列表來識別各種設(shè)備。這樣,可以將剛才/proc/bus/usb/devices文件中得出的信息添加在上面,重新編譯模塊,讓usb-storage驅(qū)動去認(rèn)識和發(fā)現(xiàn)它。
| 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 ), |
注意,添加以上幾句代碼的位置一定要正確。經(jīng)過比較發(fā)現(xiàn),usb-storage驅(qū)動對所有注冊都是按idVendor、 idProduct數(shù)值從小到大排列的,因此添加代碼也要放在相應(yīng)位置。
(4)重新編譯模塊,之后插入的數(shù)碼相機(jī)就可以像其它優(yōu)盤一樣作為USB存儲設(shè)備去訪問。
| # make dep# make modules# make modules_install |
USB攝像頭的驅(qū)動
在內(nèi)核源文件中,自帶了一部分?jǐn)z像頭的驅(qū)動,目前大量的雜牌攝像頭都可以使用OV511的驅(qū)動模塊。如果USB攝像頭無法使用,則可以試試重新編譯模塊。下面就以一個沒有驅(qū)動程序的攝像頭為例,嘗試使用OV511驅(qū)動模塊驅(qū)動。
1. 獲取內(nèi)核源碼
先從Red Hat光盤或kernel.org獲取當(dāng)前版本的內(nèi)核源碼,并安裝:
| # rpm -ivh kernel-source-2.XXX.rpm |
或者
| # tar zxvf linux-2.XXX.tar.gz |
2. 運(yùn)行
到源碼目錄中運(yùn)行:
| # make menuconfig |
或者
| # make xconfig //需要在X-Window下 |
3. 選擇USB的模塊
選擇USB的模塊如圖3所示。
選擇要編譯的驅(qū)動可以查看說明書,確定攝像頭芯片是什么型號,如圖4所示,選定OV511攝像頭的支持。在USB support下可以選擇多種驅(qū)動的模塊,比如常用的OV511芯片的攝像頭驅(qū)動、USB打印機(jī)的驅(qū)動等。
4. 保存、編譯和安裝
| # make dep# make modules# make modules_install |
5. 加載驅(qū)動
| # modprobe ehci-hcd# modprobe usb-uhci# modprobe ov511cat /proc/devices |
接著運(yùn)行g(shù)nomemeeting等工具,選擇/dev/video0或/dev/video1作為攝像頭設(shè)備文件,這樣攝像頭就可以使用了。
外置USB光驅(qū)及刻錄機(jī)的驅(qū)動
USB光驅(qū)與其它的USB存儲設(shè)備使用類似,只不過USB光驅(qū)會被識別為SCSI光驅(qū),如/dev/sr0或/dev/scd0等設(shè)備,它需要sr_mod.o(SCSI CD-ROM設(shè)備)驅(qū)動模塊。
| # modprobe sr_mod //如果sr_mod模塊沒有編譯,請重新編譯內(nèi)核,在SCSI部分# mount -t iso9660 /dev/scd0 /mnt/cdrom |
關(guān)于外置刻錄機(jī)驅(qū)動詳見本刊今年第8期“Linux完全驅(qū)動(二)”:
| # mkisofs -Jv -V examplecd -o example.iso /root/ |
將/root/目錄下的文件做成一個名叫example.iso的光盤鏡像文件,該文件的卷標(biāo)為examplecd;還可通過下面命令將該文件加載到/mnt/iso文件夾中。
| # mkdir /mnt/iso# mount -t iso9660 -o loop example.iso /mnt/iso |
在調(diào)整完/mnt/iso文件的內(nèi)容后使用下面命令:
| # umount /mnt/iso |
最后使用cdrecord命令刻錄:
| # cdrecord -scanbus |
查看SCSI總線中刻錄機(jī)的配置信息:
| Cdrecord 2.0 (i686-pc-linux-gnu) Copyright(C) 1995-2002 J?rg SchillingLinux sg driver version: 3.1.25Using libscg version 'schily-0.7'cdrecord: Warning: using inofficiallibscg transport code version(schily - Red Hat-scsi-linux-sg.c-1.75-RH '@(#)scsi-linux-sg.c1.75 02/10/21 Copyright 1997 J. Schilling').scsibus0:0,0,0 0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM0,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) * |
從上面可以看到目前光驅(qū)在SCSI總線的參數(shù),然后根據(jù)參數(shù)輸入下面的命令刻錄光盤:
| # cdrecord -v -eject speed=24 dev=0,0,0 example.iso |
“speed=24”是以24速來刻錄光盤,“dev=”后加上剛才顯示的刻錄機(jī)的SCSI參數(shù)。如果是外置DVD,則應(yīng)使用dvdrecord命令,其用法與cdrecord相同。
| # rpm -ivh dvdrecord-0.1.2-12.i386.rpm# man dvdrecord 查看幫助 |
1.鼠標(biāo)的驅(qū)動
在Red Hat Linux中,可以使用mouseconfig命令來配置鼠標(biāo),選擇USB接口鼠標(biāo)即可,如圖5所示。
圖5 使用mouseconfig配置USB接口鼠標(biāo)
| # mouseconfig |
如果使用手動的方式來配置,可以人工加入以下模塊:
| # modprobe hid# modprobe input# modprobe usbmouse# modprobe mousedev |
2.USB鍵盤的驅(qū)動
| # modprobe hid# modprobe input# modprobe usbkbd# modprobe keybdev |
IEEE1394設(shè)備的驅(qū)動
IEEE1394又稱Firewire(火線)、i-Link(Sony的叫法),它跟USB接口類似,目前可以提供400Mb/s的帶寬,雖然在理論上它較USB 2.0的480Mb/s的速度慢一些,但是在實(shí)際使用中,Firewire要比USB 2.0的設(shè)備快不少,所以仍然有很多設(shè)備配備這種接口,如DV(數(shù)字?jǐn)z像機(jī))和移動硬盤等。
與USB相比,Firewire的通用性不夠強(qiáng),得到的支持也較少。一般主板上不帶該Firewire的芯片,通常是購買帶1394接口的PCI卡來支持1394的設(shè)備。對于1394設(shè)備,Linux內(nèi)核2.4.10之后的版本都可以支持。IEEE1394的驅(qū)動放在以下位置:
| # ls /lib/modules/2.XXX/kernel/drivers/ieee1394amdtp.o dv1394.o ieee1394.o raw1394.o video1394.ocmp.o eth1394.o ohci1394.o sbp2.o |
IEEE1394的驅(qū)動方式較USB大同小異,只是首先加載的是對1394總線的驅(qū)動(ieee1394.o)和1394芯片的驅(qū)動(ohci1394.o)。如果使用1394卡連接DV,那么需要1394視頻驅(qū)動(video1394.o)和DV視頻I/O驅(qū)動(dv1394.o);如果需要訪問的是1394外接硬盤或CD-ROM、刻錄機(jī)等,則需要對SBP-2協(xié)議的支持(sbp2.o);如果使用1394接口的以太網(wǎng)卡,則需要加載驅(qū)動eth1394.o。
如果沒有某種設(shè)備的驅(qū)動,則可以重新編譯內(nèi)核模塊,選擇以下模塊:
| # cd /usr/src/linux-2.XXX# make xconfig |
選擇其中的IEEE1394選項(xiàng),如圖6所示,然后重新編譯模塊:
| # make dep# make modules# make modules_install |
驅(qū)動IEEE1394接口的硬盤或光驅(qū)時,需要預(yù)先加載的驅(qū)動有ieee1394.o和ohci1394.o:
| # modprobe ohci1394 |
上面代碼會將兩樣驅(qū)動全部裝載上,因?yàn)閛hci1394依賴于ieee1394。
硬盤需要的驅(qū)動是sbp2.o,插入硬盤后它應(yīng)該會自動加載。與USB設(shè)備相同,硬盤會被模擬成SCSI設(shè)備,請留意屏幕上顯示的信息,看看是被模擬為sda還是其它的設(shè)備。使用以下命令使用硬盤:
| # mkdir /mnt/1394# mount -t vfat /dev/sda1 /mnt/1394 |
scsi_mod.o 對SCSI設(shè)備的支持; sd_mod.o 對SCSI硬盤支持模塊,對應(yīng)硬盤;
sr_mod.o 對SCSI光盤支持模塊,對應(yīng)光驅(qū);
sg.o SCSI序列的通用支持模塊。
IEEE1394光驅(qū)驅(qū)動與USB下相應(yīng)的設(shè)備驅(qū)動非常相似,這里就不再贅述了。
現(xiàn)在各種移動設(shè)備層出不窮,花樣繁多,目前國內(nèi)網(wǎng)站上的資料不是很全,使用google搜索英文網(wǎng)站往往能得到許多自己需要的東西。
優(yōu)盤或USB硬盤常見問題解決方法
1. 加載/dev/sda1時出錯
這是因?yàn)檩^早的優(yōu)盤不分區(qū),它們使用/dev/sda,也有可能使用/dev/sda2或sda3等設(shè)備文件,請仔細(xì)觀察fdisk -l /dev/sda的輸出結(jié)果,看一看優(yōu)盤的分區(qū)到底是哪一個。
2. 主機(jī)中已有SCSI或USB設(shè)備
主機(jī)中已經(jīng)有SCSI或USB設(shè)備,比如/dev/sda硬盤或另一個優(yōu)盤,這時可以嘗試sdb或sdc等設(shè)備。實(shí)際上每一次在插入優(yōu)盤時可以留意一下屏幕上顯示的信息,那個優(yōu)盤被轉(zhuǎn)換成哪一個sd設(shè)備。
3. 優(yōu)盤插入后沒有反應(yīng),訪問/dev/sd設(shè)備也沒有反應(yīng)
這時可以查看相關(guān)模塊是否已經(jīng)加載,如果沒有加載可以手動加載,然后重新插入該設(shè)備,看看是否有反應(yīng):
| # modprobe ehci-hcd; modprobe usb-uhci; modprobe usb-storage.o# modprobe ide-scsi; modprobe scsi_mod.o; modprobe sd_mod.o |
4. 設(shè)備驅(qū)動已經(jīng)加載,如何知道訪問哪個設(shè)備文件
對比加載驅(qū)動前和加載驅(qū)動后的/proc/devices文件,多出的那一行就是這種驅(qū)動程序注冊的主設(shè)備號。例如,對比OV511加載前后/proc/devices文件的變化,就會發(fā)現(xiàn)多出如下一行:
| # cat /proc/devicesCharacter devices:...81 video_capture... |
上面代碼表示C型設(shè)備、主設(shè)備號為81的設(shè)備文件是訪問OV511驅(qū)動的入口,再對照/usr/src/Documentation/devices.txt中查找C類型的主設(shè)備號81,就可以知道對應(yīng)如下設(shè)備文件:
| 81 char video4linux0 = /dev/video0 Video capture/overlay device |
上面簡要介紹了Linux下常用的USB、IEEE1394、PCMCIA設(shè)備驅(qū)動的安裝與配置,希望能對讀者安裝與使用這些設(shè)備提供幫助。
上一篇:利用U盤加載控制器驅(qū)動來安裝Linux系統(tǒng)
下一篇:如何編寫Linux下的設(shè)備驅(qū)動程序
相關(guān)熱門文章- 3d打印機(jī)軟件僅售1606元...
- objet3d打印機(jī)便捷地將信息拖...
- 科技感導(dǎo)航按鈕 三星Objet光敏...
- uPrint SE打印機(jī)使打印機(jī)足夠...
- KTV包房裝修設(shè)計(jì)如何對音響調(diào)...
- linux 常見服務(wù)端口
- 【ROOTFS搭建】busybox的httpd...
- 什么是shell
- linux socket的bug??
- linux的線程是否受到了保護(hù)?...
- 請教想查12個月的數(shù)據(jù)條數(shù),看...
- new/delete 和malloc/free 有...
- ubuntu下hadoop環(huán)境的搭建...
- 求助:如何用Linux架設(shè)ISATAP...
- redhat圖形界面不出先登錄界面...
總結(jié)
以上是生活随笔為你收集整理的Linux下设备驱动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智联+影音,AITO问界M7想干翻的不止
- 下一篇: 解决Linux QQ闪退和扫码无法登陆的