1. 程式人生 > >Linux核心配置和編譯過程詳解

Linux核心配置和編譯過程詳解

一、引言: 
本文件的內容大部份內容都是從網上收集而來,然後配合一些新的截 圖(核心版本:V2.4.19)。在每一配置項後會有一個選擇指南的部份,用來指導大家怎麼樣 根據自己的情況來做相應的選擇;還有在每一個大項和文件的最後會有一個經驗談,它是一些高手們在應對問題和處理特有硬體時的一些經驗(這個還得靠各位)。 文件最後會發到網上,到時會根據網友們的回覆隨時進行更新。 
我們的目的是讓我們有一個全面的、簡單明瞭核心編譯幫手。

#make mrproper -----刪除不必要的檔案和目錄. 
#make config(基於文字的最為傳統的配置介面,不推薦使用) 
#make menuconfig(基於文字選單的 配置介面,字元終端下推薦使用) 
#make xconfig(基於圖形視窗模式的配置介面,Xwindow下推薦使用) 
#make oldconfig(如果只想在原來核心配置的基礎上修改一些小地方,會省去不少麻 煩) 
目的都是生成一個.config檔案,這三個命令中,make xconfig的介面最為友好,如果你可以使用Xwindow,你就用這個好了,這個比較方便,也好設定。如果你不能使用Xwindow,那麼就使用make menuconfig好了。介面雖然比上面一個差點,總比make config的要好多了。 選擇相應的配置時,有三種選擇,它們分別代表的含義如下: 
Y--將該功能編譯進核心 N--不將該功能編譯進核心 M--將該功能編譯成可以在需要時動態插入到核心中的模組 

[注:] 
請大家能夠發表自己的經驗和想法,使本文能夠不斷充實!但是最好 不要發一些從網cp過來的 沒有經過自己實踐的文章! 

二、配置核心


有了要編譯配置的核心,先來介紹怎麼樣配置核心。具體的步驟分為一下幾 步:
1.
在開始配置核心之前,首先需要通過下面的命令清除所有的臨時檔案、中介軟體和配置檔案。對於一個剛從網 上下載的核心來說,它肯定是乾淨的,這麼做只會多此一舉。但是這是一個良好習慣,而且不會有壞結果。

#make mrproper


2. 
然後 要了解自己系統的硬體配置情況,比如CPU的型別、主辦晶片、顯示卡和音效卡的型號等。
3. 
配置 核心選項,用到的命令是:

#make

用到的配置工具有: config 基於互動式的文字配置介面。每個問題以線形格式出現,並被一個一個地回答,而且一旦作出了回答就不能再修改 了。

 oldconfig config相似,但是使用原有的配置檔案, 而且只會提問有關新核心特性的問題,對於核心升級很方便。 menuconfig 一個文字模式、選單驅動的配置介面。 xconfig 基於Tcl/TkX圖形配置介面。現在開始配置核心,使用的工具為menuconfig。在命令列模式下執行下面的命 令:

#make menuconfig

在閃過幾行字之後就出現核心配置介面
使用方向鍵在各選項間移動;使用“Enter”鍵進入下一層選單;每個選項上的 高亮字母是鍵盤快捷方式,使用它可以快速地到達想要設定的選單項。在括號中按“y”將這個專案編譯進核心中,按“m”編譯為模組,按

“n”為不選擇(按空格鍵也可在編譯進 核心、編譯為模組和不編譯三者間進行切換),按“h”將顯示這個選項的幫助資訊,按“Esc”鍵將返回到上層選單。注 意,如果“make menuconfig”命令失敗,很可能是ncurses庫沒有安裝。
1.Code maturity level options:程式碼成熟等級。 
1.1.prompt for development and/or incomplete code/drivers. 
如 果要試驗現在仍處於實驗階段的功能,比如khttpd、IPv6等,就必須把該項選擇為Y了;否則可以把它選擇為N。在linux的世界裡,每天都有許多人為它發展支援的driver和加強它的核心。但是有些driver還沒進入穩定的階段。但其作者很歡迎其他人去測試這些driver並提出一些 bugs。這個問題是說,有一些drive還在做測試中,問您是否要選擇這些drive或支援的程式碼。如果鍵入Y,往後將會出現一些還在測試中的東西給您做選擇。(像Java的程式碼和PCI bridge),否則就鍵入N。 

經驗談: 

2.Loadable module support:對模 塊的支援。 
預 備知識: 
模 塊就像你特意插入核心中的某些東西,如果辦公室有一個小網路並且有時想用一下(但並不經常),也許你想把網絡卡編譯成一個模組。使用這個模組,機器必執行和存取/libs下的模組,意思是驅動程式(IDE,SCSI等但必須是NFS支援的網絡卡),檔案系統(通常是ext2但也可以是nfs)和核心型別(最好是elf)必須編譯在核心並且不能是模組,模組只有核心引導時才起作用,驅 動程式(來網路)的存取,和檔案系統安裝。這些檔案必須編譯在核心內否則將能安裝啟 動分割槽。如果安裝啟動分割槽和網路,你需要網路系統檔案,和己經編譯的網絡卡。為什麼要使用模組? 模組化使核心變的更簡捷,它減少核心釋放大量的受保護的空間。模組 的安裝和解除安裝使用的空間是可重複分配利用的。如果你開啟機器有90%以上的時間用到一個模組,編譯它。運用這類模組是浪費記憶體的,原因是一旦你編譯了模組它們同樣將佔用大量的記憶體, 核心需要一些程式碼來掛上模組。記住,核心在保護空間執行,但模組並不是。這麼說,並不經常使用我的裝置,把它編譯成只支援ext2,ide和elf。而一直使用的網絡卡,把其它的編譯成模組:如a.out, java, floppy, iso9960, msdos, minix, vfat,smb,nfs,smcultra(ethernetcard),serial,printer,sound,ppp,等等。它們許多隻是在這或那用上那麼幾分鐘。嚴格的說,這樣做會使核心增大許多而降低它的執行速度。這時我們就可以把這些 可能會用的驅動程式編譯成一個—個的模 塊,在需要用的時候才用insmod這 個指令加入核心,不用的時候也能rmmod把 它從核心移除,或是用lsmod察 看目前所載入的模組。 
2.1.Enable loadable module support. 
除非準備把所有需要的內容都編譯到核心裡面,否則該項應該是必選 的。 
2.2.Set version information on all module symbols. 
通常,我們更新核心版本之後,模組耍重新的編譯。這個選項使您不 必更新編譯模組而能使用以前的模組。可以不選它。但如果您選y,則按照它的說明,您必須有genksyms這個程式(可用whereis指令檢視有無此程式)。 
2.3.Kernel module loader. 
讓核心在啟動時有自己裝入必需模組的能力,建議選上。注意:在開 機就會 mount 上來的 partition 的 FS 、device driver 記得要 compiler 進 kernel,不能把它弄成 modules。請不要誇張到為了完全模組化而忘了把ext2fs和IDE dirver compiler 進 kernel 裡。 

