在我的關於硬件檢測與配置的兩篇文章《 如何在Linux下實現硬件的檢測》和《 如何在Linux下實現設備的配置》發表之後,陸續收到了一些讀者來信。他們問了很多關於硬件配置方面的問題,現在我把這些最典型的問題加以整理,寫成這篇文章。由於我不可能接觸到所有的硬件設備,所以對於內置MODEM和聲卡只能提供一些方法性的指導,而不能提供關於配置過程詳細到每一步的一個描述。我希望這篇文章會對大家學習和使用Linux有所幫助。 作者:於辰濤,聯想(北京)電腦公司軟件工程師。目前主要從事Linux系統安裝程序的開發工作,主要研究興趣是操作系統的工作機制和開發底層系統程序。您可以通過電子郵件 [email protected] 跟他聯系。 1. 我用ALSA成功配置了我的聲卡,但每次啟動LINUX都必須重新用ALSA裡的alsaconf-0.4.3b目錄裡的命令alsaconf配置,這是為什麼,極不方便,請問如何設置才能解決此問題? 答:在缺省情況下ALSA驅動程序會靜音所有的音頻輸出。為了獲得聲音,必須解除主音量和PCM音量的靜音。下面的命令設置音頻輸出的主音量和編、解碼音量,一般而言,打開這兩個設置聲音輸出就可以了。 amixer -c 0 sset 'Master',0 100%,100% unmute amixer -c 0 sset 'PCM ',0 100% unmute 為了在每次插入聲卡驅動模塊時,都解除靜音,您可以在/etc/modules.conf(對於老一些Linux版本,比如Redhat 6.2此文件為/etc/conf.modules)加入下列語句: post-install snd-card-xxxx amixer -c 0 sset 'Master',0 100%,100% unmute && amixer -c 0 sset 'PCM ',0 100% unmute snd-card-xxxx表示聲卡對應的alsa驅動程序模塊。 2. 如何在LINUX下改變顯示器的刷新率,我的眼睛實在受不了60HZ的刷新率了? 答:在Linux系統下,要配置X-Windows系統一般使用/usr/X11R6/bin/Xconfigurator命令進行配置。在配置之前,您最好能先了解顯卡的型號、顯示器型號等信息,然後再進行刷新頻率的配置。 Xconfigurator程序會先進行顯示器類型自檢,根據檢測到的顯示器型號,在配置文件/etc/X11/XF86Config(對於XFree86 4.x版本,配置文件為/etc/X11/XF86Config-4)中設置顯示器支持的場頻范圍。這樣,在X系統啟動之後,垂直刷新率會自動設置為當前分辨率下支持的最高刷新率。 但是,如果您的顯示器沒有類型信息或者是Xconfigurator不支持的顯示器類型,那麼您就只能設置顯示器為一些通用的顯示模式了。這些顯示模式中比較高的刷新頻率為1024x768分辨率下70Hz垂直掃描頻率的模式。 如果您想設置較高的刷新率(垂直掃描頻率85Hz),就只有手動進行了。每個Vesa定義的通用顯示模式所對應的刷新頻率,您可以在《如何在Linux下實現設備的配置》一文中找到。這時您需要修改文件XF86Config的Monitor節。Monitor節主要描述顯示器的信息,每個XF86Config文件至少包含一個顯示器節。在顯示器支持vbe和edid擴展時,它的所有信息包括顯示器大小、顯示器支持的刷新頻率范圍、顯示器制造商信息等都可以從顯示器上讀出。此節的一般格式如下: Section "Monitor" Identifier Entries EndSection 它最關鍵的描述性信息是: HorizSync horizsync-range 監視器支持的水平刷新頻率范圍。單位是kHz,缺省范圍是28-33kHz。 VertRefresh vertrefresh-range 監視器支持的垂直刷新頻率范圍。單位是Hz,缺省范圍是43-72Hz。 要設置監視器到更高的刷新率,必須用vi修改/etc/X11/XF86Config文件下的這兩個字段,比如: HorizSync 28-60 VertRefresh 60-100 上面的設置可以設置顯示分辨率為800x600下的垂直刷新率為85Hz,分辨率為1024x768下的垂直刷新率為70Hz。 注意:如果顯示器達不到這麼高的水平掃描頻率范圍,在顯示器上會出現黑屏的現象。如果出現黑屏,您可以先使用Ctrl + Alt + Backspace殺死當前X服務進程,並重新修改XF86Config文件,嘗試低一些的顯示刷新頻率即可。 3. 請問一下,在LINUX 下開發工具為什麼不能使用C++來開發設備驅動程序 ?我測試了一下使用g++編譯通不過,是否為g++編譯選項不對,正確的編譯選項是什麼? 答:在Linux下,C++編譯器的實現和C編譯器是不同的。因為涉及到函數重載和多態等問題,所以C++在編譯實現時,使用了虛表的機制。這和C語言編譯成目標代碼的直接訪問方式是有很大不同的。由於Linux內核大部分使用C語言編制,並且Linux驅動程序在事先是采用了類似函數調用表的機制,所以開發者使用gcc開發驅動程序應該是最直接也是最高效的。 4. 我的是藍點1.0系統,安裝的內貓是Tplink ia5628v 型,它的芯片是ambient 5628d,無法驅動。我下載了intel的r-335-5驅動程序,按提示安裝不能用。在Windows ME下貓用的是com4口,我試了ttys0~ttys3.ttys10都無反應,請指教。 答:對於內置式modem,無法正確配置的最大問題是設備沒有合適的驅動程序。大部分廠商都不願意公開產品的內部技術細節,所以網上關於內貓的驅動程序很少,而能夠正常工作的驅動程序就更少了。如果要查找內貓的驅動程序,您需要先運行, lspci -v 查得內貓詳細的設備信息,包括設備標識和制造商標識,然後您再訪問站點www.linmodems.org,獲得內貓驅動程序的詳細信息。 你的芯片類型是ambient,那麼你最好試試驅動程序http://linmodems.org/CLModem-0.3.0.tar.gz。下載此驅動之後,您需要手動解開tar包,並正確安裝此驅動程序。 在成功安裝了驅動程序之後,內貓驅動程序一般都要生成一個仿真的串口設備。因為很多程序使用設備文件/dev/modem訪問modem,所以為了能夠正常使用modem設備,您可能還需要手動建立鏈接文件。比如,你的內貓仿真的設備是ttyS4,那麼執行命令: ln -sf /dev/ttyS4 /dev/modem 使用哪個串口設備這主要是看它仿真哪個串口了。在執行上述步驟之後,您可以執行minicom,然後運行AT命令ATZ測試modem是否正常工作。如果顯示OK表示modem配置成功,否則失敗。 5. 在LINUX下,我用DATE命令設置時間, 但它沒有寫入CMOS, 機器重起後時間沒有改變, 請問如何解決? 答:您機器的bios恐怕與標准的bios不是完全一致(或者出了什麼問題),date命令是調用系統函數stime,它是glibc的函數,它又把控制傳給了最底層的bios調用,由它們進行時間的設置。如果您的機器的時鐘機制不是這樣,那麼時間設置不會工作。 6. 我想裝雙操作系統,linux和win98。但是我裝壞了,win98不能看見,一開機就直接進入了linux 而且是沒有圖形界面。Linux只能輸入命令,我裝的是linux radhat7.0。 機子的內存是64兆,cpu是奔三, 實達品牌機,在還沒有安裝linux前的win98系統可能已經被覆蓋掉了,或者格式化了,現在的情況是我想重新安裝win98 和linux,我想讓這兩個操作系統可以在開機時可以選擇進入。 答:設置Linux系統的雙引導,您必須要在安裝Linux系統之後,修改lilo的配置文件/etc/lilo.conf。舉一個例子, boot=/dev/hda map=/boot/map install=/boot/boot.b vga=normal default=linux image=/boot/vmlinuz label=linux root=/dev/hda2 other=/dev/hda1 label=win98 這個簡單的例子設置一台具有win98和linux操作系統的機器的雙引導,其中win98安裝在hda1分區上,這是第一塊硬盤的第一個主分區。Linux分區安裝在hda2分區上。 一般而言,您最好在系統上先安裝Windows操作系統,為了保險起見,您最好還要定制一張Windows系統恢復軟盤,然後再安裝Linux操作系統。在安裝Linux時,注意要選擇和Windows分區不同的分區(強烈推薦您在主分區上,也就是在編號為hda1到hda4的分區安裝Linux操作系統)進行安裝,同時一般也需要您建立Linux系統交換分區。在安裝Linux系統之後,一定要運行LILO命令,使得lilo能夠接管系統引導扇區,並使/etc/lilo.conf中的配置生效。 7. 我使用的是聯想朝陽筆記本,安裝了Red hat linux7.1,使用的是聯想EASY10M/100M 網卡現在網卡無法識別,不能工作,怎麼辦?/proc/bus/pccard/drivers 中沒有任何信息,PCMCIA 已啟動過 。網卡的ACT LINK 燈是亮的,不知驅動是否已加,測試回路只有lo。啟動時eth0顯示FAILED。 答:您首先需要安裝網卡的設備驅動程序。PCMCIA類型的設備驅動程序保存在pcmcia-cs包中,您首先需要安裝pcmcia-cs包。 在筆記本電腦上安裝了pcmcia-cs包之後,為了實現PCMCIA設備的自動檢測,您可以先查找系統中是否存在/proc/bus/pccard目錄,如果不存在此目錄則嘗試插入pcmcia_core。 modprobe pcmcia_core(或者insmod pcmcia_core) 在成功插入了此模塊之後,/proc/bus/pccard目錄就生成了。此後,您就可以通過 lspci -v 檢查pci系統設備,找到系統橋接器,根據橋接器類型獲得您需要插入的橋接器模塊。在Linux系統下,適用的橋接器模塊一般只有i82365或tcic兩種。若無法獲得准確的橋接器驅動程序,您可以嘗試著插入兩種模塊,直到成功時為止。這時執行命令: modprobe i82365(或者modprobe tcic) 然後為了能夠實時的配置您的pccard,您需要啟動服務pcmcia, /etc/rc.d/init.d/pcmcia start 並由此服務啟動程序cardmgr。cardmgr監視pcmcia槽上卡的插入和彈出操作。在卡插入之後,cardmgr查詢卡的配置數據庫。若發現卡能夠被標識,相應的設備驅動程序則會自動加載。在彈出卡之後,卡的驅動程序會自動的關閉並卸載。當卡插入之後,每個槽上的卡信息和設備信息都被記錄在/var/lib/pcmcia/stab文件中。 您購買的這款網卡Linux支持的不好,您可以換一種其它型號的網卡試試。更換網卡之後,您可以再用上面的方法試試。 8. 我的貓是實達5600+(單芯片,外置),安裝時選擇哪種型號最合適? 答:在配置外置Modem時,一般您只需要配置串口就可以了,不需要使用附加的驅動程序。因為大部分的Modem都是通過串口連接到計算機上的,所以在配置Modem之前,您必須插入串口驅動模塊serial.o。在成功插入串口通訊模塊之後,這時只要將設備/dev/modem連接到相應的串口設備上就可以了。例如,在/dev/ttyS0(對應Windows下的COM1)上連接了Modem,則建立連接: ln -sf /dev/ttyS0 /dev/modem 在這之後,外置的串口modem就可以正常工作了。您可以通過使用minicom向串口發送AT命令,來檢測和配置modem的工作方式。 9. 我的機器上安裝了RedHat Linux 7.1和Win98,我現在不想保存Linux系統了。請問如何卸載Linux系統? 答:一般而言,卸載Linux的方法是將Linux所在的分區格式化為其它格式的分區就可以了。Linux分區安裝在硬盤上,使用DOS系統下的FDISK一般是無法刪除Linux分區的。這時您可以選擇一種類似於pqmagic的分區軟件刪除類型為ext2和linux swap類型的分區就可以了。 如果您想在Linux系統下刪除Linux類型的分區,您可以使用系統命令fdisk。比如Linux分區安裝在第一塊硬盤上的/dev/hda2,執行: fdisk /dev/hda 在運行fdisk命令之後,按下d鍵,d鍵執行刪除分區的操作。然後您選擇待刪除分區正確的分區編號就可以了。上例中選擇的分區編號為2。 最後按下w鍵,操作存盤退出。這時fdisk命令執行結束,分區的刪除操作寫入到了硬盤上。 順便提一下,硬盤分區是以鏈接表的形式存在的,在每個硬盤上都存在一個主分區描述塊,它可以描述四個分區,每個硬盤最多只存在四個主分區,其他的分區則為擴展分區。每個擴展分區是通過鏈接字段聯結在一起。在Linux系統下,主分區使用的設備別名是從/dev/hda1到/dev/hda4,其後從/dev/hda5開始的分區,都代表擴展分區。 在windows系統下,如果您想除去lilo的雙啟動,那麼使用fdisk /mbr刷新硬盤主引導扇區就可以了。在Linux系統下,您也可以運行lilo -u 命令恢復前一次lilo運行之前的系統引導扇區狀態。 10. 在配置XWindows系統時,筆記本電腦的TFT顯示器要是不知道品牌選擇什麼類型? 答:筆記本電腦的TFT顯示器一般是和通用顯示器的配置方法一樣。在配置時,您可以執行Xconfigurator命令,並選擇通用顯示模式,比如1024x768分辨率的70Hz垂直分辨率的顯示模式。只要您正確設置了顯卡的驅動程序的型號,那麼在筆記本電腦上啟動X-Windows系統是沒有問題的。 但是筆記本電腦一般采用LCD顯示器,它的掃描頻率范圍較窄。比如,一部分LCD顯示器在800x600分辨率時,最低支持的垂直掃描頻率為70Hz,那麼您這時指定的水平回掃范圍一定要包含48kHz。如果此時您指定800x600分辨率下的垂直掃描頻率為60Hz,X-Windows系統將不能工作。 11. 我不小心把鼠標從COM1換到了COM2,進入X-WINDOW後無法使用了。我將系統復位,再次啟動後,文件/sbin/fsck.ext2 in dev/hda3出錯,如何修復? 答:將鼠標切換到COM2之後,您可以直接使用命令mouseconfig重新配置一下鼠標。如果您的系統沒有這個配置程序,那麼您也可以直接執行下面的指令試試。 rm -f /dev/mouse ln -sf /dev/ttyS2 /dev/mouse 這兩個命令的主要作用是建立/dev/mouse正確的連接文件。 在運行Linux系統時有許多系統數據,特別是關於文件系統的一些數據結構因此如果不正常關機保存在內存中。系統非正常關機,就很可能會給Linux系統帶來很大的影響。,在Linux系統啟動之後,將會自動對文件系統進行掃描。這時做的文件掃描只是看一下文件系統有沒有出錯,如果沒有出錯的話,那麼系統將一切正常,但是如果有錯的話(這時的系統啟動過程會出現上面描述的腳本),那麼它會提示輸入超級用戶密碼進入一個維護模式。 在系統進入維護模式之後,並不需要重新安裝系統,只是這時文件扇區的連接可能出現了一些問題。這時只需運行e2fsck檢查根分區所在的硬盤分區,並將這些錯誤的連接修復。在程序運行的過程中可能會出現一些提示,一般來說,一直按"Y"直接回車就可以了。 12. 怎樣設置威盛686b中的ac97聲卡? 答:ac97是一種聲卡芯片的混音器設備接口,威盛686b的聲卡驅動程序是支持ac87混音器接口的。缺省的內核驅動程序是via82cxxx_audio,您為了配置它,只需要在/etc/modules.conf文件中加入設備別名: alias sound via82cxxx_audio 當然為了保險起見,您最好使用命令sndconfig配置聲卡。 雖然很多主板集成了via686b聲卡芯片,而且能夠加載Linux系統提供的驅動程序,但是via686b聲卡仍無法正常工作。這時出現的驅動程序問題包括播放時噪聲很大,播放時斷時續,無聲等等。出現這些問題的主要原因是由於主板上的輔助芯片支持不盡相同造成的。 這時您就只有試試別的驅動程序了(比如alsa提供的驅動程序)。 13. 我的網卡是精英的K7S5A,sis735的芯片組,整合sis900網卡。安裝上redhat7.1之後,網卡無法工作,發現在啟動是加載還是失敗。我又把在網上下的sis900的驅動:sis900.c sis900.h更新了系統原有的文件,還是不行。更改/etc/modules.conf,並加上了options sis900 io=0xd800 irq=10,再次加載modprobe sis900,報io,irq不對!(invild parate.... io....)而這兩個參數是我在KDE裡看到的啊!win2000中網卡的參數也是這個樣子的! 答:對於任何一種主板集成設備,包括主板集成的顯卡、聲卡、網卡、modem等等,Linux支持的都不太好。當您選擇了這樣的主板時,很有可能您的設備就無法在Linux系統上工作了。但是如果您幸運的話,廠商正好提供了該產品的Linux驅動,那就沒有問題了。 對於任何一種PCI設備,因為它存在一組配置空間,對於io口和irq是無須指定的,設備驅動程序在發現沖突時,一般會進行自動重映射。當你的設備不能正常工作時,最好的辦法是換另外一個驅動程序試試,這樣指定io,irq往往是沒有用的。 由於我沒有你說的設備,所以只能給你這些提示了。