第六章﹕編譯核心


好了﹐當我們已經可以基本操控這台 Linux 機器之後﹐不妨幫它動點手術﹐讓它更適合自己的環境。就像喜歡飆車的朋友﹐總免不了要對心愛的座架改裝改裝一樣。

要改車﹐除了要改彈簧、輪胎、煞車、排氣、裙邊、尾翼等﹐要想車子真正能發揮性能﹐當然免不了改引擎啦。下面我們進行的核心編譯﹐就是為 Linux 改引擎了。 日後﹐我們還要裝 KDE、GNOME 等等這些 X Window﹐那是霧燈、座椅、方向盤、表板等這些‘裝飾’改裝了。這些修改﹐都一一顯示了使用者的個人風格﹐而且也有許多產品可供選擇﹐就如改車除了用“momo”之外﹐還可以選擇“無限”。

何謂核心﹖

前面介紹 shell 的時候﹐已經略略提到過核心這個東西﹐如果您有看過“電腦基礎”中關於作業系統部分的文章﹐相信不用我再多做解釋了。而且﹐我也不想再重複了﹐假如您不知道核心是做什麼的﹐可以到“電腦基礎”去看看。

我們通常掛在嘴邊的 Linux ﹐其靈魂所在﹐就是它穩定而強大的核心。而事實上﹐Linux 的定義﹐也只是這個核心﹐只是大家目前使用的系統﹐是經過包裝的﹐在核心之外﹐還有各種各樣的套件( 包括不同的 shell )整合一起。如果您有時間﹐而且願意上網路去抓﹐那些套件都可以自己找得到。有些人﹐幫您把核心編好﹐套件也設定好並加以整合﹐同時將安裝程式寫好﹐還提供套件管理工具﹐以及將環境設定妥當﹐然後燒成 CD﹐那就是我們常見的 Linux 套裝系統了。我們稱這些 Linux 套裝系統的發行版本為 Distribution ﹐例如大家聞名的 RedHat﹐Slackware﹐OpenLinux﹐TurboLinux﹐SuSE﹐Debian﹐等等﹐都是 distrobutions 。不管它們如何包裝﹐但骨子裡頭的東西﹐也就是使用的核心﹐都一樣﹕都是 Linux ﹗

那核心究竟如何定義呢﹖說簡單些﹐就是作業系統 (Operating System)﹐它負責處理所有系統的東西﹐包括硬碟的控制、記憶體管理、行程管理、檔案系統、網路功能、等等。我們可以將核心看成是一個架於程式和硬體之間的界面操作系統﹐離開來核心﹐什麼東西都用不了。而核心的編譯好壞﹐也會影響到系統的效能﹐甚至﹐一些系統功能(如 tcp/ip)﹐就必須要編進核心才行。

不過﹐在動手編譯核心之前﹐請先問問自己是否真的有這個必要﹖因為﹐現在的 Linux Distro﹐其預裝的核心力都盡可能的將所有東西以模組的方式進行編譯﹐而這些模組都是可以插入和移除的。這是一個非常靈活的設計﹕當您需要模組的時候﹐就載入到核心裡面﹔鳥盡弓藏的時候﹐可以將模組從核心中移除﹕呼之則來、揮之則去﹐怎一個方便了得﹗要知道﹐作業系統的效能好壞、穩定與否﹐其中一個很關鍵的因素是核心的體積短小精悍。一個臃腫的核心﹐沒錯﹐能提供樣樣俱到的功能﹐但也犧牲掉系統效能和穩定性。所以在編譯核心的時候﹐‘將核心編得儘量的小’﹐是最高原則。

就像改車一樣﹕車身越輕﹐其可控性越佳﹐如果您完全是一個 100% 飆車發燒友﹐很可能﹐您的車箱裡面﹐除了改良後的前坐位和防翻側支架外﹐其它能拿掉的都拿掉﹐連儀俵都是裸露的。呵~~ 如果您的車子裡面還有一大堆 Kitty 、Snoppy﹐以及上十組喇叭和 CD 音響﹐那我只能說您是“愛車一族”﹐而絕對不夠資格稱得上“飆車一族”﹗如果您能將所有的汽車週邊都設計成模組﹐那就最好不過了﹕需要泡馬子的時候﹐將所有耍 cool 玩意都弄上﹔需要午夜狂奔的時候﹐全部拿掉﹐一件不留。

同樣的﹐如果您真的是一個 100% 的 Linux 發燒友﹐假如發現核心裡面竟然載有您不想要的東西﹐是絕對不能容忍的。不過﹐對於初入門的朋友﹐倒不必急於以 Linux 發燒友來自居﹐先摸熟核心的功能之後﹐才真正打造適合自己的精確核心吧。說實在﹐若不是趕時髦﹐一般用 Distro 預裝的核心已經非常足夠了。而且預裝核心都帶有非常充足的模組﹐隨時應付您的需求。除非您千真萬確的知道您要的硬體只有在新核心裡面才能支援﹐或是從 kernel.org 上面得知舊核心有嚴重的漏洞﹐否則﹐不需要如此勞師動眾。

好了﹐現在﹐就假設您有十萬零一個理由需要進行核心的編譯﹐那就不妨一起共赴一趟核心的編譯之旅吧﹗

選擇版本

不管您的核心是從網路上抓的﹐還是從 CDROM 裡面 copy 出來的﹐首先要確定的事情是﹕這個版本是否適合您﹖

事實上﹐Linux 核心的版本號碼上面﹐就隱含著一些重要的資訊。先讓我們看看您目前使用的核心版本吧﹕
# uname -r
2.4.2-2

不知道您對這這些數字有何認識呢﹖不知道不要緊﹐讓我告訴您吧﹕

	<主版本>.<次版本>.<修訂版本>-<副版本>

然後﹐再讓我們看看核心版本的維護流程﹕

      kernel
      2.2.0
        |
        V
      2.2.1
        :
        |
        V        Kernel
      2.2.8 ---> 2.3.0
        |          |
        V          V
      2.2.9      2.3.1
        :          :
        |          |
        V          V       Kernel
      2.2.60      ... ---> 2.4.0
                             |
                             V      Kernel
                             : ---> 2.5.0
                             |        |
                             V        V
                             :        :

事實上﹐在眾多的核心版本中﹐我們需要特別留意的是第二個數字﹐也就是次版本的號碼﹕

  • 如果它是一個奇數﹐那這個版本是實驗性的版本﹐或許有些新的設備和功能能夠在這個種版本找到﹐但因為尚處於開發期﹐不能保證其穩定性和安全性。無論如何﹐不建議在真正用來工作的系統上面安裝實驗性的核心版本。例如﹕2.1.1、2.3.2、2.3.3、2.5.0 ....

  • 如果它是一個偶數﹐基本上﹐該版本已經獲得一定程度的測試和肯定﹐已趨於穩定和可靠的狀態。如果您的系統是真正用來工作的﹐只建議安裝穩定的核心版本。例如﹕2.2.1、2.2.17、2.4.2、2.4.9 ....

無論如何﹐當新核心推出之後﹐都不建議立即在真正工作的系統上面應用﹐尤其是在商業機構中﹐不要拿營運中的系統來做白老鼠。就算您獲得一個被認為是穩定的版本﹐也應該經過反復的測試﹐以及隨時留意核心團體所公佈的最新資訊。只有經過一段時期和廣泛的應用與回報﹐再加上自己的嚴格測試之後﹐才能決定是否要應用在工作的環境中。

事實上﹐更新核心不是為了幹時髦﹐您必須很清楚您的需要是什麼﹐假如當前核心已經能應付您的需要﹐那就繼續保留它就是了。下面這篇文章﹐是小州兄的建言﹐非常有代表性﹐希望大家能深切領會其中的要旨﹕

"小州"  撰寫於郵件
news:3iFIVR$84V@bbs.cynix.com.tw...
> ※ 引述《asho (阿信)》之銘言:
> > 這樣是否因為沒有最佳化
> > cpu以及週邊的關係ㄋ
> > 我想...如果編譯核心的時候
> > 不選duron而選x86系列ㄉ話
> > 效能應該會打折扣吧
>
>   我會去 compile kernel,一般來說只因為:
>
>   1. 你抓取新版 kernel source,當然你就需要自己編譯。
>
>   2. 雖然目前 kernel 在 linux dist 出廠時都盡可能編入需要的項目
>      到核心內,其他項目都選擇編譯成為 module 可以事後掛入。若是
>      很巧你用的週邊裝置該好很冷僻,預先編譯好的 kernel 既沒把你
>      需要的項目編入核心,也沒有編譯成為 module,這時候才需要
>      自己重新編譯核心。
>
>   3. 特殊環境使用....
>
>   重新編譯 kernel 並不會提昇效能,recompile kernel 最多只是調選
>   自己需要的項目編譯核心或者是編譯成為模組來使用。也許在選擇
>   編譯核心項目時,把 cpu 等級選好一點,那編譯出來的 kernel 是針對
>   該 cpu 最佳化編譯,但是整體增加效能百分比卻是很低,比方可能增加了
>   1 ~ 3 %,這對於目前的 cpu 來說,其實也沒有大幅度增快多少。
>
>   若是你用 mandrake,他全部 package 都是針對 pentium 的系統
>   編譯程式,那整體效率上的確才會比一般 linux dist 的 package 都是用
>   i386 指令集的程式套件快上許多。
>
>   至於編譯核心時,留下這台機器需要的,其他根本不用的不編入。像是
>   一般 linux dist 可能預先編譯好的 kernel 是支援 qos 機制,若是
>   不需要該機制,拿掉也許能夠減少一些編出來的 kernel image 大小,
>   但是這並不會增加系統效能..... 不過對於以前古老環境來說,當時
>   記憶體不多,而且那時候模組化還不成熟的年代,讓 kernel image 變小
>   一點,是可以減少一些記憶體耗費,但是對於目前其實都是不需要去擔心。

另外﹐還有一個地方要留意的﹕就是您目前使用的應用程式和新版核心之間的兼容性如何﹖其中最頭痛的地方莫過於 Library 的更新。因為 Library 是核心和程式之間的主要溝通界面﹐實在有太多的程式需要使用到 Library 提供的函式庫。如果單純為了升級某一個套件﹐而需要更新 Library 版本的話﹐在很大程度上也會牽涉到核心版本的升級﹔但其它應用程式是否能使用新版的 Library 卻是個非常棘手的難題。調過來說﹐如果您單純為了某一核心功能而升級核心﹐而導致所有 Library 和應用程式都必須更新﹐您必須有足夠的 study 和風險評估﹐否則當您發現牽一髮動全身的時候﹐再臨急抱佛腳﹐恐為時已晚了。況且﹐許多隱藏性的問題﹐可能要等到積壓了某一時期之後才能浮現出來﹐這個恐怕更是讓人吃不了兜著走。

無論如何﹐如果您覺得要升級核心的話﹐三思而後行﹗

取得 source

Linux核心的發展﹐可以說是相當迅速的﹐其版本更新反而有時候讓人覺得受不了呢。

如果您使用的我們這裡用來作範例的 RedHat 7.1 套件﹐那您應該看到和我一模一樣的版本﹕2.4.2-2。想要獲得最新的核心版本資訊﹐不妨到 http://www.kernel.org/ 走走﹐說不定會滿載(指頻寬)而歸呢﹗上面有 http 和 ftp 的下載選擇﹐如果您是用網頁瀏覽器的話﹐建議用 http 模式﹔如果您習慣了 ftp 界面﹐那就用 ftp 好了。

以小弟經驗看﹐最好是在系統安裝完畢之後﹐馬上就進行核心編譯工作﹐免得以後每次裝一些特定功能的時候又要花一大輪時間編譯。當然了﹐我是假設您如我在“安裝 Linux”文章中所說的﹕已經明確知道自己的系統要用來做什麼的。例如﹐您打算架設 NAT 和 QoS﹐並且閱讀過文件﹐明確知道要將什麼東西編譯進核心裡面。當然﹐如果您不怕花時間﹐每裝一次服務就重新編譯一次核心﹐也未嘗不可。只是﹐當您真的有過幾次核心編譯經驗之後﹐我相信您巴不得一次過就將核心編好﹐最好還是別人已經編好﹐然後送一個現成的過來﹗呵呵~~ 我常會在編核心的是許這樣的願望哦~~ ^_^

如果您不是到網路上抓最新的核心﹐但當初安裝的時候又不是選擇 everything﹐而且也沒選擇 Development Tools (kernel source) ﹐那您也可以使用安裝光碟帶來的核心版本 (RH7.1 是在 Disk2 上面)。當您將光碟 mount 好之後﹐然後轉到這個目錄去﹕﹕
cd /mnt/cdrom/RedHat/RMPS

然後將 kernel-source 的 rpm 裝上。別說您不會使用 rpm 哦﹐果真的話﹐請往前面翻看看程式管理 (RPM)再回來﹕
rpm -Uvh kernel-source-2.4.2-2.i386.rpm
(如果您看到錯誤信息顯示您還需要其他程式﹐一一裝好它們的 rpm 後再來安裝 kernel-source 的rpm。)

完成之後﹐您應該會在 /usr/src/ 目錄裡面看到一個 linux-2.4.2 的子目錄。這就是剛纔的 rpm 程式幹的好事了﹗

如果您的核心是從 internet 上面下載回來的﹐通常會是‘.tar.gz’或‘.tar.bz2’這樣的壓縮檔。目前﹐我在 http://www.kernel.org/pub/linux/kernel/v2.4/ 所找到的最新版本是 2.4.9 ﹐請先將 linux-2.4.9.tar.bz2 這個檔案抄進 /usr/src 再進行解壓﹕
tar Ixvf linux-2.4.9.tar.bz2
(因為這是 bz2 的壓縮﹐所以用 I 參數﹐如果您抓的是 gz 格式﹐就用 z 參數吧。)

這樣您就會產生一個‘linux’的目錄﹗注意哦﹕這個和您用 rpm 從 RH7.1 Disk2 的 CD 裝的目錄不一樣哦﹐如果您是用 CD 來裝的話﹐建議您建立一個 link﹕
ln -sf linux-2.4.2 linux

無論您是用光碟的 rmp﹐還是下載回來的核心﹐最終我們都應該有一個‘/usr/src/linux’的目錄﹕如果原來已經有這樣一個目錄存在﹐而不是 link 的話﹐那就先用 mv 將它改一個名字吧。

當我們的目錄準備好之後﹐就是我們進行編譯的步驟了﹕