經驗談: 
a.可載入模組是指核心程式碼(kernel code)的一些片斷,比如驅動程式,當編譯核心的時候它們也被單獨編 譯。因此,這些程式碼不是核心的一部分,但是當你需要它的時候,它可以被載入並使用。通常的建議是如果可能,將核心程式碼編譯成可載入模組,因為這樣可以使內 核更小,而且更穩定。 警告!千萬不要將檔案系統(File System)部分的程式碼編譯為可載入模組,如果你犯了這個錯誤,將檔案系統 (File System)部分的程式碼編譯為可加 載模組,結果將是核心無法讀取它自己的檔案系統。然後核心無法載入它自己的配置檔案——一些很明顯是在正常啟動linux時所必需的東西。我很少使用可載入模組:我喜歡我的核心能夠直接和硬體對話,但這只是我自己的偏好。 


3.Processor type and features: 處理器型別和特色。 

3.1.Processor family. 
它會對每種CPU做最佳化,讓它跑得快又好。一般來說,沒有選擇正確的CPU並不會有重大的影響(特別是選擇386 ,這樣編譯出來的核心也許會比較小但它的速度可能就會變慢了)。 所以,最好要知道您的CPU是哪 一種。不過,如果您的gCC編譯 器是2.7.0版以前的。那麼只能選擇386或是486。通常"/dev/cpu"選項更高階,多數使用者並不需要選擇它。 
3.2.High Memory Support. 
只有當你的計算機有超過1GB內 存(不是磁碟空間)時才是必須的。 多數計算機的記憶體從64到512MB(並且擁有8到60GB硬碟空間),因此"High Memory Support"通常並不使用。 
3.3.Math emulation. 
這項詢 問是否需L1nux核 心模擬數學浮點運算器。如果有486Dx、AMD以及Pentium機器的話,這個選項就不必選了,因為它們都有內建的浮點運算器。 協處理器是在386時代 的寵兒,現在早已不用了。不過,對於有內建浮點運算器的人來說,選了這個選項並不會因此讓內建的浮點運算器失效。但它會增大核心約45KB。 
3.4.MTTR (memory type range register)support. 
這項允許在PCI或者AGP匯流排眾進行更快速的通訊。 由於現在所有系統都將它們的顯示卡接在PCI或AGP總線上,你通常需要選擇"MTRR":無論如何,開啟這個選項通常都是安全的——即使你的機器沒有使用PCI或AGP匯流排的顯示卡 
3.5.Symmetric multi-processing support. 
選項保證核心能夠以最佳方式載入多處理器。除非有多個CPU,否則就不用選了。 
3.6.Mutiquad NUMA system. 
通 常也需要多處理器,但它通常是關閉的。 

經驗談: 

4.General setup:常規核心選項。 
4.1. Networking support. 
通常每個人都會選擇"Networking support",因為你通常需要它,比如Internel。 linux有很重的Internet偏向,而且它在沒有聯網的情況下無法充分發揮優勢。另外,許多其他的操作也網路支援——即使它們看上去跟網路沒多大關係。核心在沒有網路支援選項的情況 下甚至無法編譯。簡而言之:一定要開啟"Networking support"選項。 
4.2. PCI support. 
現在的所有系統都使用PCI匯流排,所以你應該選擇相關選項。 
4.3. PCI access mode. 
PCI存取模式。可供選擇的有BIOS、Direct和Any,選Any吧。 
4.4. Support for hot-pluggabel devices. 
熱插拔裝置支援。支援的不是太好,可不選。 
4.5. PCMCIA/CardBus support------>PCMCIA/CardBus support. 
有PCMCIA就必選了。 
4.6. System V IPC. 
如 果將來想編譯dosemu(DOS模擬器),則這個選項一定要選,它是一個讓各個程式(process)同步且能彼此交換資料的函式庫和一些系統的呼叫,沒它,很多的 程式將會無法執行。 
4.7. BSD Process Accounting. 
4.8. Sysctl support. 
除非你的記憶體少的可憐,否則你應該啟動這個功能,啟用該選項後內 核會大8K,但能讓你直接改變核心的引數而不必重新開機。以上三項是有關進 程處理/IPC呼叫的,主要就是System V和BSD兩種風格。如果你不是使用BSD,就按照預設吧。 
4.9. Kernel core (/proc/kcore/) format. 
現在的linux發行版以ELF格式作為它們的"核心核心格式"。 
4.10. Kernel support for A.OUT binaries. 
a. out的執行檔案是比較古老的可執行碼,用在比較早期的UNIX系統上。linux最初也是使用這種碼來執行程式,一直到ELF格式的可執行碼出來後,有愈來俞多的程式碼隨著ELF格式的優點而變成了ELF的可執碼。將來勢必完全取代a.out格式的可執行碼。但目前由於沿有許多的程式還沒有取代過來,所以只 好選擇Y,等將來有一天,全部的程式都變成了ELF的天下時,那時再disable掉。 
4.11. Power Management support. 
電源管理支援。 
4.12. Advanced Power Management BIOS support. 
高 級電源管理BIOS支 持。這通常是用在膝上型電腦上的東西,如果您有APM的BIOS, 支援省電的裝置的(有電池的那種),那麼您可以選上這項,一般人這一項是選n,以避免一些可能會發生的問題。後有8個選項。ATX主機板需要這兩個選項來自動關閉計算機(turn off the computer,包括關閉電源)。 

經驗談: 


