Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25811
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -10
  • 用 户 组: 普通用户
  • 注册时间: 2017-05-25 14:48
文章分类

全部博文(25)

文章存档

2006年(25)

我的朋友

分类: LINUX

2006-09-09 11:40:54

好了﹐當我們已經可以基本操控這台 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 和風險評估﹐否則當您發現牽一髮動全身的時候﹐再臨急抱佛腳﹐恐為時已晚了。況且﹐許多隱藏性的問題﹐可能要等到積壓了某一時期之後才能浮現出來﹐這個恐怕更是讓人吃不了兜著走。

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

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

如果您使用的我們這裡用來作範例的 RedHat 7.1 套件﹐那您應該看到和我一模一樣的版本﹕2.4.2-2。想要獲得最新的核心版本資訊﹐不妨到 走走﹐說不定會滿載(指頻寬)而歸呢﹗上面有 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 -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’這樣的壓縮檔。目前﹐我在 所找到的最新版本是 2.4.9 ﹐請先將 這個檔案抄進 /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 進行選擇。
    
    	 Toshiba Laptop support
    	 /dev/cpu/microcode - Intel IA32 CPU microcode support
    	 /dev/cpu/*/msr - Model-specific register support
    	 /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  ---> 
    	 Parallel port support
    	# 如果您有使用平行埠﹐如接印表機﹐那就選吧。
    
    	   PC-style hardware (NEW)
    	     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
    	 XT hard disk support
    	 Parallel port IDE device support
    	--- Parallel IDE high-level drivers
    	   Parallel port IDE disks (NEW)   
    	   Parallel port ATAPI CD-ROMs (NEW) 
    	   Parallel port ATAPI disks (NEW)  
    	   Parallel port ATAPI tapes (NEW)     
    	   Parallel port generic ATAPI devices (NEW) 
    	--- Parallel IDE protocol modules    
    	     ATEN EH-100 protocol (NEW) 
    	     MicroSolutions backpack (Series 5) protocol (NEW)
    	     MicroSolutions backpack (Series 6) protocol (NEW) 
    	     DataStor Commuter protocol (NEW)   
    	     DataStor EP-2000 protocol (NEW)  
    	     FIT TD-2000 protocol (NEW)  
    	     FIT TD-3000 protocol (NEW)   
    	     Shuttle EPAT/EPEZ protocol (NEW) 
    	     Shuttle EPIA protocol (NEW) 
    	     Freecom IQ ASIC-2 protocol (NEW) 
    	     FreeCom power protocol (NEW) 
    	     KingByte KBIC-951A/971A protocols (NEW) 
    	     KT PHd protocol (NEW)   
    	     OnSpec 90c20 protocol (NEW) 
    	     OnSpec 90c26 protocol (NEW)  
    	 Compaq SMART2 support 
    	 Compaq Smart Array 5xxx support 
    	 Mylex DAC960/DAC1100 PCI RAID Controller support
    	<*> Loopback device support
    	# 這個建議做到核心去。
    
    	 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)
    	  RAID support
    	   Linear (append) mode
    	   RAID-0 (striping) mode
    	   RAID-1 (mirroring) mode
    	   RAID-4/RAID-5 mode
    	  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 接收路由資訊﹐請選擇。
    
    	   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 的伺服器﹐就不要選了。
    
    	   IP: tunneling
    	# 可以用來架設 VPN 哦﹐反正又是模組﹐幹嘛不選﹖
    
    	   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  ---> 
    		# 不是一大票人要玩封包過濾嗎﹖可別忘了打開這裡哦﹕
    		   Connection tracking (required for masq/NAT) (NEW) 
    		   FTP protocol support (NEW)
    		   IP tables support (required for filtering/masq/NAT) (NEW)
    		   limit match support (NEW)
    		   MAC address match support (NEW)
    		   netfilter MARK match support (NEW)
    		   Multiple port match support (NEW)
    		   TOS match support (NEW)
    		   tcpmss match support (NEW)
    		   Connection state match support (NEW)
    		   Packet filtering (NEW)
    		   REJECT target support (NEW) 
    		   Full NAT (NEW)
    		   MASQUERADE target support (NEW) 
    		   REDIRECT target support (NEW) 
    		   Packet mangling (NEW)
    		   TOS target support (NEW)
    		   MARK target support (NEW)
    		   LOG target support (NEW)
    		   TCPMSS target support (NEW)  
    		   ipchains (2.2-style) support (NEW) 
    		< >   ipfwadm (2.0-style) support (NEW) 
    		# 簡而言之﹐除非您確定不用﹐
    		# 這裡的東西全部都可以編為模組就是了。
    	--- 
    	  The IPX protocol
    	[*]   IPX: Full internal IPX network (NEW) 
    	# 要和 Novell 機器連接嗎﹖前兩項要選擇哦。
    
    	 Appletalk protocol support
    	# 還想和 mac 電腦連接﹖那也不能不選哦。
    
    	< > DECnet Support
    	 802.1d Ethernet Bridging 
    	# 如果您了解 802.1d 協定﹐
    	# 同時想用 Linux 當 Bridge﹐那就選吧。
    
    	QoS and/or fair queueing  ---> 
    		# 想玩流量控管﹐這裡的可不要忘了打開﹕
    		[*]   QoS and/or fair queueing
    		   CBQ packet scheduler (NEW) 
    		   CSZ packet scheduler (NEW)  
    		   The simplest PRIO pseudoscheduler (NEW) 
    		   RED queue (NEW)
    		   SFQ queue (NEW) 
    		   TEQL queue (NEW)
    		   TBF queue (NEW)
    		   GRED queue (NEW)
    		   Diffserv field marker (NEW) 
    		   Ingress Qdisc (NEW) 
    		[*]   QoS support (NEW) 
    		[*]   Rate estimator (NEW) 
    		[*]   Packet classifier API (NEW) 
    		   TC index classifier (NEW) 
    		   Routing table based classifier (NEW) 
    		   Firewall based classifier (NEW) 
    		   U32 classifier (NEW) 
    		   Special RSVP classifier (NEW)
    		   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 
    		   PCMCIA IDE support
    		<*>   Include IDE/ATAPI CDROM support 
    		   Include IDE/ATAPI TAPE support
    		   Include IDE/ATAPI FLOPPY support 
    		   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 控制卡所支援的硬碟數目可以超過這個值﹐可以調整這裡的數值。
    
    	   SCSI tape support
    	   SCSI OnStream SC-x0 tape support
    	   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)
    	   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 控制卡的型號的支援﹐
    		 NCR53C8XX SCSI support 
    		 SYM53C8XX SCSI support 
    		(4)   default tagged command queue depth  
    		(32)   maximum number of queued commands 
    		(20)   synchronous transfers frequency in MHz 
    		 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
    	# 這個我建議您編為內建﹐許多網路功能都會用到。
    
    	 Bonding driver support
    	# 如果您想用多張網路卡合併頻寬﹐模擬 Etherchannel 
    	# 和 Trunking 功能﹐那就選擇。
    	# 主意哦﹐支援此功能的 switch 很貴哦﹗
    
    	 EQL (serial line load balancing) support 
    	# 咦﹖可以合併多條 PPP 或 SLIP 頻寬﹖真的假的﹖
    	# 不妨試試看~~~	
    
    	 Universal TUN/TAP device driver support 
    	# 如果您沒有 tunX 或 tapX 設備﹐可以不設﹐
    	# 但﹐反正是模組嘛~~~
    
    	 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 的網路卡﹐就打開這裡吧。
    
    		     3c501 "EtherLink" support (NEW)
    		     3c503 "EtherLink II" support (NEW) 
    		     3c505 "EtherLink Plus" support (NEW) 
    		     3c509/3c529 (MCA)/3c579 "EtherLink III" support (NEW)
    		     3c515 ISA "Fast EtherLink" (NEW) 
    		     3c590/3c900 series (592/595/597) "Vortex/Boomerang" 
    					support (NEW)
    		# 不管﹐全部編成模組﹐說不定某天也有那麼好的福氣用名牌哦。
    
    		< >   AMD LANCE and PCnet (AT1500 and NE2100) support
    		[*]   Western Digital/SMC cards 
    		# 也難保證某天不會用到 Digital 的網路卡﹐反正模組嘛﹕
    
    		     WD80*3 support (NEW)
    		     SMC Ultra support (NEW) 
    		     SMC 9194 support (NEW) 
    		[ ]   Racal-Interlan (Micom) NI cards 
    		   DEPCA, DE10x, DE200, DE201, DE202, DE422 support
    		[*]   Other ISA cards
    		# 如果您手上還有 ISA 的舊網路卡﹐不要浪費哦。
    
    		     Cabletron E21xx support (NEW)
    		     EtherWORKS 3 (DE203, DE204, DE205) support (NEW)
    		     EtherExpress 16 support (NEW)
    		     EtherExpressPro support/EtherExpress 10 (i82595) 
    					support (NEW) 
    		     HP PCLAN+ (27247B and 27252A) support (NEW)
    		     HP PCLAN (27245 and other 27xxx series) support (NEW)
    		     ICL EtherTeam 16i/32 support (NEW)
    		     NE2000/NE1000 support (NEW) 
    		# 許多 ISA 網路卡﹐都支援 NE2000 的模組﹐
    		# 其它不選也要選這個。
    
    		[*]   EISA, VLB, PCI and on board controllers 
    		# 相信您的網路卡不會是非 PCI 的吧﹖
    
    		     AMD PCnet32 PCI support
    		     Apricot Xen-II on board Ethernet
    		     CS89x0 support
    		     DECchip Tulip (dc21x4x) PCI support 
    		# 您應該會看過 DEC 的網路卡吧﹖ 
    
    		[*]       Use PCI shared mem for NIC registers
    		     Generic DECchip & DIGITAL EtherWORKS PCI/EISA 
    		     Digi Intl. RightSwitch SE-X support
    		     Davicom DM910x/DM980x support
    		     EtherExpressPro/100 support 
    		# 居然核心內定就有 Intel 的這張卡﹗
    		# 太不公平了﹐改成模組﹐否則心裡不平衡 ^_^
    
    		     Myson MTD-8xx PCI Ethernet support  
    		     National Semiconductor DP8381x series PCI Ethernet support
    		     PCI NE2000 and clones support (see help)   
    		# 嗯﹐還有 PCI 的 NE2000 呢﹐
    		# 如果您的網路卡怎麼都找不到模組﹐不妨碰碰這個運氣。
    
    		     RealTek RTL-8139 PCI Fast Ethernet Adapter support 
    		# 呵~~ 俗稱‘便宜大碗’的螃蟹卡﹐就是使用這個模組的啦  ^_^
    
    		[ ]       Use PIO instead of MMIO  
    		[ ]       Support for older RTL-8129/8130 boards
    		# 如果您不確定您可以使用這兩個選擇﹐那就不要選擇﹐
    		# 否則可能會開不了機﹗
    
    		     SiS 900/7016 PCI Fast Ethernet Adapter support
    		     SMC EtherPower II  
    		     Sundance Alta support 
    		     TI ThunderLAN support 
    		     VIA Rhine support
    		# 唉~~ 那張惡名遠撥的 DL-530TX 網路卡﹐
    		# 有時候可以用這個模組哦。
    		# 後面我專門介紹如何裝這張惡卡﹗
    
    		     Winbond W89c840 Ethernet support 
    		# 嗯﹐Winbond 的和螃蟹卡一樣好裝﹗
    
    		[ ]   Pocket and portable adapters
    		# 如果您有口袋型網路卡(非 PCMCIA)﹐可以選擇其下的模組看看。
    
    	Ethernet (1000 Mbit)  --->
    		# 您什麼時候那麼好命啊﹖竟然連 Giga-bit 的網路都享受得到﹕
    
    		 Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support 
    		[ ]   Omit support for old Tigon I based AceNICs 
    		 D-Link DL2000-based Gigabit Ethernet support 
    		 Packet Engines Hamachi GNIC-II support
    		 SysKonnect SK-98xx support 
    	[ ] FDDI driver support 
    	# 目前來說﹐我是鐵定沒運氣用 FDDI 的了~~~
    
    	 PLIP (parallel port) support
    	<*> PPP (point-to-point protocol) support 
    	# 如果用 MODEM 撥接上網的話﹐這個一定要﹗
    	# 雖說這個也可以篇成模組﹐不過﹐目前還離不開 PPP﹐
    	# 尤其用撥接式 ADSL(PPPoE) ﹐不妨直接編進核心裡面﹐
    	# 除非您覺得這個會影響到核心的體積。
    
    	[*]   PPP filtering (NEW) 
    	# 看起來是不錯的功能哦﹐試試看﹖可惜不能編成模組。
    
    	   PPP support for async serial ports (NEW) 
    	   PPP support for sync tty ports (NEW) 
    	   PPP Deflate compression (NEW)  
    	   PPP BSD-Compress compression (NEW) 
    	 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) 
    		   STRIP (Metricom starmode radio IP) (NEW)  
    		   AT&T WaveLAN & DEC RoamAbout DS support (NEW)
    		   Aironet Arlan 655 & IC2200 DS support (NEW)  
    		   Aironet 4500/4800 series adapters (NEW)
    		    Aironet 4500/4800 ISA/PCI/PNP/365 support 
    		[*]      Aironet 4500/4800 PNP support  (NEW)
    		[*]      Aironet 4500/4800 PCI support  (NEW)
    		    Aironet 4500/4800 PROC interface 
    		   Cisco/Aironet 34X/35X/4500/4800 ISA and PCI 
    				cards (NEW)
    		--- Wireless Pcmcia cards support 
    		   Hermes support (Orinoco/WavelanIEEE/PrismII/
    				Symbol 802.11b 
    				cards) (NEW)
    		   Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards (NEW) 
    		# 上面有幾個一定要內建﹐如果計較的話﹐應該不選。
    
    	Token Ring devices  --->
    		[ ] Token Ring driver support 
    		# 這玩意﹐看來我也沒什麼機會玩的了~~
    
    	[*] Fibre Channel driver support
    	   Interphase 5526 Tachyon chipset based adapter support (NEW)
    	# 搞不好您還真的這麼有福氣﹐用得到 FC 哦。
    	# 不過﹐我目前看來應該沒此機會的了。
    	# 上兩項也只作範例參考﹐實際上我並沒安裝。
    
    	Wan interfaces  --->
    		[*] Wan interfaces support 
    		# 知道一個 router 有多貴嗎﹖
    		# 居然小小的 Linux 也能玩 WAN﹖真的假的﹖
    		# 這項我沒選﹐下面僅作例子﹕
    
    		   Comtrol Hostess SV-11 support (NEW)
    		   COSA/SRP sync serial boards support (NEW) 
    		   MultiGate (COMX) synchronous serial boards support (NEW) 
    		     Support for COMX/CMX/HiCOMX boards (NEW) 
    		     Support for LoCOMX board (NEW)
    		     Support for MixCOM board (NEW)  
    		     Support for HDLC and syncPPP protocols on MultiGate 
    					boards (NEW) 
    		     Support for Frame Relay on MultiGate boards (NEW)
    		   Etinc PCISYNC serial board support (EXPERIMENTAL) (NEW) 
    		   FarSync T-Series X.21 (and V.35/V.24) cards (NEW) 
    		   LanMedia Corp. SSI/V.35, T1/E1, HSSI, T3 boards (NEW) 
    		   Sealevel Systems 4021 support (NEW)
    		   SyncLink HDLC/SYNCPPP support (NEW)
    		   Generic HDLC driver (NEW) 
    		[*]     Synchronous Point-to-Point Protocol (PPP) support (NEW)  
    		---     X.25/LAPB support is disabled 
    		     SDL RISCom/N2 support (NEW) 
    		     Moxa C101 support (NEW) 
    		   Frame relay DLCI support (NEW)
    		(24)     Max open DLCI (NEW) 
    		(8)     Max DLCI per device (NEW)
    		     SDLA (Sangoma S502/S508) support (NEW) 
    		[*]   WAN router drivers (NEW) 
    		     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)
    		   Granch SBNI12 Leased Line adapter support (NEW)
    		[*]     Multiple line feature support (NEW) 
    		# 以上僅做範例參考﹐如果真的沒此需要﹐不用理會。
    
    	PCMCIA network device support  ---> 
    		[*] PCMCIA network device support
    		# 有用 notebook 嗎﹖不妨考慮這裡的模組﹕
    		# (我現在是用 desktop ﹐所以沒裝)
    
    		   3Com 3c589 PCMCIA support 
    		   3Com 3c574 PCMCIA support
    		   Fujitsu FMV-J18x PCMCIA support
    		   NE2000 compatible PCMCIA support 
    		# 說實在話﹐支援 Linux 的 PCMCIA 不見得很多﹐
    		# 或將 NE2000 編為模組﹐
    		# 日後找 pcnet_cs.o 這個模組來碰碰運氣。
    
    		   New Media PCMCIA support
    		   SMC 91Cxx PCMCIA support
    		   Xircom 16-bit PCMCIA support
    		   Xircom Tulip-like CardBus support 
    		[*]   Pcmcia Wireless LAN
    		     Aviator/Raytheon 2.4MHz wireless support 
    		     Xircom Netwave AirSurfer wireless support 
    		     AT&T/Lucent Wavelan wireless support 
    		     Aironet 4500/4800 PCMCIA support 
    		# 還有無線 PCMCIA 網路卡呢﹗還真不錯。
    
    # 以上都是網路設備的設定﹐
    # 看得出來﹐我似乎對它們情有獨鐘﹐
    # 或許是因為我是網中人的緣故吧 ^_^
    
    Amateur Radio support  --->
    	[ ] Amateur Radio support 
    	# 實在話﹐我也不知道 amateur radio 是什麼﹖
    
    IrDA (infrared) support  --->
    	 IrDA subsystem support
    	# 紅外線裝置﹖好玩意哦~~ 一般的 notebook 都有﹐
    	# 不過﹐我的 Desktop 是沒有的啦。
    	# 所以我這裡也沒裝﹐僅供參考﹕
    
    	--- IrDA protocols
    	   IrLAN protocol (NEW) 
    	   IrNET protocol (NEW)
    	   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 
    		 IrTTY (uses Linux serial driver) (NEW) 
    		 IrPORT (IrDA serial driver) (NEW) 
    		--- Dongle support
    		[*] Serial dongle support (NEW)
    		   ESI JetEye PC dongle (NEW)
    		   ACTiSYS IR-220L and IR220L+ dongle (NEW)
    		   Tekram IrMate 210B dongle (NEW)
    		   Greenwich GIrBIL dongle (NEW)
    		   Parallax LiteLink dongle (NEW) 
    		   Old Belkin dongle (NEW) 
    		--- FIR device drivers 
    		 NSC PC87108/PC87338 (NEW)
    		 Winbond W83977AF (IR) (NEW)
    		 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 的設備﹐可以考慮﹕
    
    	 Input core support 
    	   Keyboard support (NEW) 
    	   Mouse support (NEW)
    	(1024)    Horizontal screen resolution (NEW) 
    	(768)    Vertical screen resolution (NEW)
    	   Joystick support (NEW)
    	   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)
    	 Parallel printer support 
    	# 除非您沒有平行埠的印表機﹐否則不要忘了打開。
    
    	[*]   Support for console on line printer (NEW) 
    	# 可以將核心送出來的資訊直接列印哦。
    
    	 Support for user-space parallel port device drivers 
    	# 不確定是什麼﹐反正模組嘛~~
    
    	I2C support  --->
    		 I2C support
    		 I2C bit-banging interfaces (NEW)
    		   Philips style parallel port adapter (NEW)
    		   ELV adapter (NEW)
    		   Velleman K9000 adapter (NEW)
    		 I2C PCF 8584 interfaces (NEW) 
    		   Elektor ISA card (NEW)
    		 I2C device interface (NEW) 
    		# 老話﹕反正模組嘛~~ 
    		# 不過﹐如您不玩那些古怪的玩意﹐應該不用理會啦。
    
    	Mice  ---> 
    		 Bus Mouse Support
    		   ATIXL busmouse support (NEW) 
    		   Logitech busmouse support (NEW)
    		   Microsoft busmouse support (NEW) 
    		<*> Mouse Support (not serial and bus mice)
    		[*]   PS/2 mouse (aka "auxiliary device") support 
    		   C&T 82C710 mouse port support (as 
    				on TI Travelmate)  
    		   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 
    		# 看起來是網路重啟的設備﹐雖然我對網路設備都很偏心﹐
    		# 不過它似乎要內建﹐而且目前也看不出我會用得到﹐
    		# 也就不管了。
    
    	 Intel i8x0 Random Number Generator support 
    	 /dev/nvram support
    	 Enhanced Real Time Clock Support
    	 Double Talk PC internal speech card support 
    	 Siemens R3964 line discipline
    	 Applicom intelligent fieldbus card support  
    	# 以上這些被選﹐都是因為是模組之故。
    
    	Ftape, the floppy tape device driver  ---> 
    		 Ftape (QIC-80/Travan) support
    		   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)
    	   3dfx Banshee/Voodoo3+
    	   3dlabs GMX 2000 
    	   ATI Rage 128
    	   ATI Radeon 
    	   Intel I810
    	   Matrox g200/g400 
    	# 如果可以編為模組﹐就編進模組。
    	# 如果確定不會用到特別型號的顯示卡﹐那就不用選擇。
    
    	PCMCIA character devices  ---> 
    		 PCMCIA serial device support 
    		# 模組嘛~~
    
    Multimedia devices  --->
    	 Video For Linux
    	# 有影/音擷取卡嗎﹖不妨試試。
    
    	Video For Linux  --->
    		[*]   V4L information in proc filesystem (NEW)
    		   I2C on parallel port (NEW)
    		--- Video Adapters
    		   BT848 Video For Linux (NEW)
    		   Mediavision Pro Movie Studio Video For Linux (NEW)
    		   Quickcam BW Video For Linux (NEW)
    		   CPiA Video For Linux (NEW) 
    		     CPiA Parallel Port Lowlevel Support (NEW)
    		     CPiA USB Lowlevel Support (NEW)
    		   SAA5249 Teletext processor (NEW)
    		   SAB3036 tuner (NEW)
    		   Zoran ZR36057/36060 Video For Linux (NEW)
    		   Zoran ZR36120/36125 Video For Linux (NEW) 
    		# 我是有張很古老的﹐不知道是否可以呢﹖
    
    	Radio Adapters  ---> 
    		   ADS Cadet AM/FM Tuner (NEW)
    		   AIMSlab RadioTrack (aka RadioReveal) support (NEW)
    		   AIMSlab RadioTrack II support (NEW)
    		   Aztech/Packard Bell Radio (NEW)
    		   GemTek Radio Card support (NEW)
    		   GemTek PCI Radio Card support (NEW)
    		   Guillemot MAXI Radio FM 2000 radio (NEW) 
    		   Maestro on board radio (NEW)
    		< >   miroSOUND PCM20 radio (NEW) 
    		# 這個不能選﹐因為我發現在編譯的時候編不下去。
    		# 不知道是什麼原因啦~~~
    		
    		   SF16FMI Radio (NEW)
    		   TerraTec ActiveRadio ISA Standalone (NEW) 
    		   Trust FM radio card (NEW) 
    		   Typhoon Radio (a.k.a. EcoRadio) (NEW)
    		[ ]     Support for /proc/radio-typhoon (NEW) 
    		   Zoltrix Radio (NEW)  
    		# 除了內建外﹐都編成模組了。
    		# 不過﹐如果確定不玩這東西﹐那也不用理會。
    		# 有時候﹐這些新玩意在編譯模組的時候﹐
    		# 會遇到奇怪的錯誤﹐那就回來取消它們吧。
    		# (像 miroSOUND 的 PCM20﹐
    		# 會出現 Unrsolved symbols 的問題)
    
    File systems  --->
    	[*] Quota support
    	# 要設定 quota 的話﹐一定要選。
    
    	<*> Kernel automounter support 
    	<*> Kernel automounter version 4 support (also supports v3)
    	# 如果打算玩 automount﹐請選擇。
    
    	 DOS FAT fs support
    	   MSDOS fs support
    	     UMSDOS: Unix-like file system on top of standard MSDOS fs 
    	   VFAT (Windows-95) fs support 
    	# 相信很多人的機器上還有 MS Windows 吧﹖
    
    	 Compressed ROM file system support 
    	[*] Virtual memory file system support (former shm fs)
    	 Simple RAM-based file system support
    	<*> ISO 9660 CDROM file system support 
    	# 標準的 CDROM 格式﹐不能不選。
    
    	[*]   Microsoft Joliet CDROM extensions 
    	# 這個格式的 CDROM 也蠻多的。
    
    	 Minix fs support
    	 FreeVxFS file system support (VERITAS VxFS(TM) compatible)
    	 NTFS file system support (read only) 
    	# 讀取 NT 的檔案系統(唯讀)﹐
    	# 不過﹐我在編譯的時候﹐無論是內建或模組都失敗。
    	# 然而﹐您可以手工修改 /usr/src/linux/fs/ntfs/unistr.c﹐
    	# 找到下面的第一和第三行句子﹐加上中間那行就可以了﹕
    	# #include 
    	# #include 
    	# #include 
    	# (要保留 # 符號哦)
    	# 否則不要選。
    
    	 OS/2 HPFS file system support  
    	[*] /proc file system support
    	# 這個是核心自己使用的﹐一定要選。
    
    	[*] /dev/pts file system for Unix98 PTYs 
    	 ROM file system support 
    	<*> Second extended fs support 
    	# 這是 Linux 預設的檔案格式﹐不能不選。
    	# RH7.2 已經用 EXT3 了﹐
    	# 不過我不知道如何編譯 EXT3。
    
    	 System V/Xenix/V7/Coherent file system support
    	 UDF file system support (read only) 
    	 UFS file system support (read only) 
    	# 上面的﹐基本是預設內建的﹐
    	# 我都沒碰﹐能模組的就模組吧。
    
    	Network File Systems  ---> 
    		 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
    
    		 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
    
    		 Codepage 437 (United States, Canada) (NEW) 
    		 Codepage 737 (Greek) (NEW) 
    		 Codepage 775 (Baltic Rim) (NEW) 
    		 Codepage 850 (Europe) (NEW)
    		 Codepage 852 (Central/Eastern Europe) (NEW) 
    		 Codepage 855 (Cyrillic) (NEW)
    		 Codepage 857 (Turkish) (NEW)  
    		 Codepage 860 (Portuguese) (NEW) 
    		 Codepage 861 (Icelandic) (NEW) 
    		 Codepage 862 (Hebrew) (NEW)
    		 Codepage 863 (Canadian French) (NEW)
    		 Codepage 864 (Arabic) (NEW) 
    		 Codepage 865 (Norwegian, Danish) (NEW) 
    		 Codepage 866 (Cyrillic/Russian) (NEW) 
    		 Codepage 869 (Greek) (NEW)
    		 Simplified Chinese charset (CP936, GB2312) (NEW)
    		<*> Traditional Chinese charset (Big5) (NEW) 
    		 Japanese charsets (Shift-JIS, EUC-JP) (NEW)
    		 Korean charset (CP949, EUC-KR) (NEW) 
    		 Thai charset (CP874, TIS-620) (NEW)
    		 Hebrew charsets (ISO-8859-8, CP1255) (NEW) 
    		 Windows CP1251 (Bulgarian, Belarusian) (NEW)
    		<*> NLS ISO 8859-1  (Latin 1; Western European 
    				Languages) (NEW)
    		 NLS ISO 8859-2  (Latin 2; Slavic/Central European 
    				Languages) (NEW)
    		 NLS ISO 8859-3  (Latin 3; Esperanto, Galician, 
    				Maltese, Turkish) (NEW)
    		 NLS ISO 8859-4  (Latin 4; old Baltic charset) (NEW)
    		 NLS ISO 8859-5  (Cyrillic) (NEW) 
    		 NLS ISO 8859-6  (Arabic) (NEW) 
    		 NLS ISO 8859-7  (Modern Greek) (NEW) 
    		 NLS ISO 8859-9  (Latin 5; Turkish) (NEW)
    		 NLS ISO 8859-13 (Latin 7; Baltic) (NEW)
    		 NLS ISO 8859-14 (Latin 8; Celtic) (NEW) 
    		 NLS ISO 8859-15 (Latin 9; Western European Languages 
    				with Euro) (NEW)
    		 NLS KOI8-R (Russian) (NEW) 
    		 NLS KOI8-U/RU (Ukrainian, Belarusian) (NEW)
    		 NLS UTF8 (NEW) 
    		# 上面這些﹐除了繁體中文和 ISO 8859-1 編為內建之外﹐
    		# 其它的我都選為模組了﹐也建議您如此。
    		# 要不然以後讀到某些編碼的文章﹐再回來重編可不好玩。
    
    Console drivers  --->
    	[*] VGA text console
    	[*] Video mode selection support 
    	# 可以讓您在核心開機的時候﹐設定顯示解析度。
    	# 如果您認為沒必要的話﹐第 2 個可以不要。
    	
    	Frame-buffer support  --->
    	# 這就是傳說中的神情 FB 了﹗
    	# 據說可以讓您在找不到最新 AGP 顯示驅動程式的情況下﹐
    	# 仍能殺出條血路。不過﹐我沒玩過~~  ^_^
    
    Sound  --->
    	 Sound card support
    	# 強烈建議您改為模組﹐否則日後用不了 sndconfig 工具。
    	# 在 Linux 裡面設定音效卡可沒 windows 那麼容易哦﹗
    
    	   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)
    	   Creative SBLive! (EMU10K1)
    	   Creative Ensoniq AudioPCI 97 (ES1371) 
    	     100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) 
    				support (NEW) 
    	     AWE32 synth (NEW)
    	     Yamaha FM synthesizer (YM3812/OPL-3) support
    	     Yamaha OPL3-SA1 audio controller
    	     Yamaha OPL3-SA2 and SA3 based PnP cards
    	     Yamaha YMF7xx PCI audio (native mode)
    	[*]       Yamaha PCI legacy ports support
    	     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
    	   OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
    	--- USB Device Class drivers
    	   USB Audio support 
    	   USB Mass Storage support
    	[ ]     USB Mass Storage verbose debug
    	[ ]     Freecom USB/ATAPI Bridge support
    	[ ]     Microtech CompactFlash/SmartMedia reader
    	   USB Modem (CDC ACM) support 
    	   USB Printer support
    	--- USB Human Interface Devices (HID)
    	   USB Human Interface Device (full HID) support
    	   USB HIDBP Keyboard (basic) support
    	   USB HIDBP Mouse (basic) support
    	   Wacom Intuos/Graphire tablet support 
    	--- USB Imaging devices
    	   USB Kodak DC-2xx Camera support
    	   USB Scanner support
    	   Microtek X6USB scanner support
    	--- USB Multimedia devices
    	   USB IBM (Xirlink) C-it Camera support
    	   USB OV511 Camera support
    	   USB Philips Cameras
    	   USB SE401 Camera support
    	   DABUSB driver 
    	--- USB Network adaptors 
    	--- USB port drivers
    	   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 是 “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 ) 。如果您勇於嘗新﹐可以參考如下網頁﹕

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

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

假如您曾經溜灠過 的核心下載目錄﹐應該會發現一堆 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 這技術非常感興趣(請參考 )﹐不過﹐它的功能卻需要您對核心進行 patch 才能使用得到﹕

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

    (不過﹐我們這裡主要介紹核心的 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  --- >
    		 virtual server support (EXPERIMENTAL) (NEW)
    		[*]   IP virtual server debugging (NEW)
    		(12)   IPVS connection table size 
    				(the Nth power of 2) (NEW)
    		--- IPVS scheduler
    		   round-robin scheduling (NEW) 
    		   weighted round-robin scheduling (NEW) 
    		   least-connection scheduling scheduling (NEW)
    		   weighted least-connection scheduling (NEW)
    		   locality-based least-connection scheduling (NEW)
    		   locality-based least-connection with replication 
    				scheduling (NEW) 
    		   destination hashing scheduling (NEW) 
    		   source hashing scheduling (NEW)
    		--- IPVS application helper
    		   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)’的錯誤﹐這裡也不打算詳細解析了﹐有興趣的話可以參閱這個聯結﹕ 。

如果您想看看目前有哪些模組被載入了﹐您可以輸入﹕

# 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 網站下載 原始檔(或是從本站 )。
  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 是怎麼說的﹐這非常重要。

阅读(3148) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~