進行編譯

不過﹐編譯核心一點都不輕鬆﹐而且是相當費神費時的事情。幸好現在的機器越來越快﹐而且核心的編譯程式也好用多了。

  1. 首先確定您在安裝 Linux 時候準備的開機片可以工作﹐用它boot 一下就知道了﹐要確定您的 BIOS 裡面的開機順序是以“A”(即軟碟)為先。如您當初忘記了製作開機片﹐或磁片壞掉了﹐先在這裡自行做一張﹕
    mkbootdisk --device /dev/fd0 `uname -r`
    
    (用 uname -r 命令是找出您當前的核心版本﹐如果您確定是 2.4.2-2 ﹐ 那可以直接用版本號碼來代替。)

  2. 重新啟動機器﹐確定是用 bookdisk 開機的。然後用 root 身份進行登錄﹐並取出開機磁碟﹐貼好標籤﹐然後換一張新的磁碟進去。

  3. 然後﹐讓我們轉換到 /us/src/linux/Documentation/ 目錄裡面﹐看看裡面您認為需要了解的資訊﹐例如 Changes﹐modules.txt、Configure.help 和其它 .txt 檔。

  4. 當您閱讀完新 kernel 的重要資訊之後﹐然後回到 /usr/src/linux 目錄﹐並輸入﹕
    make menuconfig
    

    如果在Xwindows裡面﹐可以輸入﹕make xconfig。不過﹐我們這裡使用 menuconfig 就好。在這個界面裡面﹐不如先學習一下如何操作鍵盤吧﹕

    • 界面是以層級形式顯示選項﹐您首先進入的頂層選單。然後您可以用‘向上’和‘向下’方向鍵來選擇選項。
    • 如果您發現所選擇的選項的最右邊有一個向右的箭頭﹐那就表示其下還有更進一層的子選單。
    • 在選單的底部﹐分別有﹕Select、Exit、和 Help 的按鈕﹐只要按‘tab’鍵就可以循環選擇。
    • 當您用上下方向鍵選擇好有子選單的選項﹐以及確定底部按鈕為 Select 之後﹐敲‘Enter’就可以進入下一層選單。
    • 如果按 tab 鍵選擇 Exit 的話﹐就會退回上一級選單 (也可以按‘Esc’﹐但要非常小心﹐因為不留神多按兩下的話可能會退出程式﹐然後您又不確定是保存還是放棄好﹗所以不鼓勵用‘Esc’)。
    • 當您選擇到最底部的選項的時候﹐也就是選項的右邊沒有箭頭了﹐那麼在選項的左邊應該是一個 [  ] 或 <  > 的符號。分別是﹕前者只能選擇為內建或不選擇﹔後者則可以讓您選擇為內建、或模組、或不選擇。您可以按空白鍵來循環您的選擇﹕[ * ] 和 < * > 為內建、[  ] 和 <  > 是不選擇、 < M > 則為模組。(我的建議是﹕能夠編成模組的就儘量編成模組﹐除非某些特別的效能考慮或沒有模組選擇的﹐才編成內建。)
    • 當您退回頂級目錄的時候﹐如果按 Exit 或 Esc 就會退出所有選單﹐同時系統會問您是否保存設定。您只有 ‘Yes’ 或 ‘No’的選擇﹐如果不確定﹐請用 no ﹐然後重新進行選擇。不過﹐您在任何時候﹐在頂級目錄那裡可以選擇﹕Save Configuration to an Alternate File ﹐將當前設定保存在 /usr/src/linux 目錄下﹐檔案名稱您自定則可﹔您也可以選擇﹕Load an Alternate Configuration File ﹐從設定檔載入以前的設定。我強烈建議您在進行任何改動之前﹐先為目前的設定保存起來﹐請選擇 Save Configuration 那個選項﹐然後輸入 origin﹐那您就可以隨時用 Load Configuration 還原核心的原始設定了。(如果對核心的選項夠了解﹐可以複製一份設定檔﹐然後直接修改裡面的設定﹐是最快的方法﹗)

  5. 接下來﹐應該是最傷神的時候了﹐這裡﹐我們要面對一大堆的選擇。如果您不確定哪些需要﹐可以接受預設值﹐或是一股腦做成模組。當您不知道某應該項目是什麼意思﹐可以按‘help’看看您是否需要﹐如沒需要的話可以不要編進核心裡面﹐否則核心編得太大﹐會影響系統效能。

    Code maturity level options  --->
    	[*] Prompt for development and/or incomplete code/drivers 
    	# 如果您想用核心進行研發工作﹐如測試新硬體﹐可以考慮﹐
    	# 否則不用理會﹐
    	# 不過﹐有些尚處於 alpha 階段的新功能必須選擇後才用。
    
    Loadable module support  ---> 
    	[*] Enable loadable module support 
    	[*] Set version information on all module symbols 
    	[*] Kernel module loader  
    	# 如果您要採用其它版本(或舊版本)編譯過來的模組﹐
    	# 那就要打開第二項﹐但可能不那麼安全。
    	# 然則﹐您也要確定裝有 genksyms 程式﹐
    	# 否則可能會編譯失敗。
    
    Processor type and features  ---> 
    	(Pentium-III/Celeron(Coppermine)) Processor family
    		( ) 486
    		( ) 586/K5/5x86/6x86/6x86MX
    		( ) Pentium-Classic
    		( ) Pentium-MMX
    		( ) Pentium-Pro/Celeron/Pentium-II
    		(X) Pentium-III/Celeron(Coppermine)
    		# 如果第一項的 CPU 型號不是您目前機器的﹐
    		#可以 Enter 進行選擇。
    
    	<M> Toshiba Laptop support
    	<M> /dev/cpu/microcode - Intel IA32 CPU microcode support
    	<M> /dev/cpu/*/msr - Model-specific register support
    	<M> /dev/cpu/*/cpuid - CPU information support
    	# 上面這些因為是模組的關係﹐所以才選。
    
    	(off) High Memory Support
    		(X) off
    		( ) 4GB
    		( ) 64GB 
    		# 如果您的實體記憶體少於 1G 的話﹐用預設的 off 就行﹔
    		# 如果您的記憶體介於 1G 到 4G 之間﹐選擇 4GB﹔
    		# 如果您的記憶體超過 4G ﹐那可以選擇 64GB。
    
    	[ ] Math emulation
    	# 除非您的 CPU 是 intel 386﹐否則不用選擇。
    
    	[*] MTRR (Memory Type Range Register) support
    	# 如果您有打算跑 X window﹐不妨將之加上。
    
    	[ ] Symmetric multi-processing support
    	# 如果您的機器是雙 CPU 的﹐可以選擇上面這個。
    
    	[ ] APIC and IO-APIC support on uniprocessors (NEW)
    
    General setup  --->
    	[*] Networking support
    	[ ] SGI Visual Workstation support
    	[*] PCI support
    	(Any)   PCI access mode
    		( ) BIOS
    		( ) Direct
    		(X) Any 
    	[*] PCI device name database
    	[ ] EISA support
    	[ ] MCA support
    	[*] Support for hot-pluggable devices 
    	PCMCIA/CardBus support  --->
    		<*> PCMCIA/CardBus support
    		[*]   CardBus support
    		[*]   i82365 compatible bridge support
    		[ ]   Databook TCIC host bridge support
    		# 如果您使用 notebook﹐或許會有 PCMCIA 裝置﹐
    		# 不妨將 i82365 加進來﹐除非您確定不使用 PCMCIA。
    		# 我實際上是沒有選擇的﹐這裡僅作示範而已。
    		# 如果您沒選擇這個﹐後面許多 PCMCIA 的選擇就看不到了﹐
    		# 參考的時候請留意這點﹗
    
    	[*] System V IPC
    	[*] BSD Process Accounting
    	# 是是非常好用的東西﹐可以將您的行程資料記錄下來﹐
    	# 強烈建議選擇﹐要不然開機可能會看到錯誤信息。
    
    	[*] Sysctl support
    	# 這個不能不選﹐否則 /proc/sys 就沒作用了。
    
    	(ELF) Kernel core (/proc/kcore) format
    		(X) ELF
    		( ) A.OUT
    	<*> Kernel support for a.out binaries
    	<*> Kernel support for ELF binaries
    	<*> Kernel support for MISC binaries
    	[*] Power Management support
    	<*>   Advanced Power Management BIOS support
    	# 上面這行要編成模組或內建﹐然後才看得到下面的哦﹕
    
    	[ ]     Ignore USER SUSPEND (NEW)
    	[ ]     Enable PM at boot time (NEW)
    	[ ]     Make CPU Idle calls when idle (NEW) 
    	[ ]     Enable console blanking using APM (NEW)
    	[ ]     RTC stores time in GMT (NEW)
    	# 如果您的硬體時鐘是使用世界標準時間﹐可以選擇﹐
    	# 如果是本地時則不選。
    
    	[ ]     Allow interrupts during APM BIOS calls (NEW)
    	[ ]     Use real mode APM BIOS call to power off (NEW)
    	# 如果您的系統不能自己切斷電源﹐就選這個吧。
    	# 不過﹐對某些 BIOS 而言﹐選了這個反而不能關機﹗
    	# 這樣的話﹐您自己試試看囉~~
    	# 我這裡沒選啦﹐因為我用的是華碩的舊板 P2L97。
    	# 另外﹐我還發現如果您是單 CPU 的機器﹐
    	# 前面卻將 SMP 選擇起來的話﹐那也不能關機哦~~
    
    Memory Technology Devices (MTD)  --->
    	< > Memory Technology Device (MTD) support
    	# 如果您要做 embedded 系統﹐
    	# 使用到 FDM 和 DOM/DOC 的話﹐可選。
    	# 不過選擇之後﹐還有很多選項﹐請儘量用模組來編譯就是了。
    	# 如果不知道是什麼﹐請看 Help 的說明﹗
    	# 我這裡沒選。
    
    Parallel port support  ---> 
    	<M> Parallel port support
    	# 如果您有使用平行埠﹐如接印表機﹐那就選吧。
    
    	<M>   PC-style hardware (NEW)
    	<M>     Multi-IO cards (parallel and serial) (NEW)
    	[ ]   Support foreign hardware (NEW)
    	[*]   IEEE 1284 transfer modes (NEW) 
    	# 假如您的印表機有狀態回報功能的話﹐可以考慮。
    
    Plug and Play configuration  --->
    	<*> Plug and Play support
    	<*>   ISA Plug and Play support
    	# 哇﹕PnP 耶~~ 這麼好的事情為什麼不用﹖
    
    Block devices  --->
    	<*> Normal PC floppy disk support
    	<M> XT hard disk support
    	<M> Parallel port IDE device support
    	--- Parallel IDE high-level drivers
    	<M>   Parallel port IDE disks (NEW)   
    	<M>   Parallel port ATAPI CD-ROMs (NEW) 
    	<M>   Parallel port ATAPI disks (NEW)  
    	<M>   Parallel port ATAPI tapes (NEW)     
    	<M>   Parallel port generic ATAPI devices (NEW) 
    	--- Parallel IDE protocol modules    
    	<M>     ATEN EH-100 protocol (NEW) 
    	<M>     MicroSolutions backpack (Series 5) protocol (NEW)
    	<M>     MicroSolutions backpack (Series 6) protocol (NEW) 
    	<M>     DataStor Commuter protocol (NEW)   
    	<M>     DataStor EP-2000 protocol (NEW)  
    	<M>     FIT TD-2000 protocol (NEW)  
    	<M>     FIT TD-3000 protocol (NEW)   
    	<M>     Shuttle EPAT/EPEZ protocol (NEW) 
    	<M>     Shuttle EPIA protocol (NEW) 
    	<M>     Freecom IQ ASIC-2 protocol (NEW) 
    	<M>     FreeCom power protocol (NEW) 
    	<M>     KingByte KBIC-951A/971A protocols (NEW) 
    	<M>     KT PHd protocol (NEW)   
    	<M>     OnSpec 90c20 protocol (NEW) 
    	<M>     OnSpec 90c26 protocol (NEW)  
    	<M> Compaq SMART2 support 
    	<M> Compaq Smart Array 5xxx support 
    	<M> Mylex DAC960/DAC1100 PCI RAID Controller support
    	<*> Loopback device support
    	# 這個建議做到核心去。
    
    	<M> Network block device support
    	<*> RAM disk support
    	(4096)    Default RAM disk size (NEW)
    	[*]   Initial RAM disk (initrd) support 
    	# 呵這趟收穫甚豐﹕反正是模組嘛~~  ^_^
    	# 不過﹐如果您確定真的是用不上﹐那也可以不選啦。
    
    	# 至於最後 3 項的使用時機﹐是當系統在開機過程中﹐
    	# 必須先載入某些模組才能完成檔案系統的掛載﹐
    	# 例如 SCSI 模組﹐或核心太大裝不進磁片中﹐
    	# 那您可以將 RD 和 initrd 選進核心裡面。
    	# 我這裡打算嘗試這個選項﹐因為我有 SCSI 控制卡。
    	# 如果您使用這個選項﹐請確定您的 SCSI 模組
    	# 要寫在 /etc/modules.conf 檔中﹔
    	# 您也可以執行 mkinitrd 幫助您完成。
    
    Multi-device support (RAID and LVM)  --->
    	[*] Multiple devices driver support (RAID and LVM)
    	<M>  RAID support
    	<M>   Linear (append) mode
    	<M>   RAID-0 (striping) mode
    	<M>   RAID-1 (mirroring) mode
    	<M>   RAID-4/RAID-5 mode
    	<M>  Logical volume manager (LVM) support
    	# 您想在 Linux 玩 RAID 和 LVM 嗎﹖這些可要選哦。
    
    Networking options  --->
    	# 在這裡的選項非常多﹐若想將 Linux 當成 gateway 來玩﹐
    	# 那可能會選擇較多的選項。
    	# 無論如何﹐參考 Help 的說明來決定您的需求。
    
    	<*> Packet socket
    	# 這個可以加快封包的雙向溝通。
    
    	[*]   Packet socket: mmapped IO 
    	# 目的同上。
    
    	[*] Kernel/User netlink socket 
    	# 如果您想架設 diskless 工作站﹐
    	# 同時要這台機器提供 RARP 這樣的服務﹐
    	# 那就最好選擇它。
    	# 其它一些服務如 ipvsadm 也需要它。
    
    	[*]   Routing messages (NEW) 
    	# 如果您想用 iproute2 接收路由資訊﹐請選擇。
    
    	<M>   Netlink device emulation (NEW)
    	# 這個選項應該很快合併到前面的 netlink socket 那裡去。
    
    	[*] Network packet filtering (replaces ipchains)
    	# 呵~~ 這個是許多人都想玩的功能﹕ NAT 和 firewall ﹗
    	# 一定要選哦~~
    
    	[ ]   Network packet filtering debugging (NEW)
    	# 如果您還有能力幫助 iptables 進行 debug﹐可以選。
    	# 我嘛﹐暫時偷懶~~
    
    	[*] Socket Filtering
    	# 這功能似乎很神奇﹐
    	# 如果您會寫 socket 程式﹐應該蠻受惠的。
    
    	<*> Unix domain sockets
    	# 許多程式﹐例如 X window 和 syslog ﹐都用到。
    	# 除非您做 embedded 系統﹐確定不會使用到﹐
    	# 否則一定要選。
    
    	[*] TCP/IP networking 
    	# 上面這項如果不選﹐也別想上 Internet 了。
    
    	[*]   IP: multicasting 
    	# 如果沒用到 MBONE 功能﹐可以不選。
    
    	[*]   IP: advanced router
    	# 如果要將 Linux 當 router 用﹐那就選吧。
    
    	[*]     IP: policy routing (NEW) 
    	# 如果您打算用 iproute2 來管理 TOS ﹐那就要選。
    
    	[*]       IP: use netfilter MARK value as routing key (NEW) 
    	# 可以用 iproute2 配合 iptalbes 來控制頻寬﹐很好玩哦。
    
    	[*]       IP: fast network address translation (NEW) 
    	# 哦﹕NAT 耶~~ 當然選擇啦。
    
    	[*]     IP: equal cost multipath (NEW) 
    	# 如果網路環境有多重路由﹐不妨考慮。
    
    	[*]     IP: use TOS value as routing key (NEW)  
    	# 如果您打算用 TOS 來做路由判定依據﹐那可以選。
    
    	[*]     IP: verbose route monitoring (NEW)
    	# 建議選擇﹐這樣可以讓核心告訴您一些奇怪的路由資訊。
    
    	[ ]     IP: large routing tables (NEW) 
    	# 如果您的路由區域可能超過 64 個﹐可以考慮。
    
    	[ ]   IP: kernel level autoconfiguration  
    	# 只有上面這項選擇了﹐下面三項才會跑出來﹕
    
    	[ ]     IP: DHCP support (NEW) 
    	[ ]     IP: BOOTP support (NEW)
    	[ ]     IP: RARP support (NEW)  
    	# 如果您要構建一個 diskless 工作站的核心﹐
    	# 可以選擇前面四項。
    	# 如果您是做 diskless 的伺服器﹐就不要選了。
    
    	<M>   IP: tunneling
    	# 可以用來架設 VPN 哦﹐反正又是模組﹐幹嘛不選﹖
    
    	<M>   IP: GRE tunnels over IP
    	[*]     IP: broadcast GRE over IP (NEW)
    	# 如果您的網路混合了 IPv6 和 IPv4﹐
    	# 可以考慮選擇前兩項。
    
    	[*]   IP: multicast routing
    	[*]     IP: PIM-SM version 1 support (NEW)
    	[*]     IP: PIM-SM version 2 support (NEW)
    	# 和前面的提到的 MBONE 一樣﹐前面三項有用才選吧。
    
    	[*]   IP: TCP Explicit Congestion Notification support
    	# 網路擁塞通知協定可以減少封包遺棄及加速傳送﹐
    	# 然而許多防火牆目前都不支援這些封包﹐
    	# 有可能會影響到防火牆後面的連線﹐
    	# 如果您不確定﹐那就不選為佳。
    	# 不過﹐您也可以用如下命令將此功能關閉﹕
    	# echo 0 > /proc/sys/net/ipv4/tcp_ecn
    
    	[*]   IP: TCP syncookie support (disabled per default)
    	# 使用 SYN cookies 來抵禦 SYN Flood 攻擊﹐
    	# 但光設定這裡是不夠的﹐您還必須確定
    	#  /proc/sys/net/ipv4/tcp_syncookies  的值為 1 。
    
    	IP: Netfilter Configuration  ---> 
    		# 不是一大票人要玩封包過濾嗎﹖可別忘了打開這裡哦﹕
    		<M>   Connection tracking (required for masq/NAT) (NEW) 
    		<M>   FTP protocol support (NEW)
    		<M>   IP tables support (required for filtering/masq/NAT) (NEW)
    		<M>   limit match support (NEW)
    		<M>   MAC address match support (NEW)
    		<M>   netfilter MARK match support (NEW)
    		<M>   Multiple port match support (NEW)
    		<M>   TOS match support (NEW)
    		<M>   tcpmss match support (NEW)
    		<M>   Connection state match support (NEW)
    		<M>   Packet filtering (NEW)
    		<M>   REJECT target support (NEW) 
    		<M>   Full NAT (NEW)
    		<M>   MASQUERADE target support (NEW) 
    		<M>   REDIRECT target support (NEW) 
    		<M>   Packet mangling (NEW)
    		<M>   TOS target support (NEW)
    		<M>   MARK target support (NEW)
    		<M>   LOG target support (NEW)
    		<M>   TCPMSS target support (NEW)  
    		<M>   ipchains (2.2-style) support (NEW) 
    		< >   ipfwadm (2.0-style) support (NEW) 
    		# 簡而言之﹐除非您確定不用﹐
    		# 這裡的東西全部都可以編為模組就是了。
    	--- 
    	<M> <M> The IPX protocol
    	[*]   IPX: Full internal IPX network (NEW) 
    	# 要和 Novell 機器連接嗎﹖前兩項要選擇哦。
    
    	<M> Appletalk protocol support
    	# 還想和 mac 電腦連接﹖那也不能不選哦。
    
    	< > DECnet Support
    	<M> 802.1d Ethernet Bridging 
    	# 如果您了解 802.1d 協定﹐
    	# 同時想用 Linux 當 Bridge﹐那就選吧。
    
    	QoS and/or fair queueing  ---> 
    		# 想玩流量控管﹐這裡的可不要忘了打開﹕
    		[*]   QoS and/or fair queueing
    		<M>   CBQ packet scheduler (NEW) 
    		<M>   CSZ packet scheduler (NEW)  
    		<M>   The simplest PRIO pseudoscheduler (NEW) 
    		<M>   RED queue (NEW)
    		<M>   SFQ queue (NEW) 
    		<M>   TEQL queue (NEW)
    		<M>   TBF queue (NEW)
    		<M>   GRED queue (NEW)
    		<M>   Diffserv field marker (NEW) 
    		<M>   Ingress Qdisc (NEW) 
    		[*]   QoS support (NEW) 
    		[*]   Rate estimator (NEW) 
    		[*]   Packet classifier API (NEW) 
    		<M>   TC index classifier (NEW) 
    		<M>   Routing table based classifier (NEW) 
    		<M>   Firewall based classifier (NEW) 
    		<M>   U32 classifier (NEW) 
    		<M>   Special RSVP classifier (NEW)
    		<M>   Special RSVP classifier for IPv6 (NEW) 
    		[*]   Traffic policing (needed for in/egress) (NEW) 
    		# 和前面的封包過濾一樣﹐能選為模組的就用 M ﹐ 
    		# 否則就內建。
    
    Telephony Support  --->
    	< > Linux telephony support 
    	# 除非您確定用 Linux 玩 VoIP﹐否則不用設定。
    	# 我這裡沒設啦。
    
    ATA/IDE/MFM/RLL support  --->
    	<*> ATA/IDE/MFM/RLL support
    	# 相信今天的硬碟沒有不支援 ATA 的吧﹖一定要選哦。
    
    	IDE, ATA and ATAPI Block devices  ---> 
    		<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/
    			floppy support
    		--- Please see Documentation/ide.txt 
    			for help/info on IDE drives
    		[ ]   Use old disk-only driver on primary interface
    		<*>   Include IDE/ATA-2 DISK support
    		[*]     Use multi-mode by default 
    		<M>   PCMCIA IDE support
    		<*>   Include IDE/ATAPI CDROM support 
    		<M>   Include IDE/ATAPI TAPE support
    		<M>   Include IDE/ATAPI FLOPPY support 
    		<M>   SCSI emulation support 
    		--- IDE chipset support/bugfixes
    		[*]   CMD640 chipset bugfix/support 
    		[ ]     CMD640 enhanced support 
    		[ ]   ISA-PNP EIDE support 
    		[*]   RZ1000 chipset bugfix/support
    		[*]   Generic PCI IDE chipset support
    		[*]     Sharing PCI IDE interrupts support 
    		[*]     Generic PCI bus-master DMA support 
    		[ ]     Boot off-board chipsets first support
    		[*]       Use PCI DMA by default when available 
    		[ ]     AEC62XX chipset support 
    		[ ]     ALI M15x3 chipset support
    		[ ]     AMD Viper support 
    		[ ]     CMD64X chipset support 
    		[ ]     CY82C693 chipset support
    		[ ]     Cyrix CS5530 MediaGX chipset support 
    		[ ]     HPT34X chipset support  
    		[ ]     HPT366 chipset support  
    		[*]     Intel PIIXn chipsets support
    		[*]       PIIXn Tuning support
    		[ ]     NS87415 chipset support (EXPERIMENTAL) 
    		[ ]     PROMISE PDC202{46|62|65|67|68} support 
    		[ ]     ServerWorks OSB4/CSB5 chipsets support
    		[ ]     SiS5513 chipset support
    		[ ]     SLC90E66 chipset support
    		[ ]     Tekram TRM290 chipset support (EXPERIMENTAL) 
    		[ ]     VIA82CXXX chipset support
    		[ ]   Other IDE chipset support
    		[ ]   IGNORE word93 Validation BITS
    		# 上面這些﹐如果能做成模組的就儘量做﹐其它的﹐
    		# 除非確定您會使用到﹐例如 Promise 的 IDE RAID 晶片﹐
    		# 否則不要選擇或接受預設的選項。
    
    SCSI support  --->
    	# 如果您機器上有 SCSI 裝置﹐那就打開這裡﹕
    
    	<*> SCSI support
    	--- SCSI support type (disk, tape, CD-ROM)
    	<*>   SCSI disk support
    	(40) Maximum number of SCSI disks that can be loaded as modules
    	# 如果您確定您的 SCSI 控制卡所支援的硬碟數目可以超過這個值﹐可以調整這裡的數值。
    
    	<M>   SCSI tape support
    	<M>   SCSI OnStream SC-x0 tape support
    	<M>   SCSI CD-ROM support  
    	[ ]     Enable vendor-specific extensions (for SCSI CDROM) (NEW)
    	# 請看 help ﹐以確定您是否使用到其中提到的型號﹐否則不要設。
    
    	(2) Maximum number of CDROM devices that can be loaded as 
    		modules (NEW)
    	<M>   SCSI generic support
    	--- Some SCSI devices (e.g. CD jukebox) support multiple LUNs 
    	[*]   Enable extra checks in new queueing code 
    	[*]   Probe all LUNs on each SCSI device 
    	[*]   Verbose SCSI error reporting (kernel size +=12K)  
    	[ ]   SCSI logging facility  
    	# 上面那些選項﹐如果是模組的話﹐儘量選﹐其它的﹐接受預設就好﹐
    	# 除非您確切知道。
    
    	SCSI low-level drivers  ---> 
    	# 這裡基本上是關於特定 SCSI 控制卡的型號的支援﹐
    		<M> NCR53C8XX SCSI support 
    		<M> SYM53C8XX SCSI support 
    		(4)   default tagged command queue depth  
    		(32)   maximum number of queued commands 
    		(20)   synchronous transfers frequency in MHz 
    		<M> Tekram DC390(T) and Am53/79C974 SCSI support  
    		# 不過﹐因為實在太多了﹐不全部列出來了。
    		# 不過﹐原則還是一樣﹕能模組就模組﹐
    		# 不能模組的就確定的才選擇
    		# 像我這裡﹐我確定 SCSI 控制卡是 Symbios 的 53C810 ﹐
    		# 這也是預設的﹐但我嘗試用 initrd (RAM DISK) 方式來啟動﹐
    		# 所以改為模組。
    
    	PCMCIA SCSI adapter support  ---> 
    	# 如果前面的 generic 中沒選 PCMCIA ﹐那這裡就沒有了。
    
    		[ ] PCMCIA SCSI adapter support
    		# 除非您確定有使用這些設備﹐否則可以不理。
    
    Fusion MPT device support  --->
    	< > Fusion MPT (base + ScsiHost) drivers
    	# 這個我不知道是什麼﹐也就不理了。
    
    I2O device support  --->
    	< > I2O support 
    	# 如果您確定您有 I2O 設備﹐可以選擇。我沒有﹐所以沒選。
    
    Network device support  --->
    	# 到這裡可不能不選了﹐要不我們怎麼上網啊﹖
    
    	[*] Network device support
    	ARCnet devices  ---> 
    		< > ARCnet support
    		# 如果您沒有 ARCnet 的界面﹐可以不理。
    
    	Appletalk devices  ---> 
    		[ ] Appletalk interfaces support (NEW)
    		# 如果您沒有 Appletalk 界面﹐可以不理。
    
    	<*> Dummy net driver support
    	# 這個我建議您編為內建﹐許多網路功能都會用到。
    
    	<M> Bonding driver support
    	# 如果您想用多張網路卡合併頻寬﹐模擬 Etherchannel 
    	# 和 Trunking 功能﹐那就選擇。
    	# 主意哦﹐支援此功能的 switch 很貴哦﹗
    
    	<M> EQL (serial line load balancing) support 
    	# 咦﹖可以合併多條 PPP 或 SLIP 頻寬﹖真的假的﹖
    	# 不妨試試看~~~	
    
    	<M> Universal TUN/TAP device driver support 
    	# 如果您沒有 tunX 或 tapX 設備﹐可以不設﹐
    	# 但﹐反正是模組嘛~~~
    
    	<M> General Instruments Surfboard 1000  
    	# 如果您有 SURFboard 1000 插卡式 Cable Medem ﹐
    	# 不妨試試。
    
    	Ethernet (10 or 100Mbit)  ---> 
    	# 這可是重點哦﹐不能不看﹕
    
    		[*] Ethernet (10 or 100Mbit)
    	 	[ ]   ARM EBSA110 AM79C961A support 
    		< >   Sun Happy Meal 10/100baseT support  
    		< >   Sun GEM support  
    		[*]   3COM cards
    		# 假如您已經有或打算買 3Com 的網路卡﹐就打開這裡吧。
    
    		<M>     3c501 "EtherLink" support (NEW)
    		<M>     3c503 "EtherLink II" support (NEW) 
    		<M>     3c505 "EtherLink Plus" support (NEW) 
    		<M>     3c509/3c529 (MCA)/3c579 "EtherLink III" support (NEW)
    		<M>     3c515 ISA "Fast EtherLink" (NEW) 
    		<M>     3c590/3c900 series (592/595/597) "Vortex/Boomerang" 
    					support (NEW)
    		# 不管﹐全部編成模組﹐說不定某天也有那麼好的福氣用名牌哦。
    
    		< >   AMD LANCE and PCnet (AT1500 and NE2100) support
    		[*]   Western Digital/SMC cards 
    		# 也難保證某天不會用到 Digital 的網路卡﹐反正模組嘛﹕
    
    		<M>     WD80*3 support (NEW)
    		<M>     SMC Ultra support (NEW) 
    		<M>     SMC 9194 support (NEW) 
    		[ ]   Racal-Interlan (Micom) NI cards 
    		<M>   DEPCA, DE10x, DE200, DE201, DE202, DE422 support
    		[*]   Other ISA cards
    		# 如果您手上還有 ISA 的舊網路卡﹐不要浪費哦。
    
    		<M>     Cabletron E21xx support (NEW)
    		<M>     EtherWORKS 3 (DE203, DE204, DE205) support (NEW)
    		<M>     EtherExpress 16 support (NEW)
    		<M>     EtherExpressPro support/EtherExpress 10 (i82595) 
    					support (NEW) 
    		<M>     HP PCLAN+ (27247B and 27252A) support (NEW)
    		<M>     HP PCLAN (27245 and other 27xxx series) support (NEW)
    		<M>     ICL EtherTeam 16i/32 support (NEW)
    		<M>     NE2000/NE1000 support (NEW) 
    		# 許多 ISA 網路卡﹐都支援 NE2000 的模組﹐
    		# 其它不選也要選這個。
    
    		[*]   EISA, VLB, PCI and on board controllers 
    		# 相信您的網路卡不會是非 PCI 的吧﹖
    
    		<M>     AMD PCnet32 PCI support
    		<M>     Apricot Xen-II on board Ethernet
    		<M>     CS89x0 support
    		<M>     DECchip Tulip (dc21x4x) PCI support 
    		# 您應該會看過 DEC 的網路卡吧﹖ 
    
    		[*]       Use PCI shared mem for NIC registers
    		<M>     Generic DECchip & DIGITAL EtherWORKS PCI/EISA 
    		<M>     Digi Intl. RightSwitch SE-X support
    		<M>     Davicom DM910x/DM980x support
    		<M>     EtherExpressPro/100 support 
    		# 居然核心內定就有 Intel 的這張卡﹗
    		# 太不公平了﹐改成模組﹐否則心裡不平衡 ^_^
    
    		<M>     Myson MTD-8xx PCI Ethernet support  
    		<M>     National Semiconductor DP8381x series PCI Ethernet support
    		<M>     PCI NE2000 and clones support (see help)   
    		# 嗯﹐還有 PCI 的 NE2000 呢﹐
    		# 如果您的網路卡怎麼都找不到模組﹐不妨碰碰這個運氣。
    
    		<M>     RealTek RTL-8139 PCI Fast Ethernet Adapter support 
    		# 呵~~ 俗稱‘便宜大碗’的螃蟹卡﹐就是使用這個模組的啦  ^_^
    
    		[ ]       Use PIO instead of MMIO  
    		[ ]       Support for older RTL-8129/8130 boards
    		# 如果您不確定您可以使用這兩個選擇﹐那就不要選擇﹐
    		# 否則可能會開不了機﹗
    
    		<M>     SiS 900/7016 PCI Fast Ethernet Adapter support
    		<M>     SMC EtherPower II  
    		<M>     Sundance Alta support 
    		<M>     TI ThunderLAN support 
    		<M>     VIA Rhine support
    		# 唉~~ 那張惡名遠撥的 DL-530TX 網路卡﹐
    		# 有時候可以用這個模組哦。
    		# 後面我專門介紹如何裝這張惡卡﹗
    
    		<M>     Winbond W89c840 Ethernet support 
    		# 嗯﹐Winbond 的和螃蟹卡一樣好裝﹗
    
    		[ ]   Pocket and portable adapters
    		# 如果您有口袋型網路卡(非 PCMCIA)﹐可以選擇其下的模組看看。
    
    	Ethernet (1000 Mbit)  --->
    		# 您什麼時候那麼好命啊﹖竟然連 Giga-bit 的網路都享受得到﹕
    
    		<M> Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support 
    		[ ]   Omit support for old Tigon I based AceNICs 
    		<M> D-Link DL2000-based Gigabit Ethernet support 
    		<M> Packet Engines Hamachi GNIC-II support
    		<M> SysKonnect SK-98xx support 
    	[ ] FDDI driver support 
    	# 目前來說﹐我是鐵定沒運氣用 FDDI 的了~~~
    
    	<M> PLIP (parallel port) support
    	<*> PPP (point-to-point protocol) support 
    	# 如果用 MODEM 撥接上網的話﹐這個一定要﹗
    	# 雖說這個也可以篇成模組﹐不過﹐目前還離不開 PPP﹐
    	# 尤其用撥接式 ADSL(PPPoE) ﹐不妨直接編進核心裡面﹐
    	# 除非您覺得這個會影響到核心的體積。
    
    	[*]   PPP filtering (NEW) 
    	# 看起來是不錯的功能哦﹐試試看﹖可惜不能編成模組。
    
    	<M>   PPP support for async serial ports (NEW) 
    	<M>   PPP support for sync tty ports (NEW) 
    	<M>   PPP Deflate compression (NEW)  
    	<M>   PPP BSD-Compress compression (NEW) 
    	<M> SLIP (serial line) support
    	# 雖說﹐要手工編寫 SLIP 撥接 script 的時代已經很久遠了﹐
    	# 不過﹐很多程式都會用到哦﹐例如 vpnd ﹐還有 ippfvsadm﹐有備無患。
    
    	[*]   CSLIP compressed headers (NEW) 
    	# 如果雙方都支援 SLIP 壓縮技術﹐用這個可以提高傳送量哦。
    
    	[*]   Keepalive and linefill (NEW) 
    	# 除非線路品質太差﹐否則不用計較。
    
    	[ ]   Six bit SLIP encapsulation (NEW)  
    	# 這個也太古老了吧﹖不確定的話﹐不必理會。
    
    	Wireless LAN (non-hamradio)  --->
    	# 咦﹖無線網路耶~~ 這麼好的玩意﹐怎能不試呢﹖
    	# 不過﹐我短期內是用不到的了﹐真有那麼好福氣﹐
    	# 也願意回來編核心啦 ^_^
    	# 所以﹐下面僅作範例參考﹕
    
    		[*] Wireless LAN (non-hamradio) 
    		<M>   STRIP (Metricom starmode radio IP) (NEW)  
    		<M>   AT&T WaveLAN & DEC RoamAbout DS support (NEW)
    		<M>   Aironet Arlan 655 & IC2200 DS support (NEW)  
    		<M>   Aironet 4500/4800 series adapters (NEW)
    		<M>    Aironet 4500/4800 ISA/PCI/PNP/365 support 
    		[*]      Aironet 4500/4800 PNP support  (NEW)
    		[*]      Aironet 4500/4800 PCI support  (NEW)
    		<M>    Aironet 4500/4800 PROC interface 
    		<M>   Cisco/Aironet 34X/35X/4500/4800 ISA and PCI 
    				cards (NEW)
    		--- Wireless Pcmcia cards support 
    		<M>   Hermes support (Orinoco/WavelanIEEE/PrismII/
    				Symbol 802.11b 
    				cards) (NEW)
    		<M>   Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards (NEW) 
    		# 上面有幾個一定要內建﹐如果計較的話﹐應該不選。
    
    	Token Ring devices  --->
    		[ ] Token Ring driver support 
    		# 這玩意﹐看來我也沒什麼機會玩的了~~
    
    	[*] Fibre Channel driver support
    	<M>   Interphase 5526 Tachyon chipset based adapter support (NEW)
    	# 搞不好您還真的這麼有福氣﹐用得到 FC 哦。
    	# 不過﹐我目前看來應該沒此機會的了。
    	# 上兩項也只作範例參考﹐實際上我並沒安裝。
    
    	Wan interfaces  --->
    		[*] Wan interfaces support 
    		# 知道一個 router 有多貴嗎﹖
    		# 居然小小的 Linux 也能玩 WAN﹖真的假的﹖
    		# 這項我沒選﹐下面僅作例子﹕
    
    		<M>   Comtrol Hostess SV-11 support (NEW)
    		<M>   COSA/SRP sync serial boards support (NEW) 
    		<M>   MultiGate (COMX) synchronous serial boards support (NEW) 
    		<M>     Support for COMX/CMX/HiCOMX boards (NEW) 
    		<M>     Support for LoCOMX board (NEW)
    		<M>     Support for MixCOM board (NEW)  
    		<M>     Support for HDLC and syncPPP protocols on MultiGate 
    					boards (NEW) 
    		<M>     Support for Frame Relay on MultiGate boards (NEW)
    		<M>   Etinc PCISYNC serial board support (EXPERIMENTAL) (NEW) 
    		<M>   FarSync T-Series X.21 (and V.35/V.24) cards (NEW) 
    		<M>   LanMedia Corp. SSI/V.35, T1/E1, HSSI, T3 boards (NEW) 
    		<M>   Sealevel Systems 4021 support (NEW)
    		<M>   SyncLink HDLC/SYNCPPP support (NEW)
    		<M>   Generic HDLC driver (NEW) 
    		[*]     Synchronous Point-to-Point Protocol (PPP) support (NEW)  
    		---     X.25/LAPB support is disabled 
    		<M>     SDL RISCom/N2 support (NEW) 
    		<M>     Moxa C101 support (NEW) 
    		<M>   Frame relay DLCI support (NEW)
    		(24)     Max open DLCI (NEW) 
    		(8)     Max DLCI per device (NEW)
    		<M>     SDLA (Sangoma S502/S508) support (NEW) 
    		[*]   WAN router drivers (NEW) 
    		<M>     Sangoma WANPIPE(tm) multiprotocol cards (NEW)
    		[*]       WANPIPE Cisco HDLC support (NEW) 
    		[*]       WANPIPE Frame Relay support (NEW)
    		[*]       WANPIPE X.25 support (NEW) 
    		[*]       WANPIPE PPP support (NEW)
    		[*]       WANPIPE Multi-Port PPP support (NEW)
    		<M>   Granch SBNI12 Leased Line adapter support (NEW)
    		[*]     Multiple line feature support (NEW) 
    		# 以上僅做範例參考﹐如果真的沒此需要﹐不用理會。
    
    	PCMCIA network device support  ---> 
    		[*] PCMCIA network device support
    		# 有用 notebook 嗎﹖不妨考慮這裡的模組﹕
    		# (我現在是用 desktop ﹐所以沒裝)
    
    		<M>   3Com 3c589 PCMCIA support 
    		<M>   3Com 3c574 PCMCIA support
    		<M>   Fujitsu FMV-J18x PCMCIA support
    		<M>   NE2000 compatible PCMCIA support 
    		# 說實在話﹐支援 Linux 的 PCMCIA 不見得很多﹐
    		# 或將 NE2000 編為模組﹐
    		# 日後找 pcnet_cs.o 這個模組來碰碰運氣。
    
    		<M>   New Media PCMCIA support
    		<M>   SMC 91Cxx PCMCIA support
    		<M>   Xircom 16-bit PCMCIA support
    		<M>   Xircom Tulip-like CardBus support 
    		[*]   Pcmcia Wireless LAN
    		<M>     Aviator/Raytheon 2.4MHz wireless support 
    		<M>     Xircom Netwave AirSurfer wireless support 
    		<M>     AT&T/Lucent Wavelan wireless support 
    		<M>     Aironet 4500/4800 PCMCIA support 
    		# 還有無線 PCMCIA 網路卡呢﹗還真不錯。
    
    # 以上都是網路設備的設定﹐
    # 看得出來﹐我似乎對它們情有獨鐘﹐
    # 或許是因為我是網中人的緣故吧 ^_^
    
    Amateur Radio support  --->
    	[ ] Amateur Radio support 
    	# 實在話﹐我也不知道 amateur radio 是什麼﹖
    
    IrDA (infrared) support  --->
    	<M> IrDA subsystem support
    	# 紅外線裝置﹖好玩意哦~~ 一般的 notebook 都有﹐
    	# 不過﹐我的 Desktop 是沒有的啦。
    	# 所以我這裡也沒裝﹐僅供參考﹕
    
    	--- IrDA protocols
    	<M>   IrLAN protocol (NEW) 
    	<M>   IrNET protocol (NEW)
    	<M>   IrCOMM protocol (NEW) 
    	[*]   Ultra (connectionless) protocol (NEW) 
    	[*]   IrDA protocol options (NEW)
    	---   IrDA options
    	[*]     Cache last LSAP (NEW)
    	[*]     Fast RRs (NEW)
    	[*]     Debug information (NEW)
    	Infrared-port device drivers  ---> 
    		--- SIR device drivers 
    		<M> IrTTY (uses Linux serial driver) (NEW) 
    		<M> IrPORT (IrDA serial driver) (NEW) 
    		--- Dongle support
    		[*] Serial dongle support (NEW)
    		<M>   ESI JetEye PC dongle (NEW)
    		<M>   ACTiSYS IR-220L and IR220L+ dongle (NEW)
    		<M>   Tekram IrMate 210B dongle (NEW)
    		<M>   Greenwich GIrBIL dongle (NEW)
    		<M>   Parallax LiteLink dongle (NEW) 
    		<M>   Old Belkin dongle (NEW) 
    		--- FIR device drivers 
    		<M> NSC PC87108/PC87338 (NEW)
    		<M> Winbond W83977AF (IR) (NEW)
    		<M> Toshiba Type-O IR Port (NEW) 
    
    	# 上面這些﹐如果您沒有紅外線線裝置﹐或是用不到﹐大可不理。
    
    ISDN subsystem  --->
    	< > ISDN support
    	# 嗯~~ 現在看來我不會拉 ISDN 線路吧﹖
    
    Old CD-ROM drivers (not SCSI, not IDE)  --->
    	[ ] Support non-SCSI/IDE/ATAPI CDROM drives 
    	# 除非您真有老掉牙的 CDROM﹐否則根本不用管它。
    
    Input core support  --->
    	# 如果您有支援 USB HID 的設備﹐可以考慮﹕
    
    	<M> Input core support 
    	<M>   Keyboard support (NEW) 
    	<M>   Mouse support (NEW)
    	(1024)    Horizontal screen resolution (NEW) 
    	(768)    Vertical screen resolution (NEW)
    	<M>   Joystick support (NEW)
    	<M>   Event interface support (NEW) 
    	# 反正都是模組嘛~~
    
    Character devices  --->
    	[*] Virtual terminal
    	[*]   Support for console on virtual terminal
    	# 除非您不想開多個 console ﹐否則一定要選。
    
    	<*> Standard/generic (8250/16550 and compatible UARTs) 
    			serial support
    	# 現在的通訊埠都使用這類的 UART 晶片組。
    
    	[*]   Support for console on serial port
    	# 嗯﹗許多 router 或 switch 都是用這個來設定的耶~~
    
    	[ ] Extended dumb serial driver options
    	[ ] Non-standard serial port support 
    	[*] Unix98 PTY support
    	(256) Maximum number of Unix98 PTYs in use (0-2048)
    	<M> Parallel printer support 
    	# 除非您沒有平行埠的印表機﹐否則不要忘了打開。
    
    	[*]   Support for console on line printer (NEW) 
    	# 可以將核心送出來的資訊直接列印哦。
    
    	<M> Support for user-space parallel port device drivers 
    	# 不確定是什麼﹐反正模組嘛~~
    
    	I2C support  --->
    		<M> I2C support
    		<M> I2C bit-banging interfaces (NEW)
    		<M>   Philips style parallel port adapter (NEW)
    		<M>   ELV adapter (NEW)
    		<M>   Velleman K9000 adapter (NEW)
    		<M> I2C PCF 8584 interfaces (NEW) 
    		<M>   Elektor ISA card (NEW)
    		<M> I2C device interface (NEW) 
    		# 老話﹕反正模組嘛~~ 
    		# 不過﹐如您不玩那些古怪的玩意﹐應該不用理會啦。
    
    	Mice  ---> 
    		<M> Bus Mouse Support
    		<M>   ATIXL busmouse support (NEW) 
    		<M>   Logitech busmouse support (NEW)
    		<M>   Microsoft busmouse support (NEW) 
    		<*> Mouse Support (not serial and bus mice)
    		[*]   PS/2 mouse (aka "auxiliary device") support 
    		<M>   C&T 82C710 mouse port support (as 
    				on TI Travelmate)  
    		<M>   PC110 digitizer pad support 
    		# 除了預設的兩個保留內建﹐其它都編到模組去了~~
    
    	Joysticks  ---> 
    		[ ] Joystick support
    		--- Input core support is needed for joysticks 
    		# 誰說在 Linux 不能玩 GAME 啊﹖連搖桿都有呢﹗
    		# 不過﹐我確定我不會在 Linux 玩 GAME 的啦 
    		# (我連 Windows 的 GAME 也沒有呢 :-)
    
    	< > QIC-02 tape support 
    	# 非 SCSI 的磁帶機﹖我可沒這些玩意。
    
    	Watchdog Cards  ---> 
    		[ ] Watchdog Timer Support 
    		# 看起來是網路重啟的設備﹐雖然我對網路設備都很偏心﹐
    		# 不過它似乎要內建﹐而且目前也看不出我會用得到﹐
    		# 也就不管了。
    
    	<M> Intel i8x0 Random Number Generator support 
    	<M> /dev/nvram support
    	<M> Enhanced Real Time Clock Support
    	<M> Double Talk PC internal speech card support 
    	<M> Siemens R3964 line discipline
    	<M> Applicom intelligent fieldbus card support  
    	# 以上這些被選﹐都是因為是模組之故。
    
    	Ftape, the floppy tape device driver  ---> 
    		<M> Ftape (QIC-80/Travan) support
    		<M>   Zftape, the VFS interface (NEW)
    		(10240)   Default block size (NEW) 
    		---   The compressor will be built as a module only! 
    		[ ]   Enable procfs status report (+2kb) (NEW)
    		(Normal) Debugging output 
    		--- Hardware configuration
    		(Standard) Floppy tape controllers 
    		# 如果您有備份磁帶機﹐可以選擇﹐
    		# 不過﹐最好看看 help 的說明。
    
    	<*> /dev/agpgart (AGP Support) 
    	# 現在的顯示卡都是 AGP 的吧﹖
    
    	[ ]   Intel 440LX/BX/GX and I815/I840/I850 support 
    	[ ]   Intel I810/I815 (on-board) support 
    	[ ]   VIA chipset support
    	[ ]   AMD Irongate support 
    	[*]   Generic SiS support 
    	[ ]   ALI chipset support
    	[ ]   Serverworks LE/HE support
    	[*] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
    	<M>   3dfx Banshee/Voodoo3+
    	<M>   3dlabs GMX 2000 
    	<M>   ATI Rage 128
    	<M>   ATI Radeon 
    	<M>   Intel I810
    	<M>   Matrox g200/g400 
    	# 如果可以編為模組﹐就編進模組。
    	# 如果確定不會用到特別型號的顯示卡﹐那就不用選擇。
    
    	PCMCIA character devices  ---> 
    		<M> PCMCIA serial device support 
    		# 模組嘛~~
    
    Multimedia devices  --->
    	<M> Video For Linux
    	# 有影/音擷取卡嗎﹖不妨試試。
    
    	Video For Linux  --->
    		[*]   V4L information in proc filesystem (NEW)
    		<M>   I2C on parallel port (NEW)
    		--- Video Adapters
    		<M>   BT848 Video For Linux (NEW)
    		<M>   Mediavision Pro Movie Studio Video For Linux (NEW)
    		<M>   Quickcam BW Video For Linux (NEW)
    		<M>   CPiA Video For Linux (NEW) 
    		<M>     CPiA Parallel Port Lowlevel Support (NEW)
    		<M>     CPiA USB Lowlevel Support (NEW)
    		<M>   SAA5249 Teletext processor (NEW)
    		<M>   SAB3036 tuner (NEW)
    		<M>   Zoran ZR36057/36060 Video For Linux (NEW)
    		<M>   Zoran ZR36120/36125 Video For Linux (NEW) 
    		# 我是有張很古老的﹐不知道是否可以呢﹖
    
    	Radio Adapters  ---> 
    		<M>   ADS Cadet AM/FM Tuner (NEW)
    		<M>   AIMSlab RadioTrack (aka RadioReveal) support (NEW)
    		<M>   AIMSlab RadioTrack II support (NEW)
    		<M>   Aztech/Packard Bell Radio (NEW)
    		<M>   GemTek Radio Card support (NEW)
    		<M>   GemTek PCI Radio Card support (NEW)
    		<M>   Guillemot MAXI Radio FM 2000 radio (NEW) 
    		<M>   Maestro on board radio (NEW)
    		< >   miroSOUND PCM20 radio (NEW) 
    		# 這個不能選﹐因為我發現在編譯的時候編不下去。
    		# 不知道是什麼原因啦~~~
    		
    		<M>   SF16FMI Radio (NEW)
    		<M>   TerraTec ActiveRadio ISA Standalone (NEW) 
    		<M>   Trust FM radio card (NEW) 
    		<M>   Typhoon Radio (a.k.a. EcoRadio) (NEW)
    		[ ]     Support for /proc/radio-typhoon (NEW) 
    		<M>   Zoltrix Radio (NEW)  
    		# 除了內建外﹐都編成模組了。
    		# 不過﹐如果確定不玩這東西﹐那也不用理會。
    		# 有時候﹐這些新玩意在編譯模組的時候﹐
    		# 會遇到奇怪的錯誤﹐那就回來取消它們吧。
    		# (像 miroSOUND 的 PCM20﹐
    		# 會出現 Unrsolved symbols 的問題)
    
    File systems  --->
    	[*] Quota support
    	# 要設定 quota 的話﹐一定要選。
    
    	<*> Kernel automounter support 
    	<*> Kernel automounter version 4 support (also supports v3)
    	# 如果打算玩 automount﹐請選擇。
    
    	<M> DOS FAT fs support
    	<M>   MSDOS fs support
    	<M>     UMSDOS: Unix-like file system on top of standard MSDOS fs 
    	<M>   VFAT (Windows-95) fs support 
    	# 相信很多人的機器上還有 MS Windows 吧﹖
    
    	<M> Compressed ROM file system support 
    	[*] Virtual memory file system support (former shm fs)
    	<M> Simple RAM-based file system support
    	<*> ISO 9660 CDROM file system support 
    	# 標準的 CDROM 格式﹐不能不選。
    
    	[*]   Microsoft Joliet CDROM extensions 
    	# 這個格式的 CDROM 也蠻多的。
    
    	<M> Minix fs support
    	<M> FreeVxFS file system support (VERITAS VxFS(TM) compatible)
    	<M> NTFS file system support (read only) 
    	# 讀取 NT 的檔案系統(唯讀)﹐
    	# 不過﹐我在編譯的時候﹐無論是內建或模組都失敗。
    	# 然而﹐您可以手工修改 /usr/src/linux/fs/ntfs/unistr.c﹐
    	# 找到下面的第一和第三行句子﹐加上中間那行就可以了﹕
    	# #include <linux/string.h>
    	# #include <linux/kernel.h>
    	# #include <asm/byteorder.h>
    	# (要保留 # 符號哦)
    	# 否則不要選。
    
    	<M> OS/2 HPFS file system support  
    	[*] /proc file system support
    	# 這個是核心自己使用的﹐一定要選。
    
    	[*] /dev/pts file system for Unix98 PTYs 
    	<M> ROM file system support 
    	<*> Second extended fs support 
    	# 這是 Linux 預設的檔案格式﹐不能不選。
    	# RH7.2 已經用 EXT3 了﹐
    	# 不過我不知道如何編譯 EXT3。
    
    	<M> System V/Xenix/V7/Coherent file system support
    	<M> UDF file system support (read only) 
    	<M> UFS file system support (read only) 
    	# 上面的﹐基本是預設內建的﹐
    	# 我都沒碰﹐能模組的就模組吧。
    
    	Network File Systems  ---> 
    		<M> Coda file system support (advanced network fs)
    		# 非常優秀的網路檔案系統﹐有空不妨玩玩。
    
    		<*> NFS file system support 
    		# 作為網路玩家﹐這個不可不會。
    
    		[*]   Provide NFSv3 client support 
    		[ ]   Root file system on NFS  
    		# 如果前面沒選擇 kernel level autoconfiguration  
    		# 這個是看不見的。
    		# 如果您打算做 diskless client 的核心﹐這個一定要選。
    		# 但如果做為 dsiskless 的 server﹐那就不必了。
    
    		<*> NFS server support  
    		# 這個是當然要選的﹐除非您單純做 NFS client 。
    
    		[*]   Provide NFSv3 server support  
    		# 第 3 代的 NFS﹐可以用 TCP (以前用 UDP)。
    
    		<*> SMB file system support (to mount Windows shares etc.) 
    		# 就算自己不用 Windows﹐相信還很多人在用﹐
    		# 不妨編為內建。
    
    		[*]   Use a default NLS (NEW)
    			Default Remote NLS Option: "cp950" (NEW)
    			# 如果需要中文支援﹐不妨改為 cp950
    
    		<M> NCP file system support (to mount NetWare volumes) 
    		[*]   Packet signatures 
    		[*]   Proprietary file locking
    		[*]   Clear remove/delete inhibit when needed 
    		[*]   Use NFS namespace if available
    		[*]   Use LONG (OS/2) namespace if available 
    		[*]   Lowercase DOS filenames 
    		[*]   Use Native Language Support
    		[*]   Enable symbolic links and execute flags 
    		# 所有 NCP 需要的﹐都是 novell 檔案系統需要的﹐
    		# 如果您確定您不打算和 novell 連接﹐那就不用理會。
    
    	Partition Types  --->
    		[*] Advanced partition selection 
    		[ ]   Acorn partition support (NEW) 
    		[ ]   Alpha OSF partition support (NEW) 
    		[ ]   Amiga partition table support (NEW) 
    		[ ]   Atari partition table support (NEW)
    		[ ]   Macintosh partition map support (NEW) 
    		[*]   PC BIOS (MSDOS partition tables) support
    		[ ]     BSD disklabel (FreeBSD partition tables) support (NEW) 
    		[ ]     Minix subpartition support (NEW) 
    		[ ]     Solaris (x86) partition table support (NEW) 
    		[ ]     Unixware slices support (NEW) 
    		[ ]   SGI partition support (NEW)
    		[ ]   Ultrix partition table support (NEW)
    		[ ]   Sun partition tables support (NEW) 
    		# 上面只有一項是預設選擇的﹐只要其它﹐您自己看著辦吧。
    
    	Native Language Support  --->  
    		     Default NLS Option: "big5-0" (NEW) 
    		    # 如果需要中文支援﹐不妨改為 big5-0
    
    		<M> Codepage 437 (United States, Canada) (NEW) 
    		<M> Codepage 737 (Greek) (NEW) 
    		<M> Codepage 775 (Baltic Rim) (NEW) 
    		<M> Codepage 850 (Europe) (NEW)
    		<M> Codepage 852 (Central/Eastern Europe) (NEW) 
    		<M> Codepage 855 (Cyrillic) (NEW)
    		<M> Codepage 857 (Turkish) (NEW)  
    		<M> Codepage 860 (Portuguese) (NEW) 
    		<M> Codepage 861 (Icelandic) (NEW) 
    		<M> Codepage 862 (Hebrew) (NEW)
    		<M> Codepage 863 (Canadian French) (NEW)
    		<M> Codepage 864 (Arabic) (NEW) 
    		<M> Codepage 865 (Norwegian, Danish) (NEW) 
    		<M> Codepage 866 (Cyrillic/Russian) (NEW) 
    		<M> Codepage 869 (Greek) (NEW)
    		<M> Simplified Chinese charset (CP936, GB2312) (NEW)
    		<*> Traditional Chinese charset (Big5) (NEW) 
    		<M> Japanese charsets (Shift-JIS, EUC-JP) (NEW)
    		<M> Korean charset (CP949, EUC-KR) (NEW) 
    		<M> Thai charset (CP874, TIS-620) (NEW)
    		<M> Hebrew charsets (ISO-8859-8, CP1255) (NEW) 
    		<M> Windows CP1251 (Bulgarian, Belarusian) (NEW)
    		<*> NLS ISO 8859-1  (Latin 1; Western European 
    				Languages) (NEW)
    		<M> NLS ISO 8859-2  (Latin 2; Slavic/Central European 
    				Languages) (NEW)
    		<M> NLS ISO 8859-3  (Latin 3; Esperanto, Galician, 
    				Maltese, Turkish) (NEW)
    		<M> NLS ISO 8859-4  (Latin 4; old Baltic charset) (NEW)
    		<M> NLS ISO 8859-5  (Cyrillic) (NEW) 
    		<M> NLS ISO 8859-6  (Arabic) (NEW) 
    		<M> NLS ISO 8859-7  (Modern Greek) (NEW) 
    		<M> NLS ISO 8859-9  (Latin 5; Turkish) (NEW)
    		<M> NLS ISO 8859-13 (Latin 7; Baltic) (NEW)
    		<M> NLS ISO 8859-14 (Latin 8; Celtic) (NEW) 
    		<M> NLS ISO 8859-15 (Latin 9; Western European Languages 
    				with Euro) (NEW)
    		<M> NLS KOI8-R (Russian) (NEW) 
    		<M> NLS KOI8-U/RU (Ukrainian, Belarusian) (NEW)
    		<M> NLS UTF8 (NEW) 
    		# 上面這些﹐除了繁體中文和 ISO 8859-1 編為內建之外﹐
    		# 其它的我都選為模組了﹐也建議您如此。
    		# 要不然以後讀到某些編碼的文章﹐再回來重編可不好玩。
    
    Console drivers  --->
    	[*] VGA text console
    	[*] Video mode selection support 
    	# 可以讓您在核心開機的時候﹐設定顯示解析度。
    	# 如果您認為沒必要的話﹐第 2 個可以不要。
    	
    	Frame-buffer support  --->
    	# 這就是傳說中的神情 FB 了﹗
    	# 據說可以讓您在找不到最新 AGP 顯示驅動程式的情況下﹐
    	# 仍能殺出條血路。不過﹐我沒玩過~~  ^_^
    
    Sound  --->
    	<M> Sound card support
    	# 強烈建議您改為模組﹐否則日後用不了 sndconfig 工具。
    	# 在 Linux 裡面設定音效卡可沒 windows 那麼容易哦﹗
    
    	<M>   C-Media PCI (CMI8338/8738)
    	[*]     Enable legacy FM (NEW) 
    	(388)     FM I/O 388, 3C8, 3E0, 3E8
    	[*]     Enable legacy MPU-401 (NEW)  
    	(330)     MPU-401 I/O 330, 320, 310, 300 (NEW) 
    	[*]     Enable joystick (NEW)
    	(2)       Number of speakers 2, 4, 5, 6 (NEW)
    	<M>   Creative SBLive! (EMU10K1)
    	<M>   Creative Ensoniq AudioPCI 97 (ES1371) 
    	<M>     100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) 
    				support (NEW) 
    	<M>     AWE32 synth (NEW)
    	<M>     Yamaha FM synthesizer (YM3812/OPL-3) support
    	<M>     Yamaha OPL3-SA1 audio controller
    	<M>     Yamaha OPL3-SA2 and SA3 based PnP cards
    	<M>     Yamaha YMF7xx PCI audio (native mode)
    	[*]       Yamaha PCI legacy ports support
    	<M>     6850 UART support
    
    	# 呵﹕這裡的清單太長啦﹗不全部列出來了。
    	# 不過我發現﹐在編譯 modules 的時候﹐會卡在 sound 上面﹐
    	# 您或許需要取消下面這些項目才能通過﹕
    	# < >   ESS Technology Solo1
    	# [ ]       Enable PSS mixer (Beethoven ADSP-16 and other compatibile)
    	# [ ]       Have DSPxxx.LD firmware file 
    	# 其它的﹐能模組就模組吧。
    	# 您要是使用 Creative 的原廠音效卡﹐成功的機會比較高。
    	# 如果花很多時間都搞不定那些奇怪的型號﹐我建議您換卡好了﹐
    	# 除非是內建的不能換。 
    
    USB support  --->
    	<*> Support for USB
    	# 現在來說﹐ USB 應該是標準了﹐
    	# 搞不好﹐這正是您升級核心的唯一理由呢﹗
    
    	[ ]   USB verbose debug messages 
    	--- Miscellaneous USB options 
    	[ ]   Preliminary USB device filesystem 
    	--- USB Controllers
    	<*>   UHCI Alternate Driver (JE) support
    	<M>   OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
    	--- USB Device Class drivers
    	<M>   USB Audio support 
    	<M>   USB Mass Storage support
    	[ ]     USB Mass Storage verbose debug
    	[ ]     Freecom USB/ATAPI Bridge support
    	[ ]     Microtech CompactFlash/SmartMedia reader
    	<M>   USB Modem (CDC ACM) support 
    	<M>   USB Printer support
    	--- USB Human Interface Devices (HID)
    	<M>   USB Human Interface Device (full HID) support
    	<M>   USB HIDBP Keyboard (basic) support
    	<M>   USB HIDBP Mouse (basic) support
    	<M>   Wacom Intuos/Graphire tablet support 
    	--- USB Imaging devices
    	<M>   USB Kodak DC-2xx Camera support
    	<M>   USB Scanner support
    	<M>   Microtek X6USB scanner support
    	--- USB Multimedia devices
    	<M>   USB IBM (Xirlink) C-it Camera support
    	<M>   USB OV511 Camera support
    	<M>   USB Philips Cameras
    	<M>   USB SE401 Camera support
    	<M>   DABUSB driver 
    	--- USB Network adaptors 
    	--- USB port drivers
    	<M>   USS720 parport driver
    	USB Serial Converter support  ---> 
    	--- USB misc drivers
    	# 原則一樣﹕儘量模組化。
    	# 越新的核心﹐支援的 USB 越多﹐如果您找不到您的型號﹐那就等下一版本吧。
    
    Kernel hacking  --->
    	[ ] Magic SysRq key 
    	# 破解核心﹖可不是當骸客啦﹐而是幫忙改良核心。
    	# 我絕對沒這個能力﹐沒辦法啦...
    
    --- 
    Load an Alternate Configuration File
    # 可以將您以前保存的設定叫回來。
    
    Save Configuration to an Alternate File
    # 可以將您的當前設定保存起來。
    
    

    如果您使用的核心版本和我這裡的不一樣﹐那麼上面的選項和擺放位址或許都不一樣﹐請您自己多加留意。

    這裡﹐我把我在 desktop 電腦上安裝的 2.4.9 核心設定檔放在 這裡﹐您可以下載回去﹐解壓後用 Load Configuration 的辦法載入設定﹐再根據您實際的情形調整即可。注意哦﹕我的設定是有打開 NTFS 的讀取模組﹐如不需要請取消﹐要不請參考前面的提示修改 /usr/src/linux/fs/ntfs/unistr.c 這個檔﹐否則您會遇到錯誤。

  6. 當您完成選擇之後﹐按‘Exit’退出﹐看到“Do you wish to save your new kernel configuration?”﹐確定您選擇‘Yes’。

    Tips﹕前面做了一大堆動作﹐無非為了一個目的﹕產生出 /usr/src/linux/.config 這個隱藏檔。除了 menuconfig 之外﹐透過 oldconfig、config、xconfig 也都可以產生(或修改)這個檔。甚至﹐您也可以直接從別的設定當複製過來﹐例如在原 CD 所帶的 source 版本中﹐您可以在 configs 這個目錄裡面找到廠商所使用的預設值。當然﹐您如果會手工設定它的話﹐直接編輯也行(小心不要改錯就是了。)

  7. 執行 ls /lib/modules 看看裡面有沒有一個目錄和編譯版本相同名字﹐如果有﹐用 ‘mv’命令將之改名﹐如﹕
    mv /lib/modules/2.4.9 /lib/modules/2.4.9.bck
    

  8. 然後再為 /lib/modules 、 /boot、和 lilo.conf 做一個備份﹕
    cp -af /lib/modules /lib/modules.bak
    cp -af /boot /boot.bak
    cp -af /etc/lilo.conf /etc/lilo.conf.bak
    

  9. 最後﹐請按順序輸入﹕
    make dep		# 建立相依關係
    make clean		# 清除舊有的設定
    make bzImage		# 建立核心檔 ( arch/i386/boot/bzImage)
    make modules 		# 建立模組 ( drivers, net, fs, kernel, ... etc.)
    make modules_install	# 將模組安裝至系統 (/lib/modules/2.4.9)
    
    (注意﹕bzImage 的‘i’為大寫)

    Tips﹕上面的句子﹐您可以用一行代替﹕
    make dep clean bzImage modules modules_install 1>/dev/null
    
    甚至﹐您還可以將 make 丟到 background 執行。不過﹐這通常在您比較確定核心沒有問題的時候才使用。我是建議您手工的執行每個 make 命令﹐檢查它的執行結果才進行下一個動作﹐如果有錯誤﹐解決之後才好繼續。

    在 make modules_install 之前﹐請先將 /lib/modules/ 目錄下面的相同版本子目錄移除掉﹐或改名。

  10. 這個過程比較需時﹐熒幕上會迅速的略過許多信息﹐有興趣可以看看﹐如果您不想看﹐那就將 STOUT 重導到 /dev/null 去﹐保留 STDERR 就好(不要說您不會做哦﹐否則請回去補習上一章的內容)﹔或是分別將它們重導到檔案去﹐在除錯時參考。

    如果有問題﹐您通常會卡在 modules 和 bzImage 上面﹐請仔細檢查錯誤信息﹐然後根據信息進行修改﹐直到您再沒看到錯誤為止。(有些警告信息是無須理會的﹐如果您碰到 Error 結尾的句子就要小心了﹐通常在最後面﹐如果看不見﹐那是好消息。)