5.Memory Technology Devices (MTD):配置儲存裝置。 
5.1. Memory Technology Devices (MTD) support. 
你 需要這個選項來使linux可 以讀取快閃記憶體卡(Flash Card)之類的儲存器。 快閃記憶體卡通常用於數碼相機。通過這個選項,Linux可以讀取快閃記憶體卡(從特殊的裝置中,比如讀卡機),並且將圖片儲存 為.jpg格式。除非你確定你需要它,否則不必開啟它:如果你發現自己需 要,你可以在以後加上。 
6.Parallel port support:配置並口。 
6.1. Parallel port support. 
如果不打算使用,就別選了。 

7.Plug and Play configuration:即插即用支援。 
7.1. Plug and Playsupport. 
幾乎所有人都有即插即用裝置,因此需要這個選項的支援。 開啟這個選項使核心能夠自動配置即插即用裝置並且使它們在系統中能 夠使用。 有時需要在BIOS中開啟"Plug & Play OS",否則linux(當然Windows也一樣)無法配置即插即用裝置。 
7.2. ISA Plug & Play support. 
選項需要以即插即用模式執行的ISA卡(ISA Card)。 例如AWE64音效卡。ISA匯流排(ISA bus)從來都沒有即插即用標準,這增加了配置這些板卡的難度。在2.4.x核心之前的早些時候,linux使用者在啟動時必須呼叫(call)"isapnp"程式(isapnptools包,使用rpm qil isapnptools檢視包含的所有 檔案)。 "isapnp"讀取"/etc/isapnp.conf"檔案。這個檔案包含不同板卡使用的所有埠,地址和中斷。如果/etc/isapnp.conf中的資訊不正確,或者"isapnp"沒有被啟用,即插即用裝置就無法使用,甚至網絡卡、modem、音效卡也無法工作。 開啟"ISA Plug & Play support"選項來代 替以前的工序:不再需要/etc/isapnp.conf檔案。檢測和配置工作都自動進行。 在SuSE 7.1中,在編譯2.4.x內 核後我必須重新命名/etc/isapnp.conf為"/etc/isapnp.conf.old"之類的名稱。因為核心和 "isapnp"使用相同的資源,造成很慘的後果。 問題在於SuSE 7.1(以及更老的版本)在啟動時自動啟用"isapnp",即使核心已經包括了對即插即用的必要支援。這只是對於老Linux系統而言,新的系統預設不使用"isapnp"。 

8.Block devices:塊裝置支援。 
8.1. Normal PC floppy disk support. 
普通PC軟盤支援。每個人都要使用軟盤(floppy),所以這個選項要開啟(或者,象我這樣,作為一個可載入模組)。倘若 /etc/modules.conf或 者/etc/conf.modules檔案在你的linux發行版中已經被適當配置了,當需要訪問軟盤的時候,核心會自動加 載必須的模組。其他的選項在你使用並口連結IDE儲存裝置的時候是必需的,但是它們通常是關閉的。"loopback device support"選項可能例外。在Linux下,燒錄(burn)光碟之前你通常需要製作一個光碟映象,在檢視映象檔案的內容時 需要"loopback device"。 我選擇了這個選項作為可載入模組。 
8.2. XT hard disk support. 
支援XT的古董 硬碟,這是IBM電腦 時代的東西,如果您還有這種很舊很舊的硬碟。那麼,您可以把它編進核心或是編成一個模組。大部分的人這個選項都是選擇N的。 
8.3. Loopback device support. 
這個選項的意思是說,可以將一個檔案掛成一個檔案系統。如果要燒光碟片的,那麼您很有可能在把一個檔案燒進去之前, 看看這個檔案是否符合IS09660的檔案系統的內容,是否符合您的需求。而且,可以對這個檔案系統加以保護。不過,如果您想做到這點的話,您必須有最新的mount程式,版本是在2.5X版以上的。而且如果您希望對這個檔案系統加上保護,則您必須有des.1.tar.gz 這個程式。注意:此處與網路無關。 

9.Multiple devices driver support:多裝置驅動支援。 
9.1. Multiple devices driver support. 
普通linux使用者通常不需要RAID(廉價冗餘磁碟陣列)或者LVM支援。 "RAID"的意思是系統使用兩塊或兩塊以上硬碟儲存並行資訊。當一塊磁碟出 現問題的時候另一塊可以繼續工作,系統不停頓。LVM讓使用增加一塊硬碟來擴充套件一個分割槽成為可能。。在實際應用中,這意味著你不必重新分割槽或將一個小的分割槽複製到一個大 分割槽中。 路徑名也不會改變。 這可能會十分方便,但是普通使用者並不需要它。 

10.Networking options:網路選項。 
10.1. Packet Socket. 
選 擇"Y",你需要這個選項來與網絡卡進行通訊而不需要在核心中實現網路協 議。 在這裡我可以簡捷一些:一般情況下,開啟這個選項。 大多數選項是關閉的,除非你需要特殊的支援。 
10.2. TCP/IP networking. 
選擇"Y",內 核將支援TCP/IP協 議。這個選項無論如何請您選擇Y,即使沒 有網路卡,或是沒有連到網路上的裝置,在linux上仍有所謂的 lookback裝置而且有些程式需要這個選項。在說明檔案中提到,如果您沒有開啟這個設定,則X-window system可能會有問題(回為它也需要 TCP/IP)。 
10.3. IP:multicasting. 
所謂的 multicasting是群組廣播,它是用在視訊會議上的協議,如果想送一個網路封包 (網路的資料),同樣的一份資料將送往十部機器上。您可以連續送十次給十臺機器(點對點的傳送),也可以同時送一次,然後讓十臺機器同時接收到。當然後者 比前者好,由於視訊會議要求是最好每個人都能同時收到同一份資訊,所以如果您有類似的需要,這個選項就要開啟。同時您還必須去找相關的軟體。

