第六章﹕編譯核心
时间:2006-09-09 来源:jmhyy
好了﹐當我們已經可以基本操控這台 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:[email protected]... > ※ 引述《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://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 |
完成之後﹐您應該會在 /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 |
這樣您就會產生一個‘linux’的目錄﹗注意哦﹕這個和您用 rpm 從 RH7.1 Disk2 的 CD 裝的目錄不一樣哦﹐如果您是用 CD 來裝的話﹐建議您建立一個 link﹕
ln -sf linux-2.4.2 linux |
無論您是用光碟的 rmp﹐還是下載回來的核心﹐最終我們都應該有一個‘/usr/src/linux’的目錄﹕如果原來已經有這樣一個目錄存在﹐而不是 link 的話﹐那就先用 mv 將它改一個名字吧。
當我們的目錄準備好之後﹐就是我們進行編譯的步驟了﹕
不過﹐編譯核心一點都不輕鬆﹐而且是相當費神費時的事情。幸好現在的機器越來越快﹐而且核心的編譯程式也好用多了。
- 首先確定您在安裝 Linux 時候準備的開機片可以工作﹐用它boot 一下就知道了﹐要確定您的 BIOS 裡面的開機順序是以“A”(即軟碟)為先。如您當初忘記了製作開機片﹐或磁片壞掉了﹐先在這裡自行做一張﹕
mkbootdisk --device /dev/fd0 `uname -r`
- 重新啟動機器﹐確定是用 bookdisk 開機的。然後用 root 身份進行登錄﹐並取出開機磁碟﹐貼好標籤﹐然後換一張新的磁碟進去。
- 然後﹐讓我們轉換到 /us/src/linux/Documentation/ 目錄裡面﹐看看裡面您認為需要了解的資訊﹐例如 Changes﹐modules.txt﹑Configure.help 和其它 .txt 檔。
- 當您閱讀完新 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 還原核心的原始設定了。(如果對核心的選項夠了解﹐可以複製一份設定檔﹐然後直接修改裡面的設定﹐是最快的方法﹗)
- 接下來﹐應該是最傷神的時候了﹐這裡﹐我們要面對一大堆的選擇。如果您不確定哪些需要﹐可以接受預設值﹐或是一股腦做成模組。當您不知道某應該項目是什麼意思﹐可以按‘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 這個檔﹐否則您會遇到錯誤。
- 當您完成選擇之後﹐按‘Exit’退出﹐看到“Do you wish to save your new kernel configuration?”﹐確定您選擇‘Yes’。
Tips﹕前面做了一大堆動作﹐無非為了一個目的﹕產生出 /usr/src/linux/.config 這個隱藏檔。除了 menuconfig 之外﹐透過 oldconfig﹑config﹑xconfig 也都可以產生(或修改)這個檔。甚至﹐您也可以直接從別的設定當複製過來﹐例如在原 CD 所帶的 source 版本中﹐您可以在 configs 這個目錄裡面找到廠商所使用的預設值。當然﹐您如果會手工設定它的話﹐直接編輯也行(小心不要改錯就是了。)
- 執行 ls /lib/modules 看看裡面有沒有一個目錄和編譯版本相同名字﹐如果有﹐用 ‘mv’命令將之改名﹐如﹕
mv /lib/modules/2.4.9 /lib/modules/2.4.9.bck
- 然後再為 /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
- 最後﹐請按順序輸入﹕
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)
Tips﹕上面的句子﹐您可以用一行代替﹕
make dep clean bzImage modules modules_install 1>/dev/null
在 make modules_install 之前﹐請先將 /lib/modules/ 目錄下面的相同版本子目錄移除掉﹐或改名。
- 這個過程比較需時﹐熒幕上會迅速的略過許多信息﹐有興趣可以看看﹐如果您不想看﹐那就將 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 呢。下面我粗略的將步驟列出來﹐具體情況要看您實際操作環境了﹕
- 參考一下 winNT+Linux 的 HowTO 說明文件。
- 以正常的方式安裝 Linux , 最後把 lilo 裝到 superblock 內﹐並記得製作一張 Linux 開機片。
又或者﹕修改 /etc/lilo.conf ﹐將 boot= 修改成 super block 的位置﹐如﹕boot=/dev/hdaX 。注意﹕/dev/hdaX 就是你的 linux /boot 磁區(比方 hda2) 。
然後執行一次 lilo ﹐確定沒有錯誤信息。 - 執行下面命令產生開機檔案﹕
dd if=/dev/hda2 of=/bootsect.lnx bs=512 count=1
(事實上﹐您也可以用 dd 來做開機磁片﹐將 of= 設定為 /dev/fd0 就可以了。) - 把產生好的 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 - 退出 linux﹐啟動到 dos﹐然後執行﹕
attrib -r -s -h c:\boot.ini
edit c:\boot.ini - 在 boot.ini 後面加入:
c:\bootsect.lnx="Linux" - 存檔﹐並執行﹕
attrib +r +s +h c:\boot.ini
除此之外﹐在新版的 RedHat 系統上﹐除了 LILO 之外還提供了另外的新開機管理程式﹐稱為 GRUB ( GRand Unified Bootloader ) 。如果您勇於嘗新﹐可以參考如下網頁﹕
Grub開機管理程式安裝簡介
上面是 Linuxcenter 網站的介紹文章﹐您當然可以到 GNU 網站獲得更多關於 GRUB 的資訊。
前面所介紹的方法﹐是直接抓一個完整的核心回來重新編譯。除了這個方法之外﹐我們還可以使用另外一種方法來為核心進行升級的動作。就是用 patch 的方式進行。
假如您曾經溜灠過 www.kernel.org 的核心下載目錄﹐應該會發現一堆 patch-xxxx.xxx.xx 這樣的檔案﹐這些檔案都比較小﹔再仔細看看﹐它們的版本安排﹐非常有順序﹐這就對了﹕關鍵是它的版本順序。因為﹐幫 kernel 進行 patch 的時候﹐必須是逐個逐個版本 patch 上去的﹐期間不能跳過任何一個版本。
比方說﹐您目前的版本是 2.4.2﹐如果您要升級到 2.4.9﹐您有兩個方法﹕
- 直接抓 2.4.9 的完整核心回來編﹔
- 先抓 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 才能使用得到﹕
- 您首先要做的事情﹐是將相關的 patch 下載回來﹕linux-2.4.9-ipvs-0.9.3.patch.gz (或是從本站 下載 )﹐當然﹐還要將它的應用程式也抓回來才有得玩﹐要不然﹐只是升級核心是沒有用的﹐因為沒有工具來應用用它﹕ipvsadm-1.19-1.src.rpm(或是從本站 下載 )。
(不過﹐我們這裡主要介紹核心的 patch 而已﹐至於 ipvsadm 怎麼設定﹐可就超出我們這裡討論的範圍了。或許﹐日後有機會再來和大家一起切磋吧。)
- 當您的 patch 抓回來之後﹐請複製到 /usr/src/ 目錄中。
- 然後進行解壓﹕
cd /usr/src tar zxvf linux-2.4.9-ipvs-0.9.3.patch.gz
- 接下來﹐就是對核心進行 patch 的動作了﹕
cd /usr/src/linux patch -p1 < ../linux-2.4.9-ipvs-0.9.3.patch
假如您沒碰到任何錯誤信息﹐而是跑出一大串 patching file xxx_xxx.xxx 的信息﹐那就完成 patch 了﹗
- 然後﹐您要執行 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)
- 接下來的動作﹐就是重新編譯您的核心和模組囉﹕
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) |
模組之所以靈活﹐就是因為它能隨時移除﹐也能隨時載入。如果您要載入模組的話﹐可以使用 insmod 或 modprobe 命令﹐後接模組名字來完成。假如您的模組路徑沒有設定正確的話(通常會指向 /lib/modules/下面)﹐那麼您就要加上路徑了﹐不過﹐這不是正常的現象。使用 insmod 和 modprobe 都可以將模組載入﹐它們的分別是﹕後者除了能載入指定模組外﹐連同它相關的必須模組也一同載入。至於哪些是相關的﹐這就是前面介紹的 depmod 必須要負責的事情了。
我們使用的模組﹐除了從核心裡面之間編譯之外﹐我們還可以抓模組的 source 回來自己編模組哦~~下面這個例子﹐是教您如何手工的為 D-Link 530TX 網路卡建立模組﹕
或許﹐您已經知道在您可以使用 via-rhine.o 來驅動 DL-530TX ﹐您不妨先試試﹐如果不行的話﹐再嘗試用以下的步驟﹕
- 到 D-Link 網站下載 linux530_321.tar 原始檔(或是從本站 下載 )。
- 將檔案複製到 /usr/src/dl530 目錄中。這時候如果您的 Linux 還不能連上網路﹐那就用磁片轉移過去吧。下面假設您從 Windows 將檔案下載回來﹐然後用磁片複製到 Linux 之上﹕
mkdir /usr/src/dl530
mount /mnt/floppy
cp /mnt/floppy/linux530_321.tar /usr/src/dl530 - 將檔案解開﹕
cd /usr/src/dl530
tar xvf linux530_321.tar - 用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 的辦法來產生) - 接著﹐請執行執行 uname -r 找出您所使用的核心版本﹐比方說﹕2.4.9﹐那您就使用這個 /lib/modules 的子目錄做為後面的路徑。
- 如果在 /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 - 將編好的模組複製到正確的位置﹕
cp via-rhine.o /lib/modules/2.4.9/kernel/drivers/net/ - 執行 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)
- 檢查 /etc/modules.conf 檔﹐確定有如下句子﹕
alias eth0 via-rhine - 然後將模組掛入﹕
insmod via-rhine - 並用 lsmod 確認模組載入成功。
- 執行 mdesg | grep eth0 命令﹐確定系統有抓到網路卡之後﹐重新啟動網路﹕
service network restart - 查看網路設定﹕
ifconfig
如果有問題﹐用磁片進行開機﹐然後重新檢查一下 /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 是怎麼說的﹐這非常重要。