一些Linux用戶經常詢問這樣的問題:Linux能兼容XXX卡麼?其實,Linux是一個開放性的系統,只要通過Linux愛好者們的努力,Linux可以兼容任何硬件。 一,聲卡 首先要知道聲卡的類型,或者是某種聲卡兼容的。如果內核不能把這種聲卡檢測出來,那麼就需要安裝這 種聲卡的驅動模塊,來安裝聲卡。 例如,市面上常見的聲卡Creative Vibra 128使用的驅動模塊是es1371,Creative PCI 128使用的模塊是 es1370等等。 redhatlinux中用sndconfig來設置聲卡,如果沒有某個模塊,就需要重新編譯內核(編譯最新發布的linux 內核),如果還不行,只好用ALSA 音效驅動程式. ALSA 音效驅動程式原本是寫來取代 Gravis UltraSound 卡的Linux核心驅動程式的. 當實證這取代得很成 功,它和OSS/Free 及OSS/Linux音效驅動程式相容(核心的驅動程式),但它有比OSS驅動程式更好的本身介面. ALSA音效驅動程式可在http://www.alsa-project.org/找到。到發稿時最新版本為0.5.9d ALSA 音效驅動程式是建為模組的.下面是ALSA支持的聲卡類型。 ALSA Supported SoundCards Advanced Linux Sound Architecture - Supported SoundCards ========================================================== ID: SoundCard chipset/type SC: SoundCard name IF: Supported interfaces (MIXER,PCM,SYNTH,SYNTH_MIDI,SEQ,OPL,MIDI,EMUL,HWDEP) MA: Maintainer CO: Coder This file is maintained by Jaroslav Kysela . Note: OPL -> Raw (native) OPL Note: MIDI -> external MIDI port Note: EMUL -> MIDI emulation Note: SYNTH -> yeah, well ? Note: SYNTH_MIDI -> internal synth that handles MIDI data Note: SEQ -> kernel client for ALSA sequencer Note: HWDEP -> various hardware-dependent interfaces/devices ===== ID: AMD InterWave SC: Gravis UltraSound Plug & Play SC: Dynasonic 3-D SC: STB Sound Rage 32 SC: UltraSound 32-Pro (STB) SC: MED3210 IF: MIXER,PCM,MIDI,SYNTH MA: Jaroslav Kysela ID: Gravis UltraSound MAX IF: MIXER,PCM,MIDI,SYNTH MA: Jaroslav Kysela ID: Gravis UltraSound Extreme IF: MIXER,PCM,MIDI,SYNTH MA: Jaroslav Kysela ID: Gravis UltraSound Classic/ACE IF: MIXER,PCM,SYNTH MA: Jaroslav Kysela ID: ESS AudioDrive ESx688 IF: MIXER,PCM,MIDI(1688) MA: Jaroslav Kysela ID: SoundBlaster 1.0/2.0/Pro IF: MIXER (Pro only),PCM,MIDI CO: Jaroslav Kysela MA: Chris Butler ID: SoundBlaster 16/AWE IF: MIXER,PCM,MIDI MA: Jaroslav Kysela ID: Yamaha OPL3-SA2/SA3 IF: MIXER,PCM,MIDI MA: Jaroslav Kysela ID: OAK Mozart IF: MIXER,PCM CO: Jaroslav Kysela MA: ??? ID: S3 SonicVibes PCI SC: Schubert 32 PCI (PINE) IF: MIXER,PCM,MIDI MA: Jaroslav Kysela ID: Ensoniq AudioPCI (ES1370,ES1371) SC: SoundBlaster PCI 64 SC: SoundBlaster PCI 128 IF: MIXER,PCM,MIDI MA: Jaroslav Kysela ID: Cirrus Logic / Crystal SemicondUCtors CS4232/CS4232A IF: MIXER,PCM,MIDI MA: Jaroslav Kysela ID: Cirrus Logic / Crystal Semiconductors CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 SC: Turtle Beach Malibu IF: MIXER,PCM,MIDI MA: Jaroslav Kysela ID: Cirrus Logic / Crystal Semiconductors CS4610/CS4612/CS4615/CS4280 IF: MIXER,PCM MA: Jaroslav Kysela ID: ESS Solo-1 ES1938 IF: MIXER,PCM MA: Jaromir Koutek ID: ESS ES18XX IF: MIXER,PCM,MIDI MA: Abramo Bagnara ID: OPTi 82C9xx SC: Audio 16 Pro EPC-SOUN9301 (82C930 based) SC: EXPertColor MED-3931 v2.0 (82C931 based) SC: ExpertMedia Sound 16 MED-1600 (82C928 based - AD1848) SC: Mozart S601206-G (OTI601 based - CS4231) SC: Sound Player S-928 (82C928 based - AD1848) IF: MIXER,PCM,OPL,MIDI MA: Massimo Piccioni ID: Trident 4DWave DX/NX SC: Best Union Miss Melody 4DWave PCI SC: HIS 4DWave PCI SC: Warpspeed ONSpeed 4DWave PCI SC: AzTech PCI 64-Q3D SC: Addonics SV 750 SC: CHIC True Sound 4Dwave SC: Shark Predator4D-PCI SC: Jaton SonicWave 4D SC: Hoontech SoundTrack Digital 4DWave NX IF: MIXER,PCM,MIDI MA: Jaroslav Kysela ID: ForteMedia FM801 SC: DT-0398 IF: MIXER,PCM,MIDI MA: [email protected] ID: SGI Indy (HAL2) IF: PCM MA: Ulf Carlsson ID: Turtle Beach WaveFront SC: Tropez Plus (Tropez+) SC: Tropez SC: Maui (models with CS4232; others use OPTi 16 which is not handled) IF: MIXER,PCM,MIDI,OPL,SYNTH_MIDI,HWDEP CO: [email protected] MA: [email protected] ID: C-Media CMI8330 IF: MIXER,PCM MA: George Talusan ID: C-Media CMI8338/8738 IF: MIXER,PCM,MIDI MA: Takashi Iwai ID: Avance Logic ALS100/ALS120 IF: MIXER,PCM,MIDI MA: Massimo Piccioni ID: Diamond Technologies DT-0197H IF: MIXER,PCM,MIDI MA: Massimo Piccioni ID: Aztech Sound Galaxy IF: MIXER,PCM,MIDI MA: Christopher Butler ID: MOTU MidiTimePiece AV multiport MIDI interface IF: MIDI MA: Michael T. Mayers ID: EMU10K1 SC: Sound Blaster Live! SC: Sound Blaster PCI 512 SC: E-mu APS IF: MIXER,PCM,MIDI,SYNTH_MIDI MA: Jaroslav Kysela ID: RME Digi9652 (Hammerfall, Hammerfall light) IF: PCM MA: Paul Barton-Davis ID: Intel i810/i820/i830/i840/MX440 IF: MIXER,PCM MA: Jaroslav Kysela ID: ESS Maestro 1/2/2E IF: MIXER,PCM MA: Matze Braun ID: VIA 82C686A (South Bridge) IF: MIXER,PCM,MIDI MA: Jaroslav Kysela 請注意如果您想使用 ALSA 驅動程式, 那麽您不應該先載入任何其它音效驅動程式. 如果您的核心中內含音效驅動程式, 那麽有必要重編譯核心. 如果您正在使用舊的 sound.o 模組, 您必須解除它. 如果您使用 kerneld,這可能就是要您刪去 /lib/modules/<核心版本>/misc 目錄下的 sound.o. 新的 RedHat 系統的音效驅動程式組織方式不太一樣, 要載入好幾個模組, 這種情況您需要解除全部的模組. 2.2 版核心對音效則采用了新的方式. 您應該要包含音效的支援! 是的, 沒有說錯, 您在核心中加入了對音效的支援, 但沒有包含任何音效卡的部份. 然後重編譯及安裝核心, 接著編譯 ALSA驅動程式. 編譯 ALSA驅動程式的步驟: tar zxvf alsa-driver-0.3.5.9d.tar.gz tar zxvf alsa-lib-0.3.5.9d.tar.gz tar zxvf alsa-utils-0.3.5.9d.tar.gz cd alsa-driver-0.3.5.9d ./configure make make install cd ../alas-lib-0.3.5.9d ./configure make make install cd ../alas-utils-0.3.5.9d ./configure make make install 驅動程式目錄下有個命令稿(script)可以把 ALSA 的音效設備檔安裝進 /dev 目錄. 在驅動程式目錄下打入 ./snddevices 有兩種使用 ALSA 音效模組的方法: a,用 modprobe 安插驅動程式 如果您有 PnP 音效卡, 您首先要設定正確的(或至少是已知的) IO/IRQ/DMA. 舉兩個例子: Gravis UltraSound (GUS) 及相容卡: /sbin/modprobe snd-gusclassic 對完全 16 位元的 SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), Sound BlasterAWE 64 (PnP): /sbin/modprobe snd-sb16 b,使用 kerneld 來載入 kerneld 是個在需要時插入模組, 並在不再使用時卸除它們的服務程式(daemon). 編輯 /etc/conf.modules 執行 modprobe snd-card, 其中 snd-card 是您的音效卡名稱。 這是 Gravis UltraSound PnP 音效卡的 /etc/conf.modules: alias char-major-14 snd alias snd-minor-oss-0 snd-interwave alias snd-minor-oss-3 snd-pcm1-oss alias snd-minor-oss-4 snd-pcm1-oss alias snd-minor-oss-5 snd-pcm1-oss alias snd-minor-oss-12 snd-pcm1-oss alias snd-card-0 snd-interwave options snd snd_major=14 snd_cards_limit=1 options snd-interwave snd_index=1 snd_id="guspnp" snd_port=0x220 snd_irq=5 snd_dma1=5 snd_dma2=6 二,網卡 對網卡的支持取決於網卡的芯片類型,跟網卡的生產廠家無關。大多數的網卡都會被XLinux自動檢測出來。 有些網卡的類型在Linux中沒有driver,但是只要知道它跟那一款網卡兼容,也可以使用它。 Linux可以有兩種方式支持網卡,一種是在內核中直接支持,另一種是加載模塊支持。在linux啟動的過程 中,查看是否有這樣類似的一行: Eth0: NE2000 Card found at 0x300 using IRQ 05 如果有,那麼您的網卡已經被Linux識別了,然後使用netconfig程序就可以完成網絡設置工作(IP地址、 網關、網絡掩碼等)。如果沒有發現這一行,但是知道網卡與某一類型網卡兼容,也可以使用模塊驅動這塊網卡, 方法是:修改/etc/rc.d/rc.modules文件,加入這樣一行: /sbin/modprobe ne (這裡應該設置成正確的兼容類型) 這樣在每次系統啟動的時候,都會自動的加載網卡驅動模塊,用戶的網卡就可以正常工作了。 如果上面的方法還不行,那麼就要重新編譯內核了,關於編譯內核的方法這裡不詳細介紹了,可以參看相關的技術文檔。重要的是,要在編譯內核的時候,要選中相關的選項。 問題一:如何才能讓Linux運行兩塊以太網卡? 這個問題的答案取決於驅動程序是否被用做可載入的模塊或者直接編譯進 了內核。大多數Linux發行版本現在都使用模塊化的驅動程序。這樣就不用 發行許多內核,每種內核設置一個不同的內建驅動程序。使用一個單 一的 基本內核,如果特定用戶系統需要,一旦系統啟動,就可以從驅動程序模 塊文件(通常存放在/lib/modules/) 中載入個別的驅動程序。 方法一,把驅動程序作為模塊使用: 對於PCI驅動程序,模塊通常會自動檢測該品牌類型所有安裝的網卡。 但對於ISA網卡,探尋一個網卡是不安全的操作,因此你需要提供網卡的I/O地址以便模塊知道去哪裡查找。這一信息 存儲在文件 /etc/conf.modules中。 假設用戶有一塊在0x350的3c503網卡和一塊在 0x280的SMC Elite16 (wd8013)網卡。則應該這樣: alias eth0 wd alias eth1 3c503 options wd io=0x280 options 3c503 io=0x350 對於PCI網卡,只要用alias語句把ethN接口和相應的驅動程序 名聯系起來就行了,因為PCI網卡的I/O地址 可以被安全地檢測到。 可用的模塊一般存放在/lib/modules/`uname -r`/net下,這裡 uname -r命令可以得到內核的版本(比如 2.0.34)。你可以在這裡看 看哪一個驅動程序適合你的網卡。一旦你在conf.modules文件裡進行了正確的設置,就 可以用下面的方法檢查一下: modprobe ethN dmesg tail 這裡“N”是你要檢測的以太網卡的接口號。 方法二,使用編譯進內核的驅動程序: 如果你需要的驅動程序編譯進了內核,那麼處理多塊以太網卡的接口已經存在了。但缺省情況下只自動檢測一塊以太網卡。這樣就避免了啟動 時檢測敏感網卡可能引起的麻煩。 (注意:在2.1.x之後的內核中,啟動檢測被分為安全和不安全的兩類,所 有安全的檢測(如對PCI和EISA網卡)可以自動找到所有相關的網卡。在至少有一塊ISA網卡的多網卡系統中還需要進行以下的處理。) 如何啟動對第二塊(或第三塊等等)網卡的自動檢測。最簡單的方法是向內核傳遞啟動參數,由LILO完成。 使用ether=0,0,eth1這 樣簡單的啟動參數就可以完成對第二塊網卡的檢測。此時按照啟動時找到的網卡順序分配eth0和eth1。假如你想讓0x300處的網卡為eth0,而0x280處的網卡為eth1,那麼可以使用 LILO: linux ether=5,0x300,eth0 ether=15,0x280,eth1 問題二:Linux支持吉比特以太網嗎? 是的,目前至少已經有了兩個驅動程序。在v2.0和v2.2內核裡有一個Packet Engines G-NIC PCI吉比特以太網適配器的驅動程序。驅動程序的更多細節、 支持和更新可訪問: http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.Html v2.2內核提供的acenic.c驅動程序可用於Alteon的AceNIC吉比特以太 網卡和其它如3Com的3c985一類的基於Tigon的網卡。這個驅動程序還可以 用於NetGear的GA620,但還需要證實。 問題三:異步傳輸模式(ATM)支持如何? Werner Almesberger在進行Linux的ATM的支持工作。他使用的是Efficient Networks的ENI155p板( Efficient Networks)和 Zeitnet的ZN1221板 ( Zeitnet)。 Werner說ENI155p的驅動程序已經很穩定了,而ZN1221的驅動程序還沒有完成。 三,顯示卡 顯示卡的配置正確與否,主要影響X Window的使用。在Linux中,X window的主要配置文件是/etc/X11/XF86Config, 這個文件的內容很復雜,我們不打算詳細介紹,這裡只介紹在使用程序配置X window常注意的問題。想要X Window正常 工作的關鍵是使用的X Server與你的顯示卡相一致。在設置XWindow的時候,調用Xconfigurator、XF86Setup或x86config程 序,用戶可以利用這些程序方便的設置X Window,而不需要手工的修改XF86Config文件。 Xconfigurator是個不錯的設置程序。使用Xconfigurator的時候,系統可以自動檢測出顯示卡的類型,並且正確的設置它,如果沒有檢測到,用戶可以在顯示卡列表中選擇自己的顯示卡,設置程序就會正確的設置X Server;如?br> 顯示卡類型沒有在列表中出現,那麼不妨就使用XF86_SVGA作為XWindow的Server,試驗一下X能否正常工作,因為這個 XServer兼容最多類型的顯示卡,一般來講,目前市面上80%以上的顯示卡都可以被這個Server支持,包括TNT,TNT2系列(要求Xfree86在3.3.6或者以上版本)。如果仍然不能運行,那麼就要到網絡上尋找最新的顯示卡驅動程序了。 除了設置X Server以外,設置顯示器的分辨率對於X能否正常工作也是至關重要的。設置何種分辨率取決於顯示器的類型。在設置程序中,如果顯示器類型在列表中出現,那麼選定它就可以了,如果沒有出現,那麼可以選擇custom項(自定義模式),在隨後的顯示器列表中選擇一款合適的顯示器類型就可以了。 以Xconfigurator設置程序為例,在它的列表中,就可以選擇分辨率和刷新率,用戶可以參照顯示器的技術指標來選擇正確的項目。如果用戶不知道顯示器的性能指標,不妨從最低的性能開始試驗,直到確定合適的顯示器類型。 在設置了顯示器類型後,就可以運行startx程序啟動X Window。 許多新顯卡一時得不到 XFree86的支持,配置 XWindow一直是個難題。但 Linux 2.2.x的 frame buffer設備可通過 VESA VBE 2.0標准利用顯卡的 Super VGA特性,然後配合 XFree86的 frame buffer Server(XF86_FBDev) 就可讓你的 XWindow用高分辨率和高/真彩。現在市面上絕大部分新出的顯卡都支持VESA 2.0標准。在你的顯卡得不到支持之前,這不失為一個好的解決方法。 具體實現涉及四方面: 1.一個支持 VESA frame buffer的內核; 2.建立 frame buffer設備; 3.配置 lilo 的啟動選項,使內核啟動時能切換到指定的顯示模式; 4.XFree86的 frame buffer Server(XF86_FBDev),以及在 XF86Config中為其配置一個Screen。 所需文件: Linux 2.2.x kernel source (2.2.x內核原代碼,如果要自行編譯內核); XFree86 Framebuffer Server: XF86_FBDev (Turbo Linux中文版,RedHat6.0 CD,FTP.xfree86.org 等地方都能 找到); gcc 等編譯工具。 編譯一個支持 VESA frame buffer的內核 如果有現成的支持 VESA frame buffer的內核可跳過這一步。如 Madrake 6.0中就帶有支持 frame buffer的內核。 配置內核編譯選項 在/usr/src/linux中鍵入make xconfig(XWindow下),或make menuconfig(命令行下)。 與 frame buffer device有關的選項有(其余編譯選項請參考其它資料): Code maturity level opetions y Prompt for development and/or incomplete codes/drivers Console drivers y Video mode selection support ... y Support for frame buffer devices ... y VESA VGA graphics console ... y Advance low level driver options ... y 8 bpp packed pixels support y 16 bpp packed pixels support y 24 bpp packed pixels support 編譯安裝內核: 以 root身份登錄,鍵入以下命令: # cd /usr/src/linux # make bzImage # make modules # make modules_install 把編譯好的內核拷到 /boot目錄,文件名可自定,如 # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.5-fb 建立 frame buffer設備 frame buffer設備的 major為 29,minor 為 0(fb0),32(fb1). . . 224(fb7)。 創建fb設備 # mknod /dev/fb0 c 29 0 .... 配置 lilo 的啟動選項 添加lilo啟動配置 下面是典型的lilo.conf文件(位於/etc目錄) boot = /dev/hda2 timeout = 500 prompt read-only image = /boot/vmlinuz-2.2.x label = linux root = /dev/hda2 other = /dev/hda1 label = dos 添加一新配置需添加 image,label,root及配合VESA frame buffer的 vga等四項: boot = /dev/hda2 timeout = 500 prompt read-only image = /boot/vmlinuz-2.2.x label = linux root = /dev/hda2 image = /boot/vmlinuz-2.2.5-fb (新編譯的內核) label = linuxfb (啟動標號,可自定) root = /dev/hda2 (著一句具體會有不同,照你自己的lilo.conf) vga = 0x314 (顯示模式,參照下表) other = /dev/hda1 label = dos Linux_kernel_mode_number = VESA_mode_number + 0x200 640x480 800x600 1024x768 1280x1024 256 0x301 0x303 0x305 0x307 32k 0x310 0x313 0x316 0x319 64k 0x311 0x314 0x317 0x31A 16M 0x312 0x315 0x318 0x31B 更新啟動程序 運行lilo 重啟,出現 lilo: 時鍵入linuxfb (或自定的標號)。 這時如果linux切換成圖形模式,並有一小企鵝logo出現,那就大功告成一半。 配置frame buffer Server 為 frame buffer Server配置Screen 參照 XF86Config (位於/etc/X11、/usr/X11R6/lib)中 vga16的配置。 例如: Section "Screen" Driver "vga16" Device "My Video Card" Monitor "MAG XJ500T" Subsection "Display" Modes "640x480" "800x600" ViewPort 0 0 EndSubsection EndSection 改動Driver, Modes, Depth三項,其余照抄 Section "Screen" Driver "fbdev" Device "My Video Card" Monitor "MAG XJ500T" Subsection "Display" Depth 16 (色彩深度,必須與前面所選的顯示模式的色彩深度一致,必須!) Modes "default" ViewPort 0 0 EndSubsection EndSection 讓X 指向 XF86_FBDev 把 XF86_FBDev文件拷到 /usr/X11R6/bin目錄。 在 /usr/X11R6/bin和 /etc/X11裡都有一個文件名為 X 的文件,它其實是一個類似Windows的快捷方式的東西,它 指向一個實際的 X Server文件,如XF86_VGA16。startx 腳本調用 X 啟動 Server而不管具體是哪個 Server。因此, 一定要把上面兩個目錄中的 X 都指向 XF86_FBDev,不同版本可能調用其中任意一個。 具體方法是改名(或刪除)原來的 X, cd /etc/X11 mv X X.bat 然後把 X 指向 XF86_FBDev, ln -snf /usr/X11R6/bin/XF86_FBDev X 如果一切順利,這時startx,就可以進入美麗新世界了。