經驗談: 
a. 我選擇了"Network packet filtering (replaces ipchains)",因為我使用了SuSE的標準防火牆(Standard Firewall)。 防火牆可以保護你的機器不受來自外部Internet的攻擊——至少當你正確配置了防火牆的時候是如此。核心級的防火牆保護顯然是 十分優越的。為了使防火牆能夠正常工作,SuSE linux需要對ipchains的相容支援(Backwards Support)。 因此,我為我的SuSE Linux打開了這個選項。 如果你也在其他發行版中使用了防火牆,請參考它們的手冊。你需要"Unix domain sockets"來進行網路連結,但也 可以使用其他的東西: XWindow要自動使用Unix sockets,所以如果沒有開啟這個選項,XWindow將無法啟動。 通常這個選項是開啟的。 "TCP/IP networking"選項包括了Internet和內部網路所需要的協議。 通常你會希望啟用TCP/IP支 持。如果你不確定是否應該開啟一個選項,參考一下幫助文件。 如果你還是不知道是否應該開啟它,一般來說,就把它開啟,然後通過試用來決定是否保留。將某些特定的選項編譯為模組也是一個很好的辦法。 

11.Telephony Support:電話支援。 
11.1.linux Telephony Support. 
這個選項只有當你在計算機中使用電話卡的時候才有用,比如在Internet上打電話。 大多數普通使用者沒有電話卡,因此不需要這個選項。 


12.ATA/IDE/MFM/RLL support:配置對ATA,IDE,MFM和RLL的支援。 
12.1. ATA/IDE/MFM/RLL support. 
幾乎每個人都需要這些協議,除非你的機器只有SCSI硬碟而沒有其他任何型別的硬碟。 因此,大多數使用者都應該把它開啟。 點選它下面的那一欄將會出現一個有更詳細配置選項的選單。仔細填寫 它們:它們極為重要! 
12.2.Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support. 
選項是每個使用IDE/ATAPI介面的人都需要的。 包括硬碟,磁帶機,ZIP盤,光碟機(CDROM)和燒錄機(CD-R(W))。 基本上現在的所有計算機(譯者注:這裡指的是PC)都使用IDE/ATAPI介面,因此這個選項必須開啟。 
12.3. Include IDE/ATA-2 DISK support. 
選項在支援硬碟的時候需要。 因此這個選項也必須開啟,除非你的機器是一個純粹的SCSI系統。 
其它的就使用預設的選項吧,如果你使用了比較特殊的裝置,比如PCMCIA等,就到裡面自己找相應的選項吧。 

經驗談: 
a. 如果你有ATAPI CDROM的話,應該開啟"include IDE/ATAPI CDROM support"選項。 ATAPI的CD-R(W)需要模擬為SCSI的才能被訪問。SCSI模擬可以用來訪問CDROM和CD-R(W)。如果你使用模擬SCSI的方式來訪問CDROM,你將會遇到問題,比如當你掛載(mount)CD的時候出現錯誤資訊(Error Message),或者使用CDROM播放CD唱片(Audio CD) 最好的辦法是象圖這樣,將"include IDE/ATAPI CDROM support"和"SCSI emulation support"選項都開啟。需要SCSI模擬的裝置通常是CD-R(W),可以在/etc/lilo.conf中加入"append="hdd=ide-scsi":"行進行定義,這將在"配置lilo"中進行討論。 因為我有一個使用ATAPI介面的內建ZIP驅動器,所以我把"include IDE/ATAPI FLOPPY support"選項開啟。 如果你有軟盤類的驅 動器(譯者注:包括ZIP盤、LS-120等大容軟碟機,但不包括MO磁光碟)。大部分主機板使用"PCI IDE"(譯者注:就是指通過佔用PCI匯流排頻寬進行通訊的IDE介面)對硬碟、CDROM和軟碟機進行訪問,因此這個選項必須開啟。同樣的有兩種開啟DMA的可能性。 DMA使你的硬體直接訪問記憶體,而不需要處理器的干預。 因此,正如你所希望的,IDE磁碟的訪問速度會加快。 "sharing PCI IDE interrupts support"是關閉的,因為你通常不需要它。的確,某些IDE控制器允許和其他裝置共享中斷,比如網絡卡。不幸的是,共享IDE中斷會使磁碟效能下降,因此通常你不需要共享中斷,除非這是解決 硬體問題的唯一辦法。 


我的主機板有一顆Pentium II CPU,而且使用的是Intel的晶片組,因此我希望能夠對該晶片組提供特殊支援。 當你選擇你自己的核心選項時,你應該看看圖沒有顯示的其他晶片組。 

13.SCSI support:SCSI裝置的支援。 
13.1. SCSI support. 
如果你有 一塊SCSI卡,你當然需要開啟相關選項。這張截圖只顯示了當你為你的CD-R(W)選擇"SCSI emulation support" 

13.2. SCSI disk support. 
指硬碟而言,如果有SCSI硬碟,那麼就要選這個選項。 
13.3. SCSI tape support. 
指 磁帶機而言,如果您有SCSI的 磁帶機,那麼就要選這個選項。 
13.4. SCSI CDROM support. 
指CDROM,如果您有SCSI光碟機,這一項一定要選。 
13.5. SCSI generic support. 
指其他有關SCSI的 東西,也許您有一臺SCSI的 掃描器或是燒錄機,或是其他有關SCSI的 配備,您就要選這一項。而且,除此之外,您還必須準備關於這些配備的軟體。 
13.6. Probe a11 LUNs on each SCSI device. 
通常這個選 項大部分的人都不會選。我們舉個例子來說,如果您的SCSI光碟機是那種多片裝的,就是一臺光碟機,但可以一次放好幾片光碟片的那種。這種我們叫做Lun。I2O Device Support:配置I2O裝置支援。 
13.7. Verbose SCSI error reporting(kernel size+=12K). 
如果認為您的SCSI硬體配備有些問題,想了解一下它出現的錯誤資訊。那麼您可以把這個選項選y,linux核心會告訴您有關於您的SCSI配備的問題(如果有的話)。不過,它會增加核心約 12KB左右。 
13.8. SCSI low—level drivers. 
下面總共有接近30張的SCSI卡,您可以依需求做選擇SCSI卡牌子。 