當您 make bzImage 順利完成之後﹐您應該會看到幾行信息﹐告訴您核心的大小﹕
Root device is (3, 6)
Boot sector 512 bytes.
Setup is 4648 bytes.
System is 936 kB

假如您碰到 warning: kernel is too big for standalone boot from floppy 的話﹐那就要考慮回去將內建的選項改為模組﹐或儘量減少。否則﹐您將不能為這個核心製作開機磁片﹐也不能運用下面提到的核心安裝測試程序。

安裝核心

不過﹐到此為止﹐我們只是將核心編譯出來而已﹐接下來的是要將核心安裝到系統上面去。

先將一張空白磁片放進軟碟機﹐然後輸入﹕
make bzdisk

這可能需要一點時間﹐等完成之後﹐輸入﹕
reboot

這樣會讓機器重新啟動﹐這時候﹐你要確定您的BIOS裡面的開機順序是以“A”(或 Floppy )為先﹐和確定磁片留在 Floppy Drive 裡面。

我們這樣做的目的﹐是用磁片測試一下新的核心是否工作。我強烈建議您先用磁片測試新核心﹐除非您編譯出來的核心實在塞不進一張磁片中。如果不成功的話﹐您還可以取出磁片﹐用原來的核心來啟動﹐然後再重新編譯﹐再來反復測試。

