歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核配置和編譯過程詳解

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

日期:2017/3/3 12:27:40   编辑: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 mrproper2. 然後 要了解自己系統的硬件配置情況,比如CPU的類型、主辦芯片、顯卡和聲卡的型號等。

3. 配置 內核選項,用到的命令是:

#make用到的配置工具有:

◆ config 基於交互式的文本配置界面。每個問題以線形格式出現,並被一個一個地回答,而且一旦作出了回答就不能再修改

了。

◆ oldconfig 同config相似,但是使用原有的配置文件, 而且只會提問有關新內核特性的問題,對於內核升級很方便。

◆ menuconfig 一個文本模式、選單驅動的配置界面。

◆ xconfig 基於Tcl/Tk的X圖形配置界面。

現在開始配置內核,使用的工具為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/bzImage、System.map復制為/boot/vmlinuz-2.6.0,/boot/System.map-2.6.0,並創建vmlinuz-2.6.0的軟鏈接vmlinuz和System.map-2.6.0的軟鏈接System.map。kbuild還會自動創建/boot/initrd-2.6.0.img,並且修改grub.conf,以前這一切都要手動才能完成。引用別人的話來說:“2.4.x還是半自動的,而2.6.x是全自動的。”

4. 用下條命令編譯所有被配置為模塊 的內核組件:

#make modules5. 把所有編譯好的內核模塊按照功能拷貝到/lib/modules/2.4.23/目錄下,使用下面命令:

#make modules_install6. 手動操作將內核境像文件(/linux/arch/i386/boot/bzImage)拷貝到/boot分區,然後修改LILO或GRUB的相關設置。這裡以grub.conf為例:

default=0timeout=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.23和2.6.0內核,這個參數已經被廢棄了,使用root參數指定根文件系統的位置。

如果重新啟動後出現“kernel panic”錯誤或顯示應該修改“init”信息,則基本都是以上kernel語句錯誤。

根據發行版的不同,通常GRUB配置文件會在/etc/grub.conf、/boot/grub/menu.lst或/boot/grub/grub.conf三個地方。

7.最後將在編譯過程中的垃圾文件進行清理,命令如下:

#make clean 附:(隨時更新)

(1).參考文檔:http://www.linuxfocus.org/ChineseGB/July2002/article252.shtml

Copyright © Linux教程網 All Rights Reserved