14.I2O Device Support:I20裝置支援。 
14.1. I2O Device Support. 
如果你有I2O界 面,你必須選擇這個選項。大多數人沒有,如果你也沒有的話,可以直接將它關閉。 
15.Network Device Support:網路裝置支援。 
15.1. Network Device Support. 
網路裝置支援。上面選好協議了,現在該選裝置了,可想而知,內容肯定多得很。還好還好,裡面大概分類了,有ARCnet裝置、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support幾大類。 我用的是10/100M的乙太網,看來只需要選則這個了。還是10/100M的乙太網裝置熟悉,內容雖然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,為了免得麻煩,編譯到核心裡面好了,不選M了,選Y。耐心點,一般說來你都能找到自己用的網絡卡。如果沒有,你只好自己 到廠商那裡去要驅動了。 
15.2. Dummy net driver support. 
如果有SLIP或PPP的傳輸協議,那麼要把這一項開啟。因為一來它不會讓您的linux核心增大。二來,對某些應用程式來說,它可以讓我們模擬出來的TCP/IP環境更像TCP/IP環境。如果您沒有SLIP或PPP 協議,就不用打開了。#EQL(serial line load balancing) support------如果有兩個MODEM,兩條電話線而且用SLIP或PPP協議,可以用這個Driver以便讓您的MODEM有兩倍的速度。當然,在網路的另一端也要有同樣的裝置。 
15.3. PPP(point-to-point)support. 
點對點協議,近年來,PPP協議已經慢慢的取代SLIP的規定了,原因是PPP協議可以獲取相同的IP地址,而SLIP則一直在改變IP地址,在許多的方面,PPP都勝過SLIP協議。 
15.4. SLIP(serial line) support. 
這是MODEM族常用的一種通訊協議,必須通過一臺Server(叫ISP)獲取一個IP地址,然後利用這個IP地址,可以模擬乙太網絡,使用有關TCP/IP的程式。 
15.5.1. Ethernet(10 or 100Mbit). 
如果您使用網路卡,那麼這個選項一定要選y,否則以下對網路卡的選擇將不會出現。或是您有網路卡,這時您同樣 的也要選y。之後, 下面會列出許多網路卡讓您選擇。像我們平常用的都是NE2000相容卡。 
15.5.2. EISA, VLB, PCI and on board controllers. 
選擇網路卡,包括直接附在主機板上的那種。如果選擇y,則底下會列出其他的網路卡讓您做選擇,這些卡對於一般人來說很少 會去用到。所以大部分的人這項是選N的。 
15.5.3. Pocket and portable adaptors. 
通常用在可攜式的電腦上,這型別的網路卡(口袋型的),由於體積很小在安裝和取下方面很方便,因此筆記本相關電腦上 便常常採用這種網路卡。 
15.5.4. Token Ring driver support. 
Token Ring是 IBM電腦上的網路。它叫令牌環網路,和乙太網絡是很類似的東西。如果 您希望使用的Token Ring網路卡以便連線到這種網路,那麼選Y,一般人都選N。 
15.5.5. ARCnet support. 
這也是一種網路卡,通常一般人用不到,所以選n。如果您有這樣的網路卡,請看Documentation/networking/arcnet.txt的說明。 

經驗談:這一般是新手難辦的一個地方。 
a. 我從來都沒有在沒有網絡卡支援的情況下將linux核心編譯成功過。 因此,你應該開啟這個選項。 你還應該開啟虛擬驅動(Dummy Driver),作為核心的一部分或者一個可載入模組。 當沒有物理網絡卡的時候,Linux需要一塊虛擬網絡卡(Dummy Network)。即使已經有了物理網絡卡,Linux仍然經常使用虛擬網絡卡。 在圖所示的選單中,你可以選擇網路型別和網絡卡。注意,如果你想要通 過modem來訪問Internet的話,你需要進行更多的設定: 你必須開啟"PPP support for async serial ports"(用於COM端 口)或者"PPP support for sync tty ports"(用於通過諸如SyncLink adapter進行的高速連線)選項以 提供PPP支援。 如果你沒有開啟它們,核心將會告訴你PPP模組(PPP Module)不存在——即使你已經編譯了,錯誤資訊(Error Message)對於查詢真正問題的所在幾乎沒有作用。你可以將它們都選上,這 樣可以避免一些問題:如果核心需要它們,就會使用它們,如果不需要,就不用。 
我的乙太網卡是一塊使用 3c509/3c529晶片的3COM百兆網絡卡。因為我並不需要與網路進行物理連線(我有網絡卡,但是我並不通過modem來訪問網路),因此我將這個趨同編譯成一個可載入模組,以便萬一 要需要網絡卡的時候可以使用。 你當然需要選擇與你機器的情況相符的網路型別和網絡卡。另外,你必 須使用諸如SuSE linux下的"yast2"之類的配置程式配置網路連結。 

16.Amateur Radio support:配置業餘廣播支援。 
16.1. Amateur Radio support. 
如果你希望使用業餘廣播支援,應該開啟這個選項,並且開啟相應的驅動。 多數人不需要這個選項。 

17.IrDA(infrared)support:配置紅外線(無線)通訊支援。 
17.1. IrDA(infrared)support. 
如果你有無線裝置,比如無線滑鼠或無線鍵盤,你應該開啟這個選 項。 多數桌面機器不需要這個選項。 

18.ISDN subsystem:配置ISDN。 
18.1. ISDN support. 
如果使用ISDN上網,這個就必不可少了。ISDN(Integrated Services Digital Network),它的中文名稱是綜合數字服務網路,是一個利用電話線,把聲音,影片資訊以數字的方式傳送的數字網路,它需要電話交換機裝置有支援 ISDN,這通常需要電信局來做安裝,對於在家工作的人來說,ISDN可能是最舒適最便宜的一種方式,因此有愈來愈多的人使用它。不 過,除非是公司,不然一般人很少會使用到ISDN的,所以這部分的選項大都選N。如果您選擇Y,則下面會出現一些有關ISDN的 問題。如果需要用到ISDN, 可以去看看雜誌的介紹。只要是有關網路的雜誌應該都會有介紹。還需要啟用Support synchronous PPP選項(參考PPP over ISDN)。 

19.Old CD-ROM drivers(not SCSI、not IDE):配置老CDROM。 
在486和386機器中,CDROM並不是通過硬碟IDE(ATAPI)控制器連線的,而是通過音效卡或一塊特殊的板卡。 使用這些老CDROM需要選擇對應的驅動。 這個選項在現在的系統中顯得多餘。 

20.Input Core Support: 
這個選項提供了2.4.x核心中最重要的特性之一的USB支援。 Input core support是處於核心與一些USB裝置之間的層(Layer)。如果你擁有其中一種USB裝置,你必須開啟"input core support"選項。 現在所有的主機板都有USB介面,所以,原則上你應該開啟它。 