Tips﹕如果您不能建立磁片開機(例如系統上根本沒 floppy drive )﹐或是做出來的核心太大﹐塞不進 floppy 中﹐那您可以執行 make bzlilo 將新核心裝到 / 目錄去﹐然後參考後面的 lilo.conf 設定﹐將 image 指向 /vmlinuz ﹐並用新的 label (如 linux.new ) 來測試新核心。

然而﹐我發現﹐在一些新版的核心中(如 2.4.16)﹐它在執行 make bzlilo 的時候﹐卻是將 vmliuz 寫到 /boot 目錄中。這可要小心了﹕以為不小心會將舊的核心內容概掉﹗然則﹐請參考後面對手工方法來安裝核心。

無論如何﹐保持一片舊的可開機的磁碟片、以及為 /boot 目錄做備份﹐是一個非常明智的做法。

如果新的核心是沒問題﹐也就是能用新核心的 floppy 開機的話﹐等我們重新登入系統後﹐再回到 /usr/src/linux 目錄裡面﹐然後執行﹕
make install

這個動作和 make bzdisk一樣﹐只不過將核心安裝到硬碟而已。它會將核心裝在 /boot 目錄去﹐請檢查那裡﹐如果您發現﹕vmlinuz-2.4.9 這個檔案﹐那就是核心了﹗除了核心檔之外﹐您應該還會看到 System.map-2.4.9 這樣的檔案﹕
# ls -l /boot/vmlinuz*
lrwxrwxrwx 1 root root      13 Sep  7 13:31 /boot/vmlinuz -> vmlinuz-2.4.9
-rw-r--r-- 1 root root  781806 Apr  9 08:57 /boot/vmlinuz-2.4.2-2
-rw-r--r-- 1 root root  980321 Sep  7 13:31 /boot/vmlinuz-2.4.9
# ls -l /boot/System.map*
lrwxrwxrwx 1 root root      16 Sep  7 14:05 /boot/System.map -> System.map-2.4.9
-rw-r--r-- 1 root root  410990 Apr  9 08:57 /boot/System.map-2.4.2-2
-rw-r--r-- 1 root root  455081 Sep  7 13:31 /boot/System.map-2.4.9

