|
|
原贴地址http://linux.vbird.org/linux_basic/0540kernel.php
Linux 核心編譯與管理
切換解析度為 800x600
最近更新日期:2005/12/05
我們在前面的幾個章節介紹了 Linux 其實指的就是核心而已,而整個 Linux 的世界當中, 最重要的也就是核心了!他控制了您的伺服器的所有硬體,也控制了所有的您想要的功能, 例如軟體磁碟陣列(RAID)、各種介面卡的驅動模組、防火牆的新增功能等等。透過管理您的 Linux 核心,將可讓您的伺服器跑得更加的順暢,也更穩定您的伺服器所提供的相關服務呢! 此外,為了讓硬體驅動程式與相關的核心功能修訂容易,所以 Linux 核心是支援『模組化』的,也就是說,您核心所想要的功能可以『後來才加掛上去』喔! 那麼如何加掛上去呢?這就需要瞭解一下所謂的『模組』了!當然,連同模組的相關指令就得也要會用囉!^_^
1. 前言:
1.1 什麼是核心( Kernel )
1.2 我幹嘛要更新核心
1.3 核心的版本與何處下載最新核心
2. 核心原始碼的取得與升級:
2.1 取得原本的 distributions 提供的 kernel source
2.2 取得最新的核心
2.3 保留原本設定:利用 patch 升級核心原始碼
2.4 核心目錄下的次目錄資訊
3. 設定核心的編譯設定 (Makefile)
3.1 如何編輯核心的 Makefile
3.2 核心的內容與模組設定:
a. CPU 的類型選擇: 雙 CPU 的選擇項目, 高記憶體支援
b. 電源管理: CPU 自動降頻功能選項
c. PCI 匯流排與 PCI Express 支援:
d. 核心的網路功能: IPv4, IPv6, 防火牆功能, 特殊網路功能
e. 硬體驅動程式: 主機 IDE 晶片選擇, SCSI 支援, SATA 支援, RAID 與 LVM 支援,
網路卡支援, 撥接必須之 PPP, AGP 顯示卡晶片組, 顯示卡晶片組, USB 晶片組
f. 檔案系統(filesystem): EXT2/EXT3, Quota, MSDOS/NTFS, NFS/Samba...
4. 核心的編譯與安裝
4.1 編譯的流程
4.2 模組安裝時的注意事項:
4.3 安裝舊版與新版的核心成多重開機系統
5. 額外(單一)模組編譯:
5.1 單一模組編譯: depmod
5.2 核心模組管理: lsmod, modinfo, modprobe, insmod, rmmod...
6. 本章習題練習:
7. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23899
大標題的圖示前言:
我們在第一章 Linux 是什麼裡面就談過 Linux 其實指的是核心! 這個『核心 (kernel)』是整個作業系統的最底層,他負責了整個硬體的驅動, 以及各個核心工具的提供,包括防火牆機制、是否支援 LVM 或 Quota 等檔案系統等等, 這些都是核心所負責與提供的!也就因為如此,所以開機過程當中,除了 MBR 之外, 第一個讀入系統記憶體當中的,就是核心檔案。
如果你還記得開機流程裡面提到的相關資訊的話, 那麼就知道,基本上,核心就是用來控制您的硬體系統的,您想要硬體幫您達成的任何工作, 都得要透過『核心』來幫您達成啊!換句話說,如果您的『核心』並沒有支援您的某項硬體設備, 也就是核心無法『認識』您的某項硬體,呵呵!那麼該硬體也就無法在這樣的核心底下工作了!
小標題的圖示 什麼是核心( Kernel )
這已經是整個 Linux 基礎的最後一篇了,所以,底下這些資料您應該都要『很有概念』才行~ 不能只是『好像有印象』~~好了,那就複習一下幾個名詞吧!
# Kernel:
還記得我們在前面的 BASH shell 部分提到過:電腦真正在工作的東西其實是『硬體』, 例如數值運算要使用到 CPU、資料儲存要使用到硬碟、圖形顯示會用到顯示卡、 音樂發聲要有音效晶片、連接 Internet 可能需要網路卡等等。那麼如何控制這些硬體呢? 那就是核心的工作了!也就是說,你所希望電腦幫你達成的各項工作, 都需要透過『核心』的幫助才行! 當然囉,如果你想要達成的工作是核心所沒有提供的, 那麼你自然就沒有辦法透過核心來控制電腦使他工作囉!
舉例來說,如果你想要有某個網路功能 ( 例如核心防火牆機制 ) , 但是你的核心偏偏忘記加進去這項功能,那麼不論你如何『賣力』的設定該網路套件,很抱歉! 不來電?換句話說,你想要讓電腦進行的工作,都必須要『核心有支援』才可以 !!這個標準不論在 Windows 或 Linux 這幾個作業系統上都相同! 如果有一個人開發出來一個『全新的硬體』,目前的核心不論 Windows 或 Linux 都不支援,呵呵!那麼不論你用什麼系統,哈哈! 這個硬體都是英雄無用武之地啦!那麼是否瞭解了『核心』的重要了呢?沒錯! 所以我們才需要來瞭解一下如何編譯我們的核心啦!
那麼核心到底是什麼啊?講了這麼多??其實核心就是系統上面的一個檔案而已, 這個檔案包含了驅動主機各項硬體的偵測程式與驅動模組,在 開機流程分析 章節當中,我們也提到這個檔案被讀入主記憶體的時機是:
1. BIOS
2. MBR 載入 Loader ( Linux 中的 Lilo 或 Grub 或 SPFdisk等等 )
3. 藉由 Loader 的輔助,載入核心檔案到主記憶體當中,此時核心檔案解壓縮後, 會開始偵測硬體的各項配備,並載入適當的驅動模組來讓硬體生效;
4. 在硬體準備妥當後,載入第一支程式 init ,並藉由 /etc/inittab 的設定來確認預設 run level;
5. 經由 /etc/inittab 及 run level 來決定執行的各項啟動的 scripts ;
6. 開始執行 login 或 X Window 等待登入等。
看到了嗎?第三個步驟時,我們的系統就可以經由 loader 來將核心載入主記憶體當中, 並且開始偵測分析硬體,載入適當的驅動程式,整個主機就可以待命,讓使用者來執行相關的程式了。 這個核心檔案通常被放置成 /boot/vmlinuz ,不過也不見得, 因為一部主機上面可以擁有多個核心檔案,只是開機的時候僅能選擇一個來載入而已。 甚至我們也可以在一個 distribution 上面放置多個核心,然後以這些核心來做成多重開機呢!
# 核心模組:
還記得我們之前談到開機流程分析時,提到的核心模組吧? 既然核心檔案都已經包含了硬體偵測與驅動模組,那麼什麼是核心模組啊? 要注意的是,現在的硬體更新速度太快了,如果我的核心比較舊, 但我換了新的硬體,那麼,這個核心肯定無法支援!怎麼辦?重新拿一個新的核心來處理嗎? 開玩笑~核心的編譯過程可是很麻煩的~
所以囉,為了這個緣故,我們的 Linux 很早之前就已經開始使用所謂的模組化設定了! 亦即是將一些不常用的類似驅動程式的咚咚獨立出核心,編譯成為模組, 然後,核心可以在運作的過程當中載入這個模組到核心的支援當中。 如此一來,我在不需要更動核心的前提之下,只要編譯出適當的驅動模組,並且載入他, 呵呵!我的 Linux 就可以使用這個硬體啦!簡單又方便!!
那我的模組放在哪裡啊??可惡!當然一定要知道的啦!就是 /lib/modules/`uname -r`/ 當中啦!
# 核心編譯:
剛剛上面談到的核心其實是一個檔案,那麼這個檔案怎麼來的?呵呵~ 當然是透過原始碼 (source code) 編譯而成的啊!因為核心是直接被讀入到主記憶體當中的, 所以當然要將他編譯成為系統可以認識的資料才行!也就是說, 我們必須要取得核心的原始碼,然後利用 Source code 與 Tarball 章節當中提到的編譯概念來達成核心的編譯才行啊!(這也是本章的重點啊! ^_^)
# 關於驅動程式與核心的問題:
既然核心與硬體是息息相關的,那麼是否意味著每次有廠商推出新版本的硬體時, 我們都需要『重新編譯核心』啊?好加在!並不需要的喔!因為我們 Linux 的核心相當的具有彈性,他是支援模組化的,也就是說,只要新硬體可以推出搭配核心的驅動模組( 也就是大家口頭上常常講的『驅動程式』 ),那麼我們只要將該模組掛載入核心,核心就可以支援該硬體啦!
但是,很多朋友還是常常感到困惑,就是 Linux 上面針對最新硬體的驅動程式總是慢了幾個腳步, 所以覺得好像 Linux 的支援度不足!其實不可以這麼說的,為什麼呢?因為在 Windows 上面,對於最新硬體的驅動程式需求,基本上, 也都是廠商提供的驅動程式才能讓該硬體工作的,因此,在這個『驅動程式開發』的工作上面來說, 應該是屬於硬體發展廠商的問題,因為他要我們買他的硬體, 自然就要提供消費者能夠使用的驅動程式啦!所以,如果大家想要讓某個硬體能夠在 Linux 上面跑的話,那麼似乎可以發起一人一信的方式,強烈要求硬體開發商發展 Linux 上面的驅動程式!這樣一來,也可以促進 Linux 的發展呢!
小標題的圖示我幹嘛要更新核心
這個『核心』是除了 BIOS 之外,一個作業系統中最早被啟動的東西, 他包含了所有可以讓硬體與軟體工作的資訊,所以,如果沒有搞定核心的話, 那麼你的系統肯定會有點小問題!好了,那麼是不是將『 所有目前核心有支援的東西都給他編譯進去我的核心中, 那就可以支援目前所有的硬體與可執行的工作啦!』!
這話說的是沒錯啦,但是你是否曾經看過一個為了怕自己今天出門會口渴、會餓、會冷、會熱、會被車撞、 會摔跤、會被性騷擾,而在自己的大包包裡面放了大瓶礦泉水、便當、厚外套、短褲、防撞鋼樑、止滑墊、 電擊棒....等一大堆東西,結果卻累死在半路上的案例嗎?當然有!但是很少啦!我相信不太有人會這樣做! ( 會這麼做的人通常都已經在醫院了~ ) 取而代之的是會看一下天氣,冷了就只帶外套, 熱了就只帶短衣、如果穿的漂亮一點又預計晚點回家就多帶個電擊棒、 出遠門到沒有便利商店的地方才多帶礦泉水....
說這個幹什麼!對啦!就是要您瞭解到,核心的編譯重點在於『你要你的 Linux 作什麼?』,是啦!如果沒有必要的工作,就乾脆不要加在你的核心當中了!這樣才能讓你的 Linux 跑得更穩、更順暢!這也是為什麼我們要編譯核心的最主要原因了!
Tips:
說到這裡突然想到以前國軍研究的『經國號戰鬥機』事件,在當時, 經國號裡頭的配備都是『最棒的!』包括測量儀器、瞄準配備、武器系統等等,但是呢, 卻配上一部普普通通的客機用引擎!挖哩ㄌㄟ?最早期試飛的時候, 經國號竟然只能『在跑道上滑行!』真是悲哀!同樣的道理, Linux 的核心也是這樣的,如果你的硬體與核心之間沒有辦法達到良好的配合,那麼 Linux 確實可能會跑得不很順暢!!
Linux 的核心有幾個主要的特色,除了『Kernel 可以隨時、隨各人喜好而更動』之外,Kernel 的『版本更動次數太頻繁』也是一個特點!所以囉,除非你有特殊需求, 否則一次編譯成功就可以啦!不需要隨時保持最新的核心版本,而且也沒有必要 ( 編譯一次核心要粉久的ㄋㄟ! ) 。話說到這裡又突然想到今天看到的一篇文章,大意是說老闆想要雇用的人會希望是 Linux 的老手,因為他們比較容易瞭解問題的所在,除此之外,如果有任何問題發生,由於其使用 Linux 是可以隨時修補漏洞的!但是如果是 Windows 的話,就得要將機器關閉,直到 MS 推出修補套件後才能再啟用~
那麼是否『我就一定需要在安裝好了 Linux 之後就趕緊給他編譯核心呢?』, 老實說,『並不需要的』!這是因為幾乎在每一個 distribution 當中,他們已經預設好了相當大量的模組了, 所以幾乎使用者常常或者可能會使用到的資料都已經被編譯成為模組,也因此,呵呵! 我們使用者確實不太需要重新來編譯核心!尤其是『一般的使用者, 由於系統已經將核心編譯的相當的適合一般使用者使用了,因此一般入門的使用者,基本上, 不太需要編譯核心』。
OK!那麼鳥哥閒閒沒事幹跑來寫個什麼東西?既然都不需要編譯核心還寫編譯核心的分享文章, 鳥哥賣弄才學呀!?很抱歉,鳥哥雖然是個『不學有術』的混混,卻也不會平白無故的寫東西要您來指教~ 當然是有需要才會來編譯核心啦!編譯核心的時機可以歸納為幾大類:
* 新功能的需求:
我需要新的功能,而這個功能只有在新的核心裡面才有,那麼為了獲得這個功能,只好來重新編譯我的核心了 ( 例如 iptables 這個防火牆機制只有在 2.4.xx 版本裡面才有,而新出產的 AGP 顯示卡,很多也需要新的核心推出之後,才能正常而且有效率的工作!) 再舉個例子, 之前的 Red Hat 7.2 的版本中,由於預設是將 CD-ROM 編譯成核心的『模組』, 也就是說,核心本身還沒有支援 CD-ROM 的功能,必須要掛上模組之後才能使用與讀取這個 CD-ROM !是否覺得很麻煩呢?呵呵!那麼這個時候,如果你想要直接讓 kernel 支援 CD ROM 的話,就得要重新編譯核心囉;
* 原本核心太過臃腫:
如果您是那種對於系統『穩定性』很要求的人, 那麼對於核心多編譯了很多莫名其妙的功能而不太喜歡的時候, 那麼就可以重新編譯核心來取消掉該功能囉;
* 與硬體的搭配穩定性:
由於原本 Linux 的核心大多是針對 Intel 的 CPU 來作開發的,所以如果你的 CPU 是 AMD 的系統時,有可能 ( 注意!只是有可能,不見得一定會如此 ) 會讓系統跑得『不太穩!』就鳥哥的經驗來看,使用舊的 Pentum 系列的舊機器安裝 Linux 的結果,還沒有胡亂當機的經驗!但是安裝在 K6-2, K6-3 上面的 Linux ,通常需要重新編譯一下核心會比較穩定一些!
* 其他:
就是你需要特殊的環境需求時,就得自行設計你的核心囉!( 像是一些商業的套裝軟體系統,由於需要較為小而美的作業系統, 那麼他們的核心就需要更簡潔有力了!)
另外,需要注意重新編譯核心雖然可以針對你的硬體作最佳化的步驟 ( 例如剛剛提到的 CPU 的問題! ) ,不過由於這些最佳化的步驟對於整體效能的影響是很小很小的, 因此如果是為了增加效能來編譯核心的話,基本上,效益不大!然而,如果是針對『系統穩定性』來考量的話, 那麼就有充分的理由來支持您重新編譯核心囉!
『如果系統已經運行很久了,而且也沒有什麼大問題, 加上我又不增加冷門的硬體設備,那麼建議就不需要重新編譯核心了!』, 因為重新編譯核心的最主要目的是『想讓系統變的更穩!』既然您的 Linux 主機已經達到這個目的了,何必再編譯核心?不過,就如同前面提到的, 由於預設的核心不見得適合您的需要,加上預設的核心可能並無法與您的硬體配備相配合, 此時才開始考慮重新編譯核心吧!
Tips:
早期鳥哥是強調最好重新編譯核心的一群啦!不過,最近這個想法改變了~ 既然原本的 distribution 都已經幫我們考慮好如何使用核心了,那麼, 我們也不需要再重新的編譯核心啦!尤其是 distribution 都會主動的釋出新版的核心 RPM 版本, 所以,實在不需要自己重新編譯的!當然啦,如同前面提到的, 如果您有特殊需求的話,那就另當別論嚕! ^_^
然而由於『核心的主要工作是在控制硬體!』所以編譯核心之前, 請先瞭解一下您的硬體配備,與您這部主機的未來功能!由於核心是『 越簡單越好!』所以只要將這部主機的未來功能給他編進去就好了! 其他的就不用去理他啦!
小標題的圖示 核心的版本與何處下載最新核心
既然這一章的內容要討論的是如何編譯核心,那麼我們就來聊一聊核心的版本吧!
# 核心的版本:
由於不同的核心版本之間,使用的函式庫並不相同,所以,我們必須要知道自己的 Linux 核心版本之後,才能夠取用最新支援的核心版本來編譯新的核心啊!那麼要在哪裡找到這個核心的資訊呢? 應該還記得那個 uname 查看的資訊吧!沒錯!就是他了,可以使用其功能來查詢目前在工作的核心版本:
[root@linux ~]# uname -r
2.6.13-1.1532_FC4
# 因為鳥哥的 FC4 已經升級核心多次,所以這個版本應該與你的不同!
看到了吧!那個東西就是核心版本的資訊啦!好了!我們依照 RPM 版本的先例,也來談一談 kernel 的版本吧!基本上, kernel 的版本可以區分為:
[主版本].[次版本].[釋出版本(release)]-[修改版本]
整個版本的定義當中,最需要注意的是前兩個,亦即主版本與次版本。 相同的[主][次]版本,代表他使用的函式庫是差不多的,所以,可以直接升級到較高的[釋出版本]上。 值得注意的是,由於核心功能的增加速度實在太快了,一般商業用戶與一般使用者, 根本不需要很多的測試中的功能,因此,[主][次]版本中,依據[次版本]的奇偶數, 又分為底下兩種版本:
* 如果[次版本]是奇數的話,例如 2.3, 2.5 等等,那表示他是一個『 測試性質功能的核心版本 』, 這種核心通常是在推出穩定版本的核心之前,用來給 developer ( 核心維護更新測試者!) 測試用的!雖然功能較為強大,但是由於是屬於測試性質,所以可能會有些許的 bugs 也說不定;
* 如果[次版本]是偶數的話,例如 2.4, 2.6 等等,那表示他是一個經過測試之後才釋出的 『穩定核心版本,這種核心較為穩定不容易出錯, 比較適合一般個人或者是商業使用!
所以啦!我們要升級的時候,大多就是使用那種偶數的核心版本啦!不過這裡還是要再提一遍!就是『 2.4 與 2.6 是兩個具有相當大差異的核心版本, 兩者之間使用到的函式庫基本上已經不相同了,所以在升級之前,如果您的核心原本是 2.4.xx 版,那麼就升級到 2.4.xx 版本的最新版,不要由 2.4.xx 直接升級到 2.6.xx 版,否則到時可能會欲哭無淚~~』, 這個問題在討論區一再地被提起!這裡再次說明!
Tips:
為什麼不能從 2.4 升級到 2.6 呢?其實還是可以啦!只是過程很複雜! 我們知道軟體 (packages) 是架構在系統核心上面來進行編譯、安裝與執行的, 也就是說,這些 packages 與核心之間,是有相關性的!這些 packages 會用到很多核心提供的功能。 但是不同的[主][次]版本之間,他們提供的功能架構差異太大,因此,若你由 2.4 升級到 2.6 的話, 那麼絕大部分的軟體『都需要重新再編譯!』這樣瞭解為何不要在不同的版本間升級了吧?
此外,2.4.xx 與 2.6.xx 的比較中,並不是 2.6.xx 就一定比 2.4.xx 還要新,因為這兩種版本同時在進行維護與升級的工作!如果有興趣的話,可以前往 Linux 核心網站 http://www.kernel.org 一看究竟,您就可以瞭解目前的核心變動情況了!
基本上,目前最新的 distributions ,包括 FC, SuSE, Mandriva 等等,都使用 2.6 的核心, 所以,您可以直接由 http://www.kernel.org 下載最新的 2.6.xx 版本的核心來嘗試編譯啊!目前 (2005/11/20) 鳥哥可以查到的最新版本是 2.6.14-2 , 底下我們將主要以這個版本來測試。另外,由於較新的核心版本可能會多出一些選項, 因此若有不同的項目也沒有關係!稍微查看一下說明內容就可以瞭解啦!
例題:什麼是『釋出版本』?
答:
由於核心的新功能增加太快,為了要統合這些功能,因此,每隔一段時間的穩定性測試後, 這些新功能才會被放到原本的核心內,最後被推出。而為了與前一個核心原始碼作區別, 所以就被加上一個數字較高的『釋出版本』數字了。
例題:那什麼是『修改版本』?
答:
由於原本的核心原始碼可能有點 bugs 在裡面,經過程式開發人員的程式碼修改後 (debug), 再重新推出的一個類似加強版的意思。基本功能是不變的,只是有問題的地方被克服而已。
# 核心下載地點:
Linux 的核心目前是由其發明者 Linus Torvalds 所屬團隊在負責維護的, 而其網站在底下的站址上,在該網站上可以找到最新的 kernel 資訊!不過,美中不足的是目前的核心越來越大了 ( linux-2.6.14.2.tar.bz2 這一版,這一個檔案大約 37MB 了! ),所以如果你的 ISP 連外很慢的話, 那麼使用台灣的映射站台來下載不失為一個好方法:
* http://www.kernel.org/
* 交大資科:ftp://linux.cis.nctu.edu.tw/kernel/
* 義守大學:http://ftp.isu.edu.tw/pub/Linux/kernel/
大標題的圖示核心原始碼的取得與升級
既然核心是個檔案,要製作這個檔案給系統使用則需要編譯,既然要有編譯,當然就得要有原始碼啊! 那麼原始碼怎麼來?除了剛剛前一個小節提到的,需要注意核心的版本之外,還有哪些要注意的事項??
小標題的圖示取得原本的 distributions 提供的 kernel source
事實上,各大主要 distributions 在推出他們的產品時,其實已經都附上了核心原始碼了! 以我們的 FC4 為例,你如果有安裝工具程式的話,那麼應該就可以利用 rpm 找到套件名稱為 kernel-devel 的套件,那就是我們的核心原始碼了(這個套件名稱在各個不同的版本上頭都不一樣! 所以,您應該要使用 rpm -qa | grep kernel 來尋找喔!)。如果還是找不到,那表示你沒有安裝啊! 此時,拿出原版光碟,一片一片去 mount 且搜尋一下,肯定可以找到的啦! 然後安裝他就好了!
既然要重新編譯,那麼幹嘛還要使用原本 distributions 釋出的原始碼啊?真沒創意~ 話不是這麼說,因為原本的 distribution 釋出的原始碼當中,含有他們設定好的預設設定值, 所以,我們可以輕易的就瞭解到當初他們是如何選擇與核心及模組有關的各項設定項目的參數值, 那麼就可以利用這些可以配合我們 Linux 系統的預設參數來加以修改,如此一來, 我們就可以『修改核心,調整到自己喜歡的樣子』囉!而且編譯的難度也會比較低一點!
小標題的圖示取得最新的核心
雖然使用原本的 source code 來重新編譯核心比較方便,但是,如此一來, 新硬體所需要的新驅動程式,也就無法藉由原本的核心原始碼來編譯啊! 所以囉,如果是站在要更新驅動程式的立場來看,當然使用最新的核心會比較好啊!
取得最新的核心版本,上一個小節已經講過了,請自行前往 http://www.kernel.org 去下載吧!
小標題的圖示保留原本設定:利用 patch 升級核心原始碼
如果你曾經自行以最新的核心版本來編譯過核心,那麼你的系統當中應該已經存在前幾個版本的核心原始碼, 以及上次你自行編譯的參數設定值才對。如果您只是想要更新到最新版本的核心, 原本的參數設定值並不要進行大幅度的修改,那麼該如何是好?
呵呵!每一次核心釋出時,除了釋出完整的核心壓縮檔之外,也會釋出『該版本與前一版本的差異性 patch 檔案』, 關於 patch 的製作我們已經在 原始碼與 tarball 章節當中提及, 您可以自行前往參考。這裡僅是要提供給您的是,每個核心的 patch 僅有針對前一版的核心來分析而已, 所以,萬一你想要由 2.6.10 升級到 2.6.14 的話,那麼你就得要下載 2.6.11, 2.6.12, 2.6.13 及 2.6.14 的 patch file ,然後『依次』一個一個的去進行 patch , 才能夠升級到 2.6.14 喔!這個重要!不要忘記了。
在進行完 patch 之後,你可以直接檢查一下原本的設定值,如果沒有問題, 就可以直接編譯,而不需要再重新的選擇核心的參數值,這也是一個省時間的方法啊! 至於 patch file 的下載,同樣是在 kernel 的相同目錄下,尋找檔名是 patch 開頭的就是了。
小標題的圖示核心目錄下的次目錄資訊
假設你已經有安裝了核心的原始碼,以 FC4 為例,他的預設核心原始碼放置在 /usr/src/kernels/2.6.11-1.1369_FC4-i686/ 這個目錄下,在該目錄下,基本上有這幾個目錄:
arch :與硬體平台有關的項目,例如 CPU 的等級等等;
crypto :核心所支援的加密的技術,例如 md5 或者是 des 等等;
drivers :一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等;
fs :核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib :一些函式庫;
net :與網路有關的各項協定資料,還有防火牆模組 (net/ipv4/netfilter/*) 等等;
sound :與音效有關的各項模組;
每個目錄底下也都含有很多不同的次目錄,例如 drivers 目錄下就含有 net, sound, usb, pci, vedio... 等等多到數不清的次目錄,這些目錄底下還是含有相關的硬體驅動模組等等~呵呵~想要完整的瞭解是很難的啦! 例如,核心使如何讓工作排到 CPU 去執行的?核心是如何存取實體記憶體與 Swap ? 核心是如何讀取各不同的 filesystems 等等,如果有興趣的話, 那麼最新核心檔案解壓縮之後,都會有個 Documentation 的目錄, 可以進去查閱各個相關的說明啊! ^_^
大標題的圖示設定核心的編譯設定 (Makefile)
就如同我們在原始碼與 tarball 的章節當中提到的, 由於各個主機硬體都不相同,所以當然需要針對我們的主機環境來選擇可以編譯的項目啦!那就是 Makefile 的編輯。但是核心的資料實在多到不行~所以,核心有提供不少的工具來讓我們簡單的進行參數的設定喔!
小標題的圖示如何編輯核心的 Makefile
在這一章當中,鳥哥假設你是以 http://www.kernel.org 這個核心官方網站下載最新的核心版本來編譯的, 鳥哥下載的是 2.6.14-2 版,下載的完整網址在:
http://www.kernel.org/pub/linux/ ... ux-2.6.14.2.tar.bz2
如果你是以 FC4 系統預設的核心原始碼來重新編譯, 那麼請自行安裝 kernel-devel 這個套件,以及前往 /usr/src/kernels/ 目錄下, 找到核心原始碼;如果您之前已經以下載的核心檔案編譯過核心, 那麼請依序下載各 patch 檔案,然後請自行參考 patch 的用法以及找到相關的路徑吧!反正,這一章當中,我假設您與我一樣, 使用的是最新版的核心就是了。
假設你下載之後將整個檔案放置到 /root 內,那麼首先請解壓縮吧!
[root@linux ~]# cd /usr/src
[root@linux src]# tar -jxvf /root/linux-2.6.14.2.tar.bz2
# 這個時候就會產生一個 /usr/src/linux-2.6.14.2 的目錄,該目錄就是 source code。
# 不過,這個目錄下有個 README 的檔案務必參考,此外,
# 還有個 Documentation 的目錄,也可以仔細的看一看喔!
[root@linux src]# cd linux-2.6.14.2
[root@linux linux-2.6.14.2]# make mrproper
# 這個過程在刪除一些以前留下來的 .o 檔案。
特別留意一下,核心的原始碼最好不要直接放置到 /usr/src/linux 這個目錄, 這是因為該目錄是很多的軟體讀取核心功能的目錄,如果你將這個新核心放置到 /usr/src/linux 下時, 可能會讓某些軟體讀到錯誤的核心檔案。因此,您才可能看到目前的核心原始碼都放到 /usr/src/kernels/ 目錄下 (FC4 的預設放置目錄)。 所以,我們新的核心主要建議您還是放置到 /usr/src/ 目錄下, 但是目錄名稱保持 linux-2.6.14.2 即可,不必更名為 linux 囉!這點重要!
另外,在進行核心的參數設定之前,務必要執行『 make mrproper 』這個項目, 還記得原始碼的編譯過程吧?編譯過程會有 *.o 的目標檔案對吧! 那這些 *.o 必須要先刪除啊!否則可能會產生舊的資料啊!這個要注意。
另外,其實我們也知道,整個原始碼的編譯過程當中,那個 Makefile 佔有舉足輕重的地位的! 這是因為我們的 make 取用的參數資料都是記錄在 Makefile 檔案當中啊! 所以囉,你必須要確定你的系統已經安裝了 make, gcc 等等的編譯套件, 否則是無法進行編譯的。此外,核心的 Makefile 沒有辦法像一些軟體一樣, 簡單的使用 ./configure 就能夠自動的偵測主機。這是因為每個人對於核心的要求都不一樣嘛! 好了,那麼如何建立 Makefile 啊?難道要手動去編輯??當然不是啦! 我們可以透過核心提供的功能,就是那個 make menuconfig 來達成喔!
* make menuconfig:
利用類似選單模式的方式來進行核心參數的挑選,好處是,他是純文字模式的! 不需要啟動 X Window ,還可以遠端登入進行核心參數的挑選!真方便!
* make xconfig:
利用 X Window 的功能來進行挑選,是圖形介面的,很華麗~不過,當然就比較耗系統資源。 如果你的伺服器沒有安裝 X Window ,那就別提了!
* make gconfig:
利用 GDK 函式庫的圖形介面來選擇,也是需要 X Window 的支援才行!
還有一些早期的編譯流程,不過不好用,所以鳥哥就不介紹了。我這裡推薦您使用 make menuconfig 來進行核心參數的挑選。這是因為很多的伺服器本來就可能沒有 X Window , 加上 make menuconfig 也可以作類似圖形化介面的選單模式,可以隨時作參數的選擇, 方便又好用! ^_^。只要在 /usr/src/linux-2.6.14.2 目錄下,輸入『make menuconfig』 就可以出現如下的畫面喔!
核心編譯工作前的參數挑選
圖、核心編譯工作前的參數挑選
看到上面的圖是之後,你會發現主要分為兩大畫面,一個是大框框內的反白光柱,另一個則是底下的小框框, 裡面有 select, exit 與 help 三個選項的內容。這幾個元件的用法如下:
* 最底下的 <Select> <Exit> <Help> :可以使用『左右鍵』來移動游標;
* 上下鍵可以移動上面大框框部分的 Code maturity level options 那一行! 若該行有箭頭『 ---> 』則表示該行內部還有其他細項需要來設定的意思;
* 當以『上下鍵』選擇好想要設定的項目之後,並以『左右鍵』選擇 <Select> 之後, 按下『 Enter 』就可以進入該項目去作更進一步的細部設定囉;
* 在細部項目的設定當中,如果前面有 [ ] 或 < > 符號時,該項目才可以選擇, 而選擇可以使用『空白鍵』來選擇;
* 若為 <*> 則表示編譯進核心;若為 <M> 則表示編譯成模組! 盡量在不知道該項目為何時,且有模組可以選,那麼就可以直接選擇為模組囉!
* 當在細項目選擇 <Exit> 後,並按下 Enter ,那麼就可以離開該細部項目囉!
基本上建議只要『上下左右 空白 及 Enter 』這六個按鍵就好了!不要使用 Esc ,否則一不小心就有可能按錯的!另外,關於整個核心的內容選擇上面,建議您可以這樣思考:
* 『肯定』核心一定要的功能,直接編譯進核心內;
* 『可能在未來會用到』的功能,那麼盡量編譯成為模組;
* 『不知道那個東西要幹嘛的,看 help 也看不懂』的話,那麼就保留預設值,或者將他編譯成為模組;
總之,盡量保持核心小而美,剩下的,就編譯成為模組,尤其是『需要考慮到未來擴充性』, 像鳥哥之前認為螃蟹卡就夠我用的了,結果,後來竟然網站流量大增,鳥哥只好改換 3Com 的網路卡。 不過,我的核心卻沒有相關的模組可以使用~因為.....鳥哥自己編譯的核心忘記加入這個模組了。 最後,只好重新編譯一次核心的模組,呵呵!真是慘痛的教訓啊!
小標題的圖示核心的內容與模組設定
由上面的圖示當中,我們知道核心的可以選擇的項目有很多啊! 光是第一面,就有 17 個項目,每個項目內還有不同的細項!哇!真是很麻煩啊~ 而每個項目其實都可能有 <Help> 的說明,所以,如果看到不懂的項目, 務必要使用 Help 查閱查閱!好了,底下我們就一個一個項目來看看如何選擇吧!
# Code maturity level options(核心的 code 開發維護)
這個項目主要在設計您的核心是否要支援一些尚未測試的很完整功能。 一般來說,我們是一般用戶,不是 kernel 的開發維護者,所以,當然不需要額外的功能啦! 所以,鳥哥這裡的選擇是比較保守的 (不使用額外功能),也因為如此, 所以底下的很多項目當中,可能不會出現一些較為特殊的選項喔!這個要注意! 鳥哥的選擇如下:
[ ] Prompt for development and/or incomplete code/drivers
# 這個可選可不選~不過,鳥哥這裡是不選擇的啦!
# General setup
這個項目則是關於核心的一般設定,包括核心的附加版本資訊等等,都可以在這裡設定。
() Local version - append to kernel release
[ ] Automatically append version information to the version string (NEW)
# 上面這兩個都與核心的附加版本有關。例如 FC4 的核心版本為
# 2.6.14-1.1637_FC4 ,後面那個 1.1637_FC4 就是那個附加版本啦! Support for paging of anonymous memory (swap)
# 這個與 swap 的使用有關!當然要選擇啦 System V IPC
# IPC 是 Inter Process Communication 的簡寫,這個與一個 programs
# 可以被多人同時啟用有關,所以務必要選擇才行! BSD Process Accounting
[ ] BSD Process Accounting version 3 file format Sysctl support
# 這個就是在產生 /proc/sys 的支援!務必選擇! Auditing support Enable system-call auditing support
# 上面這兩個是額外核心功能 (如 SELinux) 載入時所需要的設定!務必選擇
--- Support for hot-pluggable devices Kernel Userspace Events
# 讓核心能夠監聽使用者的動作。舉例來說, USB 裝置的連線與否等等的即時裝置。
[ ] Kernel .config support
() Initramfs source file(s)
[ ] Configure standard kernel features (for small systems) --->
這裡的項目主要都是針對核心與程式之間的相關性來設計的,基本上, 保留預設值即可!除非您想要編輯屬於自己的附加版本,那麼在上表的第一項按下 Enter 後, 就可以輸入一些資訊了。不要隨便取消上面的任何一個項目, 可能會造成某些程式無法被同時執行的困境喔!
# Loadable module support
還記得我們上頭曾經提過模組這個玩意兒吧!如果你要核心能夠支援模組即時載入某些核心功能的話, 那麼這裡面的設定就顯的很重要了!因為他涉及是否支援模組載入啊!
Enable loadable module support Module unloading Source checksum for all modules Automatic kernel module loading
不用想太多,全部都選擇吧!
# Processor type and features
這個就與您的 CPU 有關啦!我的主機裝備的是 P-III 的 CPU ,所以就選擇相關的即可。 你要依據你自己的主機來設計喔!不要胡亂選擇啊!
Subarchitecture Type (PC-compatible) --->
(X) PC-compatible <==這裡是次目錄
( ) AMD Elan
( ) Voyager (NCR)
( ) NUMAQ (IBM/Sequent)
( ) SGI 320/540 (Visual Workstation)
# 這裡在選擇主機的硬體類型。我們使用 PC 相容的主機啊!選這個就對了。
Processor family (Pentium-III/Celeron(Coppermine)/Pentium-III Xeon) --->
( ) 386 <==這裡是次目錄
( ) 486
( ) 586/K5/5x86/6x86/6x86MX
( ) Pentium-Classic
( ) Pentium-MMX
( ) Pentium-Pro
( ) Pentium-II/Celeron(pre-Coppermine)
(X) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
( ) Pentium M
( ) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon
( ) K6/K6-II/K6-III
( ) Athlon/Duron/K7
( ) Opteron/Athlon64/Hammer/K8
( ) Crusoe
( ) Efficeon
( ) Winchip-C6
( ) Winchip-2
( ) Winchip-2A/Winchip-
( ) GeodeGX1
( ) CyrixIII/VIA-C3
( ) VIA C3-2 (Nehemiah)
# 這裡則是 CPU 的等級,我使用的是 P-III ,您得要選擇自己的啊!
Generic x86 support
# 對 x86 的 CPU 架構支援較佳。 HPET Timer Support
[ ] Symmetric multi-processing support
# 如果您使用兩顆 CPU 以上的系統,這裡『務必』要選擇!否則不用選
Preemption Model (No Forced Preemption (Server)) --->
(X) No Forced Preemption (Server)
( ) Voluntary Kernel Preemption (Desktop)
( ) Preemptible Kernel (Low-Latency Desktop)
# 這裡與 CPU 的效能有關。如果您想要作一個伺服器的核心,選擇第一個!
# 否則,為了穩定,最好選擇第二項。
Local APIC support on uniprocessors IO-APIC support on uniprocessors
# 單顆 CPU 的環境中,這個項目可以選擇起來,讓 CPU 具有
# Advanced Programmable Interrupt Controller 的功能啊! Machine Check Exception
# 讓 Pentium 系列的 CPU 可以在偵測到 kernel 有問題時,立刻回應到終端介面
< > Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4
< > Toshiba Laptop support
< > Dell laptop support
# 上面這三個就得要看看你的系統是否支援啦!基本上,可以設定成 M 啦!
[ ] Enable X86 board specific fixups for reboot
<M> /dev/cpu/microcode - Intel IA32 CPU microcode support
<M> /dev/cpu/*/msr - Model-specific register support
<M> /dev/cpu/*/cpuid - CPU information support
# 因為我的是 P-III CPU 啊,所以這裡當然選擇成模組即可!
Firmware Drivers --->
< > BIOS update support for DELL systems via sysfs (NEW)
< > Dell Systems Management Base Driver (NEW)
# 如果你的系統是 Dell 的,那麼上面記得編成模組!鳥哥不需要~
High Memory Support (4GB) --->
( ) off
(X) 4GB
( ) 64GB
# 這個重要!一般來說,我們對於主機的要求是 RAM 越大越好(一般情況下);
# 但是,原本的核心支援僅到 1GB 的記憶體,所以,這裡要加大!
# 一般的個人電腦主機,或者是 X86 主機,通常只要 4GB 就夠了,
# 除非是特殊的工業用主機才可以額外插到 4GB 以上的記憶體!
# 如果這裡選擇成 off 的話,那麼您的記憶體最大只能被捉到 1GB 。
Allocate 3rd-level pagetables from highmem
# 這個與 High Memory Support 有關,如果你的記憶體支援到 4GB,這裡可以加入
[ ] Math emulation
# 這個與 CPU 是否具有浮點運算單元有關。目前我們的 CPU (586 以上)
# 都已經內建了浮點運算單元了,所以這裡可以不要選啦! MTRR (Memory Type Range Register) support
# 這玩意兒可以讓 CPU 具有讀取記憶體特殊區塊的能力,尤其在高效能的 AGP
# 與相關的 PCI/AGP 匯流排進行資料傳輸時,可以增進不少效能。
# 選擇這個項目後,會產生 /proc/mtrr ,我們的 X 會讀取這個咚咚喔。
[ ] Boot from EFI support (EXPERIMENTAL) Enable seccomp to safely compute untrusted bytecode
# 這個項目通常要加,不過,如果是嵌入式系統的話,可以不加入!
Timer frequency (250 HZ)
# 這個項目則與核心針對某個事件立即回應的速度有關。一般來說,
# 如果是一般桌上電腦,那麼反應時間可以調整的快速一點,因為不會有其他事件。
# 如果是主機,由於同一時間點可能有多人連線進來,啟發的事件太多了,所以,
# 這個反應時間反而要調慢一點,會比較穩定,而且效能也不差。通常保留預設值
# 250 就很好了。
# Power management options (ACPI, APM)
這部分則是電源管理,主要的內容有底下這些:
[ ] Power Management Debug Support
[ ] Software Suspend
# 這個與將目前的環境暫存在 swap 當中有關。萬一你想要將目前的資料暫存,
# 因為系統可能必須要關機一陣子,那麼這個項目可以選擇。不過,
# 由於可能會有一些問題,所以不建議您使用這個功能(主機也很少用到!)
ACPI (Advanced Configuration and Power Interface) Support --->
# 這個電源管理模組雖然可以管理你的電源,不過,卻會增加核心約 70K ,所以
# 對嵌入式系統來說,可能需要考慮考慮。至於 desktop/server 當然就選擇啊!
ACPI Support
Sleep States
/proc/acpi/sleep (deprecated)
# 如果要啟動 ACPI 的支援,那上面這幾個幾乎都是必要的!
<M> AC Adapter
<M> Battery
<M> Button
<M> Video
# 這幾個則只要編譯成為模組即可,因為桌上型與伺服器用不到。
# 他主要大該都是針對筆記型電腦來設計的! ^_^
<*> Fan
<*> Processor
<*> Thermal Zone
# 每一部主機都有的 CPU/風扇 等,當然也可以編譯進核心,也可以設定成模組。
<M> ASUS/Medion Laptop Extras
<M> IBM ThinkPad Laptop Extras
<M> Toshiba Laptop Extras
(2001) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
Power Management Timer Support
APM (Advanced Power Management) BIOS Support --->
<*> APM (Advanced Power Management) BIOS support
[ ] Ignore USER SUSPEND
[ ] Enable PM at boot time
Make CPU Idle calls when idle
[ ] Enable console blanking using APM
RTC stores time in GMT
[ ] Allow interrupts during APM BIOS calls
[ ] Use real mode APM BIOS call to power off
# 由於鳥哥比較少使用電源管理,所以,我這裡大多使用預設值而已。
CPU Frequency scaling --->
# 什麼?可以經過核心修改 CPU 的運作頻率?哈哈!沒錯!是這樣!
# 不過,在說明檔當中也提及,還需要啟動底下的 dynamic cpufreq governor
# 才可以順利的啟動這個項目。當然,如果你不願意的話,這裡可以取消。
CPU Frequency scaling
Enable CPUfreq debugging
<M> CPU frequency translation statistics
CPU frequency translation statistics details
# 如果想要啟動在休眠時, CPU 自動降頻的功能,上面都給他設定好吧!
Default CPUFreq governor (userspace) --->
( ) performance
(X) userspace
# 休眠時 CPU 頻率的考量,是以效能為主,還是您可以手動修改
# 既然要自動降頻,當然不以效能為考量~所以選 userspace 吧!
<*> 'performance' governor
<M> 'powersave' governor
--- 'userspace' governor for userspace frequency scaling
<M> 'ondemand' cpufreq policy governor
<M> 'conservative' cpufreq governor
# 上面這幾個則是在載入哪些調節器(governor) ~
--- CPUFreq processor drivers
<M> ACPI Processor P-States driver
< > AMD Mobile K6-2/K6-3 PowerNow!
<M> AMD Mobile Athlon/Duron PowerNow!
< > Cyrix MediaGX/NatSemi Geode Suspend Modulation
<*> Intel Enhanced SpeedStep
Use ACPI tables to decode valid frequency/voltage pairs
Built-in tables for Banias CPUs
<*> Intel Speedstep on ICH-M chipsets (ioport interface)
<M> Intel Pentium 4 clock modulation
<*> Transmeta LongRun
< > VIA Cyrix III Longhaul
# 上面這幾個就與 CPU 的型號有關啦!我用的是 P-III,
# 所以,不相關的資料我直接將他編成模組而已!
--- shared options
[ ] /proc/acpi/processor/../performance interface (deprecated)
[ ] Relaxed speedstep capability checks
# 其實,這個項目主要是在主機 Idle 的時候,透過 CPU 本身的功能,
# 然後讓系統可以自動的降頻的一個選項啦! ^_^
老實說,由於鳥哥的 Linux 機器主要都是站在 Server 的角度,所以我的機器都是全年無休的。 在這樣的條件下,我老是選擇不要使用電源管理的說~ @_@。不過,如果是站在桌上型電腦的角度, 呵呵~啟動電源管理這可是很棒的選項,因為.....電費越來越貴了~ 能省則省啊! ^_^ 另外,絕大部分的選項都可以編譯成為模組啊!只是會花去一些編譯的時間就是了。
# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
這個項目則與匯流排有關啦!分為最常見的 PCI,還有筆記型電腦常見的 PCMCIA 插卡啊!詳細的資料有這些:
--- PCI support
PCI access mode (Any) --->
[ ] PCI Express support
# 這個重要!如果你的主機板有支援較新的 PCI-Express 顯示卡的話,
# 這裡請務必要勾選~鳥哥的主機板太舊了,用的是 AGP 顯示卡,所以這裡不選!
[ ] Message Signaled Interrupts (MSI and MSI-X) Legacy /proc/pci interface
[ ] PCI Debugging ISA support
[ ] EISA support
# 這個是比 PCI 還要更早的匯流排插槽,一般來說,
# 最好還是保留 ISA 插槽比較妥當點~
[ ] MCA support
< > NatSemi SCx200 support
PCCARD (PCMCIA/CardBus) support --->
< > PCCard (PCMCIA/CardBus) support
[ ] Enable PCCARD debugging
< > 16-bit PCMCIA support
[ ] PCMCIA control ioctl (obsolete)
--- 32-bit CardBus support
--- PC-card bridges
< > CardBus yenta-compatible bridge support
< > Cirrus PD6729 compatible bridge support
< > i82092 compatible bridge support
< > i82365 compatible bridge support
< > Databook TCIC host bridge support
# 這個是 PC 卡,一般來說,桌上型電腦不會有這種卡的存在,
# 所以,鳥哥通常是不選擇~不過,如果你的主機是筆記型電腦,
# 這裡可就得要選擇了!否則很多插卡就不能被使用啊!切記切記!
PCI Hotplug Support --->
# 這個是進階功能,可以不用理他!
PCI 插槽是重要的,因為幾乎所有的介面卡都是插在 PCI 插槽上面的。 此外,這個設定項目裡面有個比較有趣又重要的地方,那就是 PCI-E (PCI Express) 的設定項目了!如果你的主機板是最近買的,而且你的顯示卡是 PCI-E 的話, 這個項目就務必要編入核心才行!否則顯示卡會捉不到的!
# Executable file formats
這裡必須要勾選才行喔!因為是給 Linux 核心運作執行檔之用的資料! 除了第一項必須要編成核心功能之外,其他兩項是可以編譯成為模組的啦!
Kernel support for ELF binaries
<M> Kernel support for a.out and ECOFF binaries
<*> Kernel support for MISC binaries
# Networking
這個項目是相當相當相當 * n 重要的選項,因為他還包含了防火牆相關的項目! 就是未來在伺服器篇會談到的防火牆 iptables 這個資料啊!所以,千萬注意了!
--- Networking support
Networking options --->
# 就是這個光啊!裡面的資料全部都是重要的防火牆項目!
# 在這裡面的項目當中,如果可以編成模組,盡量將他編成模組!
<*> Packet socket
# 唯獨這個項目務必要編進核心裡面!因為他是防火牆啊!
Packet socket: mmapped IO
<*> Unix domain sockets
<*> IPsec user configuration interface
<M> PF_KEY sockets
# 底下是 TCP/IP 的設定,大多是 IPv4 ,只要保留預設值就很 OK 了!
TCP/IP networking
IP: multicasting
IP: advanced router
Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure)
IP: policy routing
IP: use netfilter MARK value as routing key
IP: equal cost multipath
[ ] IP: equal cost multipath with caching support (EXPERIMENTAL)
IP: verbose route monitoring
[ ] IP: kernel level autoconfiguration
<M> IP: tunneling
<M> IP: GRE tunnels over IP
IP: broadcast GRE over IP
IP: multicast routing
IP: PIM-SM version 1 support
IP: PIM-SM version 2 support
IP: TCP syncookie support (disabled per default)
<M> IP: AH transformation
<M> IP: ESP transformation
<M> IP: IPComp transformation
<M> IP: tunnel transformation
<*> INET: socket monitoring interface
[ ] TCP: advanced congestion control
IP: Virtual Server Configuration --->
# 這個項目則主要與 cluster 有關~裡面保留預設值即可!
# 這底下則與 IPv6 ,新一代的 IP 協定有關!同樣做成模組!
<M> The IPv6 protocol
IPv6: Privacy Extensions (RFC 3041) support
<M> IPv6: AH transformation
<M> IPv6: ESP transformation
<M> IPv6: IPComp transformation
--- IPv6: tunnel transformation
<M> IPv6: IPv6-in-IPv6 tunnel
# 底下就重要啦!就是我們一直講一直講的防火牆啦! ^_^
Network packet filtering (replaces ipchains) --->
--- Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
Bridged IP/ARP packets filtering
<M> Netfilter netlink interface
IP: Netfilter Configuration --->
<M> Connection tracking (required for masq/NAT)
Connection tracking flow accounting
Connection mark tracking support
[ ] Connection tracking events
<M> Connection tracking netlink interface
<M> FTP protocol support
<M> IRC protocol support
<M> TFTP protocol support
<M> Amanda backup protocol support
<M> PPTP protocol support
<M> IP Userspace queueing via NETLINK (OBSOLETE)
<M> IP tables support (required for filtering/masq/NAT)
<M> limit match support
<M> IP range match support
<M> MAC address match support
<M> Packet type match support
<M> netfilter MARK match support
<M> Multiple port match support
<M> TOS match support
<M> recent match support
<M> ECN match support
<M> DSCP match support
<M> AH/ESP match support
<M> LENGTH match support
<M> TTL match support
<M> tcpmss match support
<M> Helper match support
<M> Connection state match support
<M> Connection tracking match support
<M> Owner match support
<M> Physdev match support
<M> address type match support
<M> realm match support
<M> SCTP protocol match support
<M> DCCP protocol match support
<M> comment match support
<M> Connection mark match support
<M> Connection byte/packet counter match support
<M> hashlimit match support
<M> string match support
<M> Packet filtering
<M> REJECT target support
<M> LOG target support
<M> ULOG target support (OBSOLETE)
<M> TCPMSS target support
<M> NFQUEUE Target Support
<M> Full NAT
<M> MASQUERADE target support
<M> REDIRECT target support
<M> NETMAP target support
<M> SAME target support
<M> Packet mangling
<M> TOS target support
<M> ECN target support
<M> DSCP target support
<M> MARK target support
<M> CLASSIFY target support
<M> TTL target support
<M> CONNMARK target support
<M> raw table support (required for NOTRACK/TRACE)
<M> NOTRACK target support
<M> ARP tables support
<M> ARP packet filtering
<M> ARP payload mangling
Bridge: Netfilter Configuration --->
# 這個項目內容也一樣,全部編成模組!
# 底下同樣的,可能的話就編譯成為模組啊!
<M> 802.1d Ethernet Bridging
<M> 802.1Q VLAN Support
< > DECnet Support
< > ANSI/IEEE 802.2 LLC type 2 Support
<M> The IPX protocol
[ ] IPX: Full internal IPX network
<M Appletalk protocol support
Appletalk interfaces support
<M> Apple/Farallon LocalTalk PC support
<M> COPS LocalTalk PC support
Dayna firmware support
Tangent firmware support
<M> Appletalk-IP driver support
IP to Appletalk-IP Encapsulation support
Appletalk-IP to IP Decapsulation support
QoS and/or fair queueing --->
<M> Firewall based classifier
<M> U32 classifier
U32 classifier performance counters
classify input device (slows things u32/fw)
Use nfmark as a key in U32 classifier
<M> Special RSVP classifier
<M> Special RSVP classifier for IPv6
Extended Matches
(32) Stack size
<M> Simple packet data comparison
<M> Multi byte comparison
<M> U32 hashing key
<M> Metadata
<M> Textsearch
Traffic policing (needed for in/egress)
Network testing --->
# 底下則是一些特殊的網路設備,例如紅外線啊、藍牙啊!
# 如果不清楚的話,就使用模組吧!除非你真的知道不要該項目!
[ ] Amateur Radio support --->
<M> IrDA (infrared) subsystem support --->
<M> Bluetooth subsystem support --->
<M> Generic IEEE 802.11 Networking Stack
[ ] Enable full debugging output
<M> IEEE 802.11 WEP encryption (802.1x)
<M> IEEE 802.11i CCMP support
<M> IEEE 802.11i TKIP encryption
在這個設定項目當中,很多東西其實我們在基礎篇還沒有講到, 因為大部分的參數都與網路、防火牆有關!由於防火牆是在啟動網路之後再設定即可, 所以絕大部分的內容都可以被編譯成為模組,而且也建議您編成模組! 有用到才載入到核心即可啊! |
|