21.Character devices:字元裝置。 
21.1. Virtual terminal. 
選擇"y",內 核將支援虛擬終端。 
21.2. Support for console on virtual terminal. 
選擇"y",核心可將一個虛擬終端用作系統控制檯。 
21.3. Standard/generic (dumb) serial support. 
選擇"y",核心將支援序列口。標準序列介面的選定。如果您是用serial的滑鼠(大部分的人都是用這個),或是MODEM的話,則這一項一定要選。大部分的人這一項都選y。 
21.4. Support for console on serial port. 
選擇"y",內 核可將一個序列口用作系統控制檯。 
21.5. I2C support. 
I2C是Philips極力推動的微控制應用中使用的低速序列匯流排協議。如果你要選擇下面的Video For linux,該項必選。 
21.6. Mice. 
滑鼠。現在可以支 持匯流排、串列埠、PS/2、C&T 82C710 mouse port、PC110 digitizer pad------根據需要選擇。非 序列的滑鼠,支援象PS/2。 看一看你滑鼠的鍵。許多雙鍵滑鼠是PS/2, 即使它們的連線看起來象序列的。 
21.6.1. PS/2 mouse (aka "auxiliary device") support. 
如果使用者使用的是PS/2滑鼠,則該選項應該選擇"y"。 
21.7. Joysticks. 
手柄。 即使在linux下把手柄驅動起來意義也不是太大,遊戲太少了。 
21.8. Watchdog Cards. 
雖然稱為Cards, 這個可以用純軟體來實現,當然也有硬體的。如果你把這個選中,那麼就會在你的/dev下建立一個名為watchdog的檔案,它可以記錄你的系統的執行情況,一直到系統重新啟動的1分鐘左右。有了這個檔案,你就可以恢復系統到重啟前的狀態了。 

經驗談: 
a. 
最上面的選項("virtual terminal")允許在XWindow中開啟xterm和使用字元介面登入。 通常這個選項是開啟的。第二個選項("support for console on virtual terminal")告訴核心將諸如模組錯誤、核心錯誤啟動資訊之類的警告資訊傳送到什麼地方,在XWindow下,通常設定一個專門的視窗來接收核心資訊,但是在字元介面下, 這些資訊通常被髮送到第一個虛擬終端(Virtual Terminal)(CTRL+ALT+F1)。 將這個選項開啟。 你還可以選擇將資訊傳送到串列埠(Serial Port)裝置,比如印表機或其他的終端(第四個選項)。 如果將資訊傳送到印表機,你還必須使用選項三啟用串列埠。同樣,如果 你使用串列埠滑鼠(Serial Mouse),你也必須啟用串列埠。 再說一遍,選項三("standard/generic (8250/16550 and compatible UARTs) serial support")通常是開啟的。在我 的系統中,我將它編譯為一個可載入模組。原因是在啟動的時候SuSE老抱怨"serial support"丟失,而如果確定模組的確存在,將其編譯為可載入模組是避免上述抱 怨的的好辦法。 配置字元型裝置是極為重要的工作。如果你的配置不正確,你有可能 得到一個根本不能工作的系統。 
如 果你想使用遠端使用自己機器上的xterm, 比如通過telnet或 者ssh,你必須開啟"unix98 PTY support"選項。 桌面系統看上去似乎不需要這個選項,但是許多後臺程序需要使用這個 選項。因此,無論如何,將它開啟是個好主意,至少可以避免啟動時顯示錯誤資訊(至少SuSE是這樣)。 所有擁有並口印表機的人當然需要"Parallel printer support"。 不過,並不是所有人都需要並口:USB印表機就不需要。 核心資訊可以通過開啟"Support for console on line printer"選項傳送到並口:通常,你並不需要它。 如果你有某些裝置 需要佔用並口,你需要"support for user-space parallel port device drivers"選項,但是通常不必。 同樣,你通常不需要"I2C support"選項:這是視訊處理卡所需要的,但是如果你發現你需要它,你通常 可以在以後加入到核心中——只要你 覺得核心執行得好。如果你使用滑鼠和遊戲杆,你需要開啟相應的支援,但是並不是所有滑鼠都使用這個驅動。 現在的CD-R(W)使需要"QIC-02 Tape support"的磁帶機(Tape Drives)大量閒置,因此這個選項通常是關閉的。

如果你使用串列埠滑鼠,你根本不需要這個選項的任何專案,但是所有 其他型別的滑鼠則需要在這裡進行引數配置。 如果你使用最初的總 線滑鼠(ORIGINAL Bus Mouse)你需要開啟最上面的選項。現在的許多計算機使用另外一種滑鼠,通常(而且是錯誤的)稱作"busmouse"或者"PS/2滑鼠"。這些滑鼠通常連線到/dev/aux,並且插在一個與鍵盤相同的小介面中。 通常,這種滑鼠通過鍵盤來連線到計算機。要讓這些滑鼠正常工作,你 必須開啟如圖29所示的 選項,"mouse support (not serial and bus mice)"和"PS/2 mouse (aka "auxiliary device" support)"。這些是上面沒有討論的核心選項。它們通常是關閉的。 "Ftape, the floppy tape device driver"選項需要對連線到軟碟機控制器的磁帶機的支援。甚至即使你有一個那樣的磁帶機,這個選項都不是必須的,至少不是首要 的。 其他選項需要3D顯示卡。 如果你有一塊連線到AGP匯流排(AGP Bus)的顯示卡,你需要開啟AGP支援,還需要相應的驅動(在/dev/agpgart(AGP支援))。注意,你可以編譯一個不包含這些選項,但是能夠正常工 作的核心,但那沒必要! 如果沒有這些選項,XWindow 4.0或者更高版本(被現在的多數發行版使用)將無法工作。 我的機器有一塊AGP顯示卡,nVidia TNT2,但是核心的相應模組並不支援這塊顯示卡(nVidia拒絕透露開發驅動所必須的技術細節)。 很不幸,開啟AGP支援對於我來說沒有多大意義。雖然有這個問題,我仍然可以在不需 要核心驅動的情況下使用XWindow 4.0。 "Direct rendering support"是為XWindow 4.0提供的圖形加速選項。 要想使用這個選項,你的顯示卡必須能夠被支援,而且你必須使用XFree86 4.0及以上版本。 另外,你還需要開啟"AGP support"選項。 你可以編譯一個不包含這些選項的核心,它照樣可以正常工作。 