您不難發現其中的 vmlinuz 和 System.map 都是 links 吧。事實上﹐如果您不執行 make install 的話﹐可以手工的直接從 /usr/src/linux 目錄下面將相關檔案複製到 /boot 裡面去﹕
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.9
cp /usr/src/linux/System.map /boot/System.map-2.4.9
ln -sf /boot/vmlinuz-2.4.9 /boot/vmlinuz
ln -sf /boot/System.map-2.4.9 /boot/System.map

Okay﹗到這裡﹐基本上就把核心順利安裝到系統上面了。不過﹐因為我這裡有使用到 RAM DISK 機制﹐在開機的時候啟動我的 SCSI 控制卡模組。事實上我是可以直接將 SCSI 編進內建的啦﹐但作為這篇教學的需要﹐我這裡就為大家進行一次示範設定。如果日後您的系統只有 SCSI 硬碟﹐或是 RAID 系統﹐不能直接內建在核心裡面開機﹐那就可以傚法這裡﹐使用 initrd 的機制了。如果要手工進行﹐您大可以參考 /usr/src/linux/Documentation/initrd.txt 和 ramdisk.txt 文件﹐自己動手。然而﹐系統已經提供一個非常好用的工具﹐幫您搞定這些工作﹕
mkinitrd -f /boot/initrd-2.4.9.img 2.4.9