22.Multimedia Devices:配置多媒體裝置。 
如果你有一塊視訊處理卡或者廣播卡,需要開啟這個選項。 跟前面一樣,這個選項不是必需的。 

23.File System:配置檔案系統。 
23.1. Kernel automounter support. 
選擇"y",核心將提供對automounter的支援,使系統在啟動時自動 mount遠端檔案系統。 
23.2. DOS FAT fs. 
DOS FAT檔案格式的支援,可以支援FAT16、FAT32。這個選項是DOS的檔案系統,如果您沒有選y,則下面的MSDOS,VFAT,umsdos將不會出現。 
23.3. MSDOS fs support. 
如果你想要在 linux 下使用你硬碟中的 MS-DOS 分割區,或是想將用 MS-DOS 格式化的磁碟掛進來的話,回答y 。 
23.4. FAT(Windows95) fs support. 
windows95所支援的檔案系統,是我們常說的vfat檔案系統,如果您的系統中裝有windows95,那麼選擇這個檔案系統將對以讓您看到windows95的長檔名。 
23.5. umsdos: UNIX like fs on top of std MSDOS FAT fs. 
如果把linux裝進DOS的一個目錄下那麼您則要選擇這一項。不建議這樣做,因為如此一來,就不能看到長檔名了。而且效率上不是很好。 
23.6. Quota support. 
Quota可以限制每個使用者可以使用的硬碟空間的上限,在多使用者共同使用一臺主機的情況中十分有效。 
23.7. /proc file system support. 
這是最 slick 的檔案系統之一。它不是你硬碟分割區裡的任何東西,不佔用硬碟的空間,而是核心與程式之間的檔案系統介面,它表示的 只是記憶體裡頭的狀況和各個程式執行的情形,它也記錄了您硬體上配備。。許多程式工具(像″ps ″)都會用到它。如果已經將它安裝好了,有空不妨試試看″cat /proc/meminfo ″或者是″ cat /proc/devices ″。有些 shells ,像是 rc ,會用 proc/self/fd(在其它系統上為/dev/fd )來處理輸出入。幾乎可以確定你在這裡得要回答y ,有許多重要的 linux標準工具是靠它來運作的,否則有些指令會出問題。 
23.8. ISO 9660 CD-ROM file system support. 
光碟使用的就是ISO 9660的檔案格式。 
23.9. NTFS file system support. 
ntfs是NT使用的檔案格式。 
23.10. UFS filesystem support. 
這是BSD,SunoS,FreeBSD,NetBSD或Nextstep所使用的檔案系統。如果您在電腦上有這些作業系統的話,那麼可以 選這一項。否則一般人都選n。 

23.11. Network File Systems:網路檔案系統。 
23.11.1. NFS file system support. 
如果你在網路環境下而且想要分享檔案,回答 y 。如果希望掛上別的電腦的檔案系統,那麼這個選項一定要選進去。 它可以讓您利用網路把別人的硬碟當成自己的來使用(把它變成一個目錄)。對於一般人來說,這個選項是選y。 
23.11.2. SMB filesystem support. 
這個檔案系 統讓您可以掛上windows95或windowsNT的檔案系統,也就是您也可以抓到在windows下,網路上的芳鄰上的電腦。 
23.12. Partition Types. 
分割槽型別,該選項支援一些不太常用的分割槽型別,使用者如果需要,在 相應的選項上選擇"y"即 可。 
23.13. Native Language Support:本地語言支援。 

經驗談: 
a. 
在這裡,你可以指定linux能夠訪問的檔案系統。或許你希望製作一個能夠訪問Windows分割槽和Windows軟盤的核心,但是你必須保證核心可以訪問Linux自己的ext2檔案系統,或者是更新的 ReiserFS檔案系統。如果你沒有這樣做,Linux會無法啟動,因為核心無法讀取它自己的啟動盤。要想訪問DOS/Windows軟盤和分割槽,你需要開啟"DOS FAT support"選項:但是要想訪問Windows NT/2000的分割槽,你需要另外一個 只讀(Read-only)驅動,這將在後面進行選擇。要想讀寫DOS/Windows分割槽和軟盤,你需要開啟"MSDOS fs support"選項(注意,"DOS FAT support"並不提供讀寫功能)。 事實上,每個人都希望這樣,因此通常這個選項是開著的。 "VFAT"需要Windows95/98的長檔名支援。我的機器是一個可以通過lilo啟動Windows 98和Linux的雙重啟動系統(dual boot system)。 因此,我需要啟用"VFAT"。 你需要加入對ISO 9660的支援來讀取標準格式的光碟(CD)。 "Joliet extensions"選項允許在ISO 9660標準中使用長檔名。多數人都希望能夠讀取現在的光碟,因此這些 選項通常也是開啟的。 圖詳細講述了一些附加選項,其中包括包括Linux的ext2檔案系統。 

/proc 目錄中的檔案包含了關於系統狀態的許多重要資訊,比如那些中斷正 在使用。 一般來說,你應該把這個選項("/proc file system support")打 開。。 "Second extended fs support"選項針對linux的標準檔案系統(Ext2 FS)你必須開啟這個選項,並且編譯進核心(不是作為可載入模組)!圖32和33沒有顯示"ReiserFS"選項,它也可以在這裡開啟:Ext2檔案系統的繼承者,ReiserFS能夠更好的對付由於斷電或者類似情況而帶來的對檔案系統的破壞。 目前ReiserFS仍然處於開發階段,因此被標誌為試驗程式碼。即使是這樣,多數發行 版現在都已經支援ReiserFS,但是,雖然ReiserFS被認為會在將來取代Ext2, 我現在並不推薦將它作為所有分割槽的檔案系統。 如果你(在Windows下)使用一個叫"packetCD"的將光碟虛擬成低速磁碟的軟體,你需要開啟"UDF file system support"選項 這對在與其他PC交換資料時十分方便。在Linux下通過將這些被封包的光碟掛載(mount)為UDF檔案系統也可以進行讀取,比如使用命令"mount -t udf /dev/scd0 /cdrom"。 這一部分還包括"Network file systems"、"partition types"和"Native language support"選 項。 你不必選擇"Network file systems",除非你的計算機處於 一個需要使用"Network file systems"選項的大型網路之中,"SMB file support"選項也是一樣,對於普通的單機(Standalone Computer)來說,並不需要這些 選項。 "Partition Types"選 項是一個很高階但對於有效的使用Linux內 核來說並不必要的選項。 最好是關閉它。 
b.不知道需要那些檔案系統怎末辦? 
鍵入″ mount ″它看起來會像這樣: 
sunlyy% mount 
/dev/hda1 on / type ext2 (defaults) 
/dev/hda3 on /usr type ext2 (defaults) 
none on /proc type proc (defaults) 
/dev/fd0 on /mnt type msdos (defaults) 
仔細看看每一行;在" type "後面的那個字就是檔案系統的格式。在這個例子中,我的 / 和 /usr 分割區是 second extended 格式,我使用 /proc ,而且掛有一張以msdos (bleah) 為檔案系統格式的磁片。如果你有使用 /proc ,可以試試″cat /proc/filesystems ″。 它會給你一份目前使用的核心所支援的檔案系統列表。 