就這麼簡單﹐它同時會修改 /etc/modules.conf﹐幫您加上相應的 SCSI 模組﹐請檢查這個檔案確認一下模組是否正確﹐要不然可以手工修改過來﹐請您自行 man mkinitrd 參考資料囉。如果您還有其它模組需要加在這個檔案裡面﹐可以參考如下的動作﹕
dd if=/dev/zero of=initrd bs=300k count=1
mke2fs -F -m0 initrd
zcat /boot/initrd-2.4.9.img > initrd
mkdir /mnt/initrd
insmod loop     # 如果當前核心沒內建 loop 的話
mount -t ext2 -o loop initrd /mnt/initrd
cp /lib/modules/2.4.9/xxx/yyyy.o /mnt/initrd/lib   # yyyy.o 為增加的模組
echo "Loading module yyyy ...." >> /mnt/initrd/linuxrc
echo "insmod /lib/yyyy.o" >> /mnt/initrd/linuxrc
umount /mnt/initrd
dd if=initrd of=/boot/initrd-2.4.9.new bs=1k count=2880
gzip -9 /boot/initrd-2.4.9.new
vi /etc/lilo.ocnf	# 修改 initrd=/boot/initrd-2.4.9.new.gz
lilo -v

假如您認為沒必要使用 RAM DISK﹐那就不用管這一段了。