24.Console drivers:配置控制檯驅動。 
24.1. VGA text console. 
選 項在VGA模式下啟動字元模式。 多數人都需要它,因此這個玄學愛你跟通常是開著的。 只有一些386計算機沒有VGA相容顯示卡,選擇這個選項對於現在的多數計算機來說都沒有問題。 
24.2. video mode selection support. 
使啟動的時候能夠使用字元模式的解析度。 如果你希望一行能夠有更多的字的話,這通常會給你提供方便,不過通常你不必開啟它們。 下面兩個選項是試驗性質的,我建議你關閉它們。 
25.Sound sound:音效卡驅動。 
在這部分,你可以配置音效卡。 如果你的linux發行版使用ALSA的音效卡驅動(比如SuSE 6.3及以上版本),將"sound card support"作為可載入模組就足夠 了。 ALSA驅動將會在待會兒被編譯並連 接進來(見"SuSE和ALSA音效卡驅動")。如果你的發行版使用的是核心的標準音效卡驅動,你必須正確選擇你 使用的音效卡。 事實上,這裡列出了所有牌子的音效卡,因此,理論上選擇音效卡不成問 題。如果你的音效卡在你的發行版的標準核心下工作的很正常,你也可以使用配置程式(比如SuSE的"yast2")來找出你的音效卡使用什麼驅動。請放心,音效卡並不是十分關鍵的:如 果某些地方出錯,你將會失去音效,但是核心仍然可以正常工作。 
26.USB support:配置USB支援。 
27.kernel hacking:配置"kernel hacking"選項.這很簡單:不要開啟!

三、編譯核心編譯核心的軟體環境是kbuild系統,它泛指構建一個完整並能夠執行的Linux核心所需要的一切資源。這些資源包括構建程式、指令碼、中介軟體、配置檔案和Makefile。現在就講解核心的編譯過程,具體步驟如下:1.“make dep”“make depend” kbuild呼叫中介軟體scripts/mkdep來生成描述與相關核心檔案形成依賴關係的.h檔案(絕大多數)列表。這個列表儲存在.depend中。使用者即使不執行這一步,kbuild也會自動執行的。2. 構建核心映象的命令是:

#make

其引數如下: zImage 構建小核心映象。 compressed zImage bzImage 構建大核心映象。 zdisk 使用zImage生成一張引導軟盤。 bzdisk 使用bzImage生成一張引導軟盤。 zlilo 使用lilo作為zImage的引導器。 bzlilo 使用lilo作為bzImage的引導器。根據實際情況選擇核心境象型別, 大多數情況下選擇“make bzImage”2.6.0核心的kbuild系統與2.4.23比起來有一定的差異,但是絕大多 數功能都是相似的。只是構建核心映象的命令引數增加了一下幾項: fdimage 製作一張1.44M的引導軟盤 fdimage144 fdimage  fdimage288 製作一張2.88M的引導軟盤3.通過下面的命令安裝核心:

#make install

如果使用者使用LILO,它會把核心映象放到正確的位置並且修改LILO的配置,那麼使用者可以免去手動操 作。如果使用別的引導器(例如GRUB),那麼不使用這個命令。因為修改grub.conf需要互動式的手動編輯,自動修改可能會帶來一些不可預計的錯誤,所以編譯完畢後用戶需要進行一些手動 操作(見下面第6步)。2.6.0“make install”更加智慧,它會依此將arch/i386/boot/bzImageSystem.map複製為/boot/vmlinuz-2.6.0/boot/System.map-2.6.0,並建立vmlinuz-2.6.0的軟連結vmlinuzSystem.map-2.6.0的軟連結System.mapkbuild還會自動建立/boot/initrd-2.6.0.img,並且修改grub.conf,以前這一切都要手動才能完成。引用別人的話來說:“2.4.x還是半自動的,而2.6.x是全自動的。” 4. 用下條命令編譯所有被配置為模組 的核心元件:

#make modules

5. 把所有編譯好的核心模組按照功能拷貝到/lib/modules/2.4.23/目錄下,使用下面命令:

#make modules_install

6. 手動操作將核心境像檔案(/linux/arch/i386/boot/bzImage)拷貝到/boot分割槽,然後修改LILOGRUB的相關設定。這裡以grub.conf為例:

default=0

timeout=10

splashimage=(hd0,1)/grub/image/37.xpm.gz

title kernel-2.4.22

               root (hd0,1)

               kernel/vmlinuz-2.4.22 ro root=oot=LABEL=/

        initrd /initrd-2.4.22.img

title kernel-2.4.23

        root (hd0,1)

        kernel /vmlinuz-2.4.23 ro root=/dev/hda1

        initrd /initrd-2.4.23.img

title kernel-2.6.0

        root (hd0,1)

        kernel /vmlinuz-2.6.0 ro root=/dev/hda1

        initrd /initrd-2.6.0.img  

注意,在2.4.23之前的核心,通常制定LABEL引數,但是對於2.4.232.6.0核心,這個引數已經被廢棄了,使用root引數指定根檔案系統的位置。如果重新啟動後出現“kernel panic”錯誤或顯示應該修改“init”資訊,則基本都是以上kernel語句錯誤。根據發行版的不同