設定 LILO

LILO 是 “LInux LOader”的縮寫﹐它是在機器啟動的時候負責載入作業系統的。我們在“安裝”和“開機”的章節裡面都提到過它的作用﹐這裡不再重複。然而﹐在許多時候﹐我們可能需要設定不同的核心來配合不同的測試﹐每次當我們編譯或修改過核心設定﹐那就一定要驚動到 LILO 的設定。我們這裡﹐將正式介紹如何修改 LILO 的設定檔。

我發現﹐在某些系統上﹐例如 Mandrak 8 上面﹐在編譯核心過程中﹐執行 make install 的話﹐會自動幫您修改 /etc/lilo.conf 這個重要的檔案。不過﹐RedHat 7.1 似乎還沒這麼自動。無論如何﹐請您修改 /etc/lilo.conf 這個檔案﹐看起來有點像這樣﹕

# -- GLOBAL -- #

boot=/dev/hda				
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
#linear
lba32
default=linux

# -- PER-IMAGE SECTION -- #

image=/boot/vmlinuz-2.4.9		# 新的核心檔
        label=linux
        initrd=/boot/initrd-2.4.9.img	# 新的 initrd 檔
        read-only	
        root=/dev/hda6

image=/boot/vmlinuz-2.4.2-2
        label=linux.242			# 將舊標籤改名
        initrd=/boot/initrd-2.4.2-2.img
        read-only
        root=/dev/hda6

other=/dev/hda1
        optional
        label=win98

other=/dev/hdb2
        label=rh62

other=/dev/hdb6
        label=ol24

這裡﹐我們不妨先解讀一下這個檔案的設定結構﹐在最頂上的為 global 設定﹐也就是當 LILO 被啟動之後﹐都會被執行的項目﹕

  • boot﹕這是指定 LILO 必須安裝在哪裡﹖通常您可以選擇為 MBR 或是 super block。如果是 MBR﹐那您只要指定硬碟的代號就可以了﹐如 /dev/hda ﹔如果是 super block﹐那您必須指定 partition 代號﹐如﹕/dev/hda2 ﹐您必須確定這個 partition 的 mount point 是 /boot 。

    MBR 和 super block 的分別是﹕用前者的話﹐那麼機器在接通電源並通過 BIOS 檢測之後﹐開機程序就交由 LILO 來控制﹔如果是後者﹐則有其它的開機管理程式控制﹐並且必須有一個 pointer 指向 super block 所在的 partition。您可以參考後面 image sections 中的 rh62 和 ol24 之範例。

  • map﹕這是關於 LILO 所使用的對應檔(具體作用我不甚了解)﹐這個檔在第一次執行 lilo 的時候就會建立。

  • install﹕指定了哪個啟動檔用來安裝在啟動磁區上。

  • prompt﹕在載入系統之前﹐先進行提示。這時候﹐您可以敲 Tab 鍵來顯示開機選項﹐然後輸入您所選擇的系統。

  • timeout﹕假如上面的 prompt 沒有任何輸入﹐則在倒數結束時間的情況下選擇預設的系統。倒數時間單位為十分之一秒﹐所以﹐預設會等您 5 秒。

  • message﹕是否在執行 LILO 的時候顯示特定信息﹐也就是這裡指定的檔案內容﹐必須是不超過 65535 bytes 的文字檔。

  • linear﹕是否以 linear 格式位址取代傳統的 S:H:C 磁碟索引格式﹐通常在 SCSI 硬碟中使用。請謹慎設定﹐不小心使用可能會導致系統不能正確開機。

  • lba32﹕假如您的開機磁區所在的磁柱數目超過 1024 的話﹐那就要啟用 lba 32bit 位址格式才行。

  • default﹕假如提示的時候沒有輸入的話﹐所使用的預設系統。它必須是後面 PER-IMAGE 項目中的某一個 label﹐假如沒有指定﹐則一第一個 label 為預設系統。

除了上面這些介紹的項目之外﹐事實上還有很多其它的設定﹐例如 password、vga、等等。有興趣的話﹐請 man lilo.conf 慢慢看吧。

當您完成 global 設定之後﹐接下來的就是 PER-IMAGE SECTION 的設定﹐簡單點說﹐就是設定開機選單。通常﹐每一個開機選單都是一個獨立的作業系統﹐或是不同的核心(我們剛纔編的就是核心)。先讓我們看看不同核心之間的設定吧﹕

  • image﹕這就是我們剛纔千辛萬苦編譯出來的核心檔位置所在啦﹗這行通常不會縮排﹐也就是句子第一個字母不是空白或 Tab 鍵。如果您要縮排其後的句子﹐建議您用 Tab 鍵﹐而避免用空白鍵。在有些舊的系統中﹐或許會比較敏感﹐不過﹐現在的 LILO 應該沒什麼所謂了。

  • label﹕開機時 LILO 能顯示的選單標籤名稱﹐您喜歡用什麼名字都行﹐只要不會跟其它標籤衝突就行。假如您在 global 裡面設定了 default 標籤﹐那麼必須和這裡的名稱一摸一樣。

  • initrd﹕如果您的核心將 Ram Disk 和 Ininit RD 編為內建的話﹐那就要在這裡指定您的 initrd 檔位置所在﹐也就是執行 mkinitrd 命令時所指定的檔案。假如您沒有使用 ram disk﹐那就不用設定這行。

  • read-only﹕在開機的過程中﹐root 目錄所掛載的狀態﹐設定為 read-only 比較安全。因為開機完成後﹐它會被重新掛載為 read-write 狀態。

  • root﹕也就是您的 root parition 的位置所在﹐您必須知道正確的位置在哪裡。

在前面的 lilo.conf 範例檔中﹐粗體字的部份就是因應這次核心編譯才需要修改的。我單純的將舊核心那部份(共 5 行)複製到上面﹐然後修改 image、initrd 而已﹔然後將原來的舊 label 改為 linux.242 (說明它是 2.4.2 的核心)﹐其它照舊即可。假如您的 lilo.conf 在執行 make install 的時候就修改好了﹐那也請您逐行檢查﹐以作確認。

然後﹐再讓我們看看不同作業系統之間的設定。不過﹐這顯然簡單多了﹕

  • other﹕其它系統所在的位置。對於 Windows 系統而言﹐則是磁碟第一個 windows 磁區 (c:\) 所在的位置。如果是 linux 系統﹐也就它們所安裝的 super block 位址﹐因為 MBR 只能有一個﹐如果這裡的 MBR 給目前的系統使用了﹐那其它系統就必須裝在 MBR 上。不過﹐如果反過來﹐如果當前的系統裝在 super block 裡面﹐然後用 MBR 裡面其它的 boot loader 來載入當前核心﹐那您必須修改 global 的 boot 設定﹐同時﹐還要在其它系統上的上面建立這個 super block 的指引(如果是其它 linux 系統﹐則在它們的 lilo.conf 上面設定 other ﹐指回這邊)。

  • optional﹕當核心在建立 map 檔的時候﹐如果 image 還不存在的話﹐可以忽略。否則﹐ LILO 可能不讓您安裝。

  • label﹕這個應該知道了吧﹖也就是 LILO 的開機選項標籤。

基本上﹐我們前面的設定檔範例就介紹到這裡。前面的設定項目﹐有些是可以放在 global﹐也可以放在各個 section 之中﹐例如 read-only 這個設定。假如您還有其它的設定﹐建議參考 lilo.conf 的 man page。比方說﹐您需要在開機的時候﹐將一些核心選項設定起來﹐那您需要使用到 append 選項。在以前沒有 PnP 的時候﹐或許您需要在啟動的時候把網路卡跑起來﹐那就可以這樣設了﹕
append="ether=3,0x300,eth0 ether=5,0x320,eth1" 

這裡﹐一共指定了兩張網路卡的 IRQ、I/O、以及卡號(通常第一張網路卡是 eth0﹐第二張是 eth1﹐如此類推)。請記住﹕句子的格式非常嚴格﹐例如 I/O 位置一定要以 0x 開頭﹐然後 “,”和空白也不能亂用﹐而且也有大小寫的分別。例如﹐如果您最多只能抓到 64 Mb 的記憶體(以前的舊核心可能會這樣)﹐那您可以用 append="mem=128M"來解決。再例如﹐您必須透過選項告訴核心正確的硬碟 Sector:Head:Cylinder 資訊﹐也可以如此設定﹕append="hd=64,32,202"。這個 append 選項放在 global 或 section 裡面都可以﹐看您怎樣運用而已。

當您的 /etc/lilo.conf 完成設定之後﹐請一定一定不要忘記執行如下命令﹕
lilo

請檢查您剛才寫進去的 label 有否出現。如果在它旁邊還有有一個“*”標記﹐這表示它被選擇為預設開機核心了。如果您想看看 lilo 究竟做了些什麼修改﹐您可以輸入﹕lilo -v -v(越多 -v 越詳盡)。一定要記住﹕只有當您執行了 lilo 命令之後﹐您的 LILO 才會真正裝到系統之上。 如果您修改了 lilo.conf﹐卻沒有執行 lilo 命令﹐情形就好像您 make bzImage 之後沒有將 kernel 複製到 /boot 目錄裡面一樣。

假如您的設定檔有問題﹐您通常都不能順利完成這個命令﹐這樣﹐您的 LILO 也同樣不會裝到系統上面﹐然則﹐請根據錯誤信息進行修改。當一切確定無誤後﹐可以重新開機看看新核心是否工作。當出現 ‘LILO Boot:’提示的時候﹐您可以按‘Tab’鍵看看有哪些選擇﹐然後輸入您要啟動的名稱。如果直接按‘Enter’就會以預設值開機了。因為我們在執行安裝核心到系統之前﹐已經用 floppy 測試過了﹐照理說應該沒什麼問題才對。如果有問題﹐那就不是核心的編譯問題﹐而可能是 LILO 的設定問題而已﹔反過來﹐如果 floppy 不能通過測試﹐那您在這裡設定 LILO 也是枉然﹐甚至弄巧成拙﹗所以﹐我強烈建議您﹕(1) 永遠保留一份開機磁片﹔(2) 安裝新核心之前﹐儘可能先用 floppy 來測試。

Tips﹕事實上﹐除了使用 LILO 之外﹐我們還可以使用其他開機系統哦。比方說﹐您的系統原來已經裝有 NT (或 w2k)了﹐您也可以用 NTLDR 來啟動 linux 呢。下面我粗略的將步驟列出來﹐具體情況要看您實際操作環境了﹕

  1. 參考一下 winNT+Linux 的 HowTO 說明文件。
  2. 以正常的方式安裝 Linux , 最後把 lilo 裝到 superblock 內﹐並記得製作一張 Linux 開機片。
    又或者﹕修改 /etc/lilo.conf ﹐將 boot= 修改成 super block 的位置﹐如﹕boot=/dev/hdaX 。注意﹕/dev/hdaX 就是你的 linux /boot 磁區(比方 hda2) 。
    然後執行一次 lilo ﹐確定沒有錯誤信息。
  3. 執行下面命令產生開機檔案﹕
    dd if=/dev/hda2 of=/bootsect.lnx bs=512 count=1
    (事實上﹐您也可以用 dd 來做開機磁片﹐將 of= 設定為 /dev/fd0 就可以了。)
  4. 把產生好的 bootsect.lnx 複製到你的 NT C:\ 的目錄下:
    mkdir /mnt/dos
    mount -t msdos /dev/hda1 /mnt/dos
    (如果不是 c:\ 不是 FAT16 格式﹐或許將 -t msdos 換成 -t vfat 或 ntfs﹐需要核心支援這些格式)
    cp /bootsect.lnx /mnt/dos/bootsect.lnx
  5. 退出 linux﹐啟動到 dos﹐然後執行﹕
    attrib -r -s -h c:\boot.ini
    edit c:\boot.ini
  6. 在 boot.ini 後面加入:
    c:\bootsect.lnx="Linux"
  7. 存檔﹐並執行﹕
    attrib +r +s +h c:\boot.ini
這樣﹐您就可以用 NT 的 Loader 來啟動 Linux 了。

除此之外﹐在新版的 RedHat 系統上﹐除了 LILO 之外還提供了另外的新開機管理程式﹐稱為 GRUB ( GRand Unified Bootloader ) 。如果您勇於嘗新﹐可以參考如下網頁﹕

Grub開機管理程式安裝簡介

上面是 Linuxcenter 網站的介紹文章﹐您當然可以到 GNU 網站獲得更多關於 GRUB 的資訊。

進行 Patch

前面所介紹的方法﹐是直接抓一個完整的核心回來重新編譯。除了這個方法之外﹐我們還可以使用另外一種方法來為核心進行升級的動作。就是用 patch 的方式進行。

假如您曾經溜灠過 www.kernel.org 的核心下載目錄﹐應該會發現一堆 patch-xxxx.xxx.xx 這樣的檔案﹐這些檔案都比較小﹔再仔細看看﹐它們的版本安排﹐非常有順序﹐這就對了﹕關鍵是它的版本順序。因為﹐幫 kernel 進行 patch 的時候﹐必須是逐個逐個版本 patch 上去的﹐期間不能跳過任何一個版本。

比方說﹐您目前的版本是 2.4.2﹐如果您要升級到 2.4.9﹐您有兩個方法﹕

  1. 直接抓 2.4.9 的完整核心回來編﹔
  2. 先抓 2.4.3 的 patch﹐升級到 2.4.3、然後在抓 2.4.4 的 patch﹐升級到 2.4.4﹐再來是抓 2.4.5、2.4.6、2.4.7、2.4.8、2.4.9 所有這些 patch 回來﹐也同樣可以升級到 2.4.9。

您會發現﹕如果您的版本落差太大﹐直接抓完整的核心回來比較省事一點﹔但如果版本落差不大﹐或許使用 patch 比較方便快捷。採用哪一種方式都可以﹐看您的情形和個人習慣了。不過﹐除了版本升級的時候需要 patch 之外﹐有時候﹐我們在增加一些核心額外的功能的時候﹐也可能需要使用到 patch。所以﹐這裡我們不妨看看如何為核心進行 patch 好了。

例如﹐您對 LinuxVirtualServer 這技術非常感興趣(請參考 http://www.linuxvirtualserver.org )﹐不過﹐它的功能卻需要您對核心進行 patch 才能使用得到﹕

  1. 您首先要做的事情﹐是將相關的 patch 下載回來﹕linux-2.4.9-ipvs-0.9.3.patch.gz (或是從本站 下載 )﹐當然﹐還要將它的應用程式也抓回來才有得玩﹐要不然﹐只是升級核心是沒有用的﹐因為沒有工具來應用用它﹕ipvsadm-1.19-1.src.rpm(或是從本站 下載 )。

    (不過﹐我們這裡主要介紹核心的 patch 而已﹐至於 ipvsadm 怎麼設定﹐可就超出我們這裡討論的範圍了。或許﹐日後有機會再來和大家一起切磋吧。)

  2. 當您的 patch 抓回來之後﹐請複製到 /usr/src/ 目錄中。

  3. 然後進行解壓﹕
    cd /usr/src
    tar zxvf linux-2.4.9-ipvs-0.9.3.patch.gz
    
    (這樣﹐您應該會獲得一個 linux-2.4.9-ipvs-0.9.3.patch 的檔案。)

  4. 接下來﹐就是對核心進行 patch 的動作了﹕
    cd /usr/src/linux
    patch -p1 < ../linux-2.4.9-ipvs-0.9.3.patch
    

    假如您沒碰到任何錯誤信息﹐而是跑出一大串 patching file xxx_xxx.xxx 的信息﹐那就完成 patch 了﹗

  5. 然後﹐您要執行 make menuconfig 命令﹐將 ipvsadm 的相關模組編譯出來﹕
    Networking options  --->
    	IP: Virtual Server Configuration  --- >
    		<M> virtual server support (EXPERIMENTAL) (NEW)
    		[*]   IP virtual server debugging (NEW)
    		(12)   IPVS connection table size 
    				(the Nth power of 2) (NEW)
    		--- IPVS scheduler
    		<M>   round-robin scheduling (NEW) 
    		<M>   weighted round-robin scheduling (NEW) 
    		<M>   least-connection scheduling scheduling (NEW)
    		<M>   weighted least-connection scheduling (NEW)
    		<M>   locality-based least-connection scheduling (NEW)
    		<M>   locality-based least-connection with replication 
    				scheduling (NEW) 
    		<M>   destination hashing scheduling (NEW) 
    		<M>   source hashing scheduling (NEW)
    		--- IPVS application helper
    		<M>   FTP protocol helper (NEW)   
    

  6. 接下來的動作﹐就是重新編譯您的核心和模組囉﹕
    make dep bzImage modules modules_install install 1>/dev/null
    

    您是否有留意到我這次的 make 沒有使用 clean 選項呢﹖如果您這次 patch 的核心﹐與前面介紹的那次編譯之間﹐沒進行過其它編譯的話﹐基本上不用清除原來的設定。因為這次 patch﹐我們單純是將‘額外’的功能補上而已﹐並沒動到其它任何部份。這樣的話﹐執行速度上會快很多﹐當然﹐如果您時間允許﹐而且力求保障﹐那就在 dep 之後加上 clean ﹐也未嘗不可。

最後﹐只要您重新開機﹐就獲得新的核心功能了。當然﹐如果您想用另外一個核心檔案和另外一個開機標籤的話﹐那就修改好 lilo.conf ﹐同時不要忘記執行 lilo 命令﹐然後才重新開機。

模組管理

當您在編譯核心的時候﹐那些選擇為“*” 就會被內建到核心裡面去﹐也就是開機之後隨著核心啟動而載入。至於那些選擇為“M”的項目﹐就會被編成模組﹐它可以由開機程式呼叫而載入﹐也可以由使用者啟動﹔同時﹐當它們不再需要的時候﹐也可以將之卸載。

Tips﹕在您執行 make modules_install 的時候﹐有一個問題要留意﹕假如在 /lib/moduels 目錄下面﹐已經有一個目錄的名稱﹐和您編譯的核心版本一樣的話﹐那最好就是先將它移除﹐或用 mv 改成備份。因為﹐如果您重新編譯的模組項目﹐或許和上次編的不一樣。

比方說﹐上次您將 A 編成模組﹐執行過 make modules_install﹐那它 A.o 就會存放到 /lib/modues/ 的相應版本子目錄中﹐但您這次將之改為內建﹐或是根本沒不編進核心中﹐您再執行 make moduels_install 的時候﹐A.o 應該不會被存放到那裡的﹐但它卻存放在那裡了。這樣的話﹐您在開機或建立模組相依資訊的時候﹐就會遇到錯誤信息。當然﹐您可以不理會﹐但常看到這些刺眼的句子跑出來﹐也實在不怎麼好受啦。

我們知道核心檔會存放到 /boot 目錄中﹐那模組呢﹖當您執行 make modules 命令之後﹐所有模組只產生在 /usr/src/linux 目下的一些子目錄裡面。您必須執行 make modules_install 才能將模組安裝到系統之上。存放這些模組的位置就在 /lib/modules/2.4.9 這個目錄之下﹐您不妨溜灠一下各個子目錄的內容﹐以了解系統可用模組有哪些﹖

在模組真正被使用之前﹐您必須為所有模組建立相依資訊﹐您可以執行 depmod 命令後接模組的名稱來建立﹐也可以用 depmod -a 一次過完成所有模組的相依性建立。這個動作﹐會更新 /lib/modules/2.4.9 目錄裡面的 modules.dep 檔案。如果您用 modprobe 來載入模組(後面介紹)﹐那這個檔必須存在﹐其內容也必須正確。 如果您進行 depmod 的時候碰到錯誤信息﹐通常會是一些 ‘xxxxx.yyyyy.xxxxxx.o: unrresolved symbol(s)’的錯誤﹐這裡也不打算詳細解析了﹐有興趣的話可以參閱這個聯結﹕http://bbs.ee.ntu.edu.tw/boards/Linux/4/8/1.html

如果您想看看目前有哪些模組被載入了﹐您可以輸入﹕
# lsmod
Module                  Size  Used by
ne2k-pci                5344   1  (autoclean)
ne                      7104   1  (autoclean)
8390                    6400   0  (autoclean) [ne2k-pci ne]
8139too                11872   1  (autoclean)
md                     42688   0  (unused)
sym53c8xx              57424   1

您會看到一堆模組的名字﹐還有它的大小﹐以及被哪些程式使用。如果是 unused 狀態的話(也就是 Used 為 0 的時候)﹐那表示該模組雖然載入了﹐但目前還沒有被任何程式所使用。然則﹐您可以用下一個命令將之移除。

假如您想將一些已經載入的模組移除的話﹐使用 rmmod 後接模組名字就可以了(例如﹕rmmod md )。如果您得到該模組正在使用中 (in used) 的信息﹐那麼先將相關的程式停掉﹐以及相關模組移除就是了。例如﹕
# rmmod sym53c8xx
sym53c8xx: Device or resource busy
# umount /mnt/cdrom1
# lsmod
Module                  Size  Used by
ne2k-pci                5344   1  (autoclean)
ne                      7104   1  (autoclean)
8390                    6400   0  (autoclean) [ne2k-pci ne]
8139too                11872   1  (autoclean)
md                     42688   0  (unused)
sym53c8xx              57424   0  (unused)
# rmmod sym53c8xx
# lsmod
Module                  Size  Used by
ne2k-pci                5344   1  (autoclean)
ne                      7104   1  (autoclean)
8390                    6400   0  (autoclean) [ne2k-pci ne]
8139too                11872   1  (autoclean)
md                     42688   0  (unused)

模組之所以靈活﹐就是因為它能隨時移除﹐也能隨時載入。如果您要載入模組的話﹐可以使用 insmodmodprobe 命令﹐後接模組名字來完成。假如您的模組路徑沒有設定正確的話(通常會指向 /lib/modules/下面)﹐那麼您就要加上路徑了﹐不過﹐這不是正常的現象。使用 insmod 和 modprobe 都可以將模組載入﹐它們的分別是﹕後者除了能載入指定模組外﹐連同它相關的必須模組也一同載入。至於哪些是相關的﹐這就是前面介紹的 depmod 必須要負責的事情了。

我們使用的模組﹐除了從核心裡面之間編譯之外﹐我們還可以抓模組的 source 回來自己編模組哦~~下面這個例子﹐是教您如何手工的為 D-Link 530TX 網路卡建立模組﹕

或許﹐您已經知道在您可以使用 via-rhine.o 來驅動 DL-530TX ﹐您不妨先試試﹐如果不行的話﹐再嘗試用以下的步驟﹕

  1. 到 D-Link 網站下載 linux530_321.tar 原始檔(或是從本站 下載 )。
  2. 將檔案複製到 /usr/src/dl530 目錄中。這時候如果您的 Linux 還不能連上網路﹐那就用磁片轉移過去吧。下面假設您從 Windows 將檔案下載回來﹐然後用磁片複製到 Linux 之上﹕
    mkdir /usr/src/dl530
    mount /mnt/floppy
    cp /mnt/floppy/linux530_321.tar /usr/src/dl530
  3. 將檔案解開﹕
    cd /usr/src/dl530
    tar xvf linux530_321.tar
  4. 用gcc 編譯模組﹕
    gcc -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes \
    -O6 -I/usr/src/linux/include -c via-rhine.c
    (注意﹕“-D__KERNEL__ ”裡面之“__”是連續兩個“_”符號﹐另外“O6”不是“零六”哦﹐是英文字母大寫“O”啦。)
    如無意外﹐應該會在當前目錄產生出 via-rhine.o 這個模組。(您也可以閱讀 readme 檔﹐使用 make all 的辦法來產生)
  5. 接著﹐請執行執行 uname -r 找出您所使用的核心版本﹐比方說﹕2.4.9﹐那您就使用這個 /lib/modules 的子目錄做為後面的路徑。
  6. 如果在 /lib/modules/2.4.9/net/ 下面已經有 via-rhine.o 的話﹐請將其改名﹕
    mv /lib/modules/2.4.9/kernel/drivers/net/via-rhine.o \
    /lib/modules/2.4.9/kernel/drivers/net/via-rhine.249.o
  7. 將編好的模組複製到正確的位置﹕
    cp via-rhine.o /lib/modules/2.4.9/kernel/drivers/net/
  8. 執行 netconf 並選擇 "Basic host information"﹐設定如下﹕
    	Host name + domain    rh71.siyongc.domain
    	                    ---------Adaptor 1-----------
    	                      [X] Enabled
    	Config mode           (o) Manual ( ) Dhcp ( ) Bootp
    	Primary name + domain rh71.siyongc.domain
    	Aliases (opt)         rh71
    	IP address            192.168.100.23
    	Netmask (opt)         255.255.255.0
    	Net device            eth0
    	Kernel module         via-rhine
    	I/O port (opt)                                   
    
  9. 檢查 /etc/modules.conf 檔﹐確定有如下句子﹕
    alias eth0 via-rhine
  10. 然後將模組掛入﹕
    insmod via-rhine
  11. 並用 lsmod 確認模組載入成功。
  12. 執行 mdesg | grep eth0 命令﹐確定系統有抓到網路卡之後﹐重新啟動網路﹕
    service network restart
  13. 查看網路設定﹕
    ifconfig
(註﹕因為我手邊的 DL530TX 網路卡都送人了﹐所以未能實地測試上面的設定和模組﹔ 同時﹐請您將主機名稱和 IP 位址修改為您實際的設定。)

測試核心

如果有問題﹐用磁片進行開機﹐然後重新檢查一下 /etc/lilo.conf 看看是否設定正確﹐如有修改﹐再執行一次 lilo。既然您可以用磁片開機﹐那麼新的核心就應該沒問題的﹐那通常是系統啟動的問題了。

如果遇到 Unresolved symbol 的錯誤信息﹐可能是舊的模組還在 /lib/modules 目錄之下﹐您應該用 uname -r 找出當前的核心版本﹐然後將相應的目錄改名﹐再執行一次 make modules_install 。同時﹐也可試試在編譯核心時﹐在 Loadable module support 那裡﹐取消 Set version information on all symbols for modules 的選擇。

有時候您出盡法寶都無法讓那些討厭的 Unresolved symbol 消失﹐要是那些模組並非必須的﹐那麼干脆從 /lib/modules 目錄下面將它移除就是了。當然﹐在編譯核心的時候選擇 no 也行。

編譯核心有時候會遇到許多麻煩﹐尤其是當您從一個舊的版本升級上來。建議您看看 kernel-HOWTO 和 modules mini-howto 之外﹐還應該看看 /usr/src/linux/Documentation 裡面的文章﹐尤其是 Changes、modules.txt、kmod.txt 等。而且﹐在編譯選項( make menuconfig )的過程中﹐關於任何不明白的設定﹐應該看看 Help 是怎麼說的﹐這非常重要。

 

 


www.study-area.org © 2001 Netman 網中人
Last Updated: Feb 05, 2002