好了﹐當我們已經可以基本操控這台 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 核心的版本號碼上面﹐就隱含著一些重要的資訊。先讓我們看看您目前使用的核心版本吧﹕
不知道您對這這些數字有何認識呢﹖不知道不要緊﹐讓我告訴您吧﹕
<主版本>.<次版本>.<修訂版本>-<副版本>
然後﹐再讓我們看看核心版本的維護流程﹕
kernel
2.2.0
|
V
2.2.1
:
|
V Kernel
2.2.8 ---> 2.3.0
| |
V V
2.2.9 2.3.1
: :
| |
V V Kernel
2.2.60 ... ---> 2.4.0
|
V Kernel
: ---> 2.5.0
| |
V V
: :
事實上﹐在眾多的核心版本中﹐我們需要特別留意的是第二個數字﹐也就是次版本的號碼﹕
- 如果它是一個奇數﹐那這個版本是實驗性的版本﹐或許有些新的設備和功能能夠在這個種版本找到﹐但因為尚處於開發期﹐不能保證其穩定性和安全性。無論如何﹐不建議在真正用來工作的系統上面安裝實驗性的核心版本。例如﹕2.1.1、2.3.2、2.3.3、2.5.0 ....
- 如果它是一個偶數﹐基本上﹐該版本已經獲得一定程度的測試和肯定﹐已趨於穩定和可靠的狀態。如果您的系統是真正用來工作的﹐只建議安裝穩定的核心版本。例如﹕2.2.1、2.2.17、2.4.2、2.4.9 ....
無論如何﹐當新核心推出之後﹐都不建議立即在真正工作的系統上面應用﹐尤其是在商業機構中﹐不要拿營運中的系統來做白老鼠。就算您獲得一個被認為是穩定的版本﹐也應該經過反復的測試﹐以及隨時留意核心團體所公佈的最新資訊。只有經過一段時期和廣泛的應用與回報﹐再加上自己的嚴格測試之後﹐才能決定是否要應用在工作的環境中。
事實上﹐更新核心不是為了幹時髦﹐您必須很清楚您的需要是什麼﹐假如當前核心已經能應付您的需要﹐那就繼續保留它就是了。下面這篇文章﹐是小州兄的建言﹐非常有代表性﹐希望大家能深切領會其中的要旨﹕
"小州" 撰寫於郵件
news:3iFIVR$84V@bbs.cynix.com.tw...
> ※ 引述《asho (阿信)》之銘言:
> > 這樣是否因為沒有最佳化
> > cpu以及週邊的關係ㄋ
> > 我想...如果編譯核心的時候
> > 不選duron而選x86系列ㄉ話
> > 效能應該會打折扣吧
>
> 我會去 compile kernel,一般來說只因為:
>
> 1. 你抓取新版 kernel source,當然你就需要自己編譯。
>
> 2. 雖然目前 kernel 在 linux dist 出廠時都盡可能編入需要的項目
> 到核心內,其他項目都選擇編譯成為 module 可以事後掛入。若是
> 很巧你用的週邊裝置該好很冷僻,預先編譯好的 kernel 既沒把你
> 需要的項目編入核心,也沒有編譯成為 module,這時候才需要
> 自己重新編譯核心。
>
> 3. 特殊環境使用....
>
> 重新編譯 kernel 並不會提昇效能,recompile kernel 最多只是調選
> 自己需要的項目編譯核心或者是編譯成為模組來使用。也許在選擇
> 編譯核心項目時,把 cpu 等級選好一點,那編譯出來的 kernel 是針對
> 該 cpu 最佳化編譯,但是整體增加效能百分比卻是很低,比方可能增加了
> 1 ~ 3 %,這對於目前的 cpu 來說,其實也沒有大幅度增快多少。
>
> 若是你用 mandrake,他全部 package 都是針對 pentium 的系統
> 編譯程式,那整體效率上的確才會比一般 linux dist 的 package 都是用
> i386 指令集的程式套件快上許多。
>
> 至於編譯核心時,留下這台機器需要的,其他根本不用的不編入。像是
> 一般 linux dist 可能預先編譯好的 kernel 是支援 qos 機制,若是
> 不需要該機制,拿掉也許能夠減少一些編出來的 kernel image 大小,
> 但是這並不會增加系統效能..... 不過對於以前古老環境來說,當時
> 記憶體不多,而且那時候模組化還不成熟的年代,讓 kernel image 變小
> 一點,是可以減少一些記憶體耗費,但是對於目前其實都是不需要去擔心。
|
另外﹐還有一個地方要留意的﹕就是您目前使用的應用程式和新版核心之間的兼容性如何﹖其中最頭痛的地方莫過於 Library 的更新。因為 Library 是核心和程式之間的主要溝通界面﹐實在有太多的程式需要使用到 Library 提供的函式庫。如果單純為了升級某一個套件﹐而需要更新 Library 版本的話﹐在很大程度上也會牽涉到核心版本的升級﹔但其它應用程式是否能使用新版的 Library 卻是個非常棘手的難題。調過來說﹐如果您單純為了某一核心功能而升級核心﹐而導致所有 Library 和應用程式都必須更新﹐您必須有足夠的 study 和風險評估﹐否則當您發現牽一髮動全身的時候﹐再臨急抱佛腳﹐恐為時已晚了。況且﹐許多隱藏性的問題﹐可能要等到積壓了某一時期之後才能浮現出來﹐這個恐怕更是讓人吃不了兜著走。
無論如何﹐如果您覺得要升級核心的話﹐三思而後行﹗
取得 source
Linux核心的發展﹐可以說是相當迅速的﹐其版本更新反而有時候讓人覺得受不了呢。
如果您使用的我們這裡用來作範例的 RedHat 7.1 套件﹐那您應該看到和我一模一樣的版本﹕2.4.2-2。想要獲得最新的核心版本資訊﹐不妨到 http://www.kernel.org/ 走走﹐說不定會滿載(指頻寬)而歸呢﹗上面有 http 和 ftp 的下載選擇﹐如果您是用網頁瀏覽器的話﹐建議用 http 模式﹔如果您習慣了 ftp 界面﹐那就用 ftp 好了。
以小弟經驗看﹐最好是在系統安裝完畢之後﹐馬上就進行核心編譯工作﹐免得以後每次裝一些特定功能的時候又要花一大輪時間編譯。當然了﹐我是假設您如我在“安裝 Linux”文章中所說的﹕已經明確知道自己的系統要用來做什麼的。例如﹐您打算架設 NAT 和 QoS﹐並且閱讀過文件﹐明確知道要將什麼東西編譯進核心裡面。當然﹐如果您不怕花時間﹐每裝一次服務就重新編譯一次核心﹐也未嘗不可。只是﹐當您真的有過幾次核心編譯經驗之後﹐我相信您巴不得一次過就將核心編好﹐最好還是別人已經編好﹐然後送一個現成的過來﹗呵呵~~ 我常會在編核心的是許這樣的願望哦~~ ^_^
如果您不是到網路上抓最新的核心﹐但當初安裝的時候又不是選擇 everything﹐而且也沒選擇 Development Tools (kernel source) ﹐那您也可以使用安裝光碟帶來的核心版本 (RH7.1 是在 Disk2 上面)。當您將光碟 mount 好之後﹐然後轉到這個目錄去﹕﹕
cd /mnt/cdrom/RedHat/RMPS
|
然後將 kernel-source 的 rpm 裝上。別說您不會使用 rpm 哦﹐果真的話﹐請往前面翻看看程式管理 (RPM)再回來﹕
rpm -Uvh kernel-source-2.4.2-2.i386.rpm
|
(如果您看到錯誤信息顯示您還需要其他程式﹐一一裝好它們的 rpm 後再來安裝 kernel-source 的rpm。)
完成之後﹐您應該會在 /usr/src/ 目錄裡面看到一個 linux-2.4.2 的子目錄。這就是剛纔的 rpm 程式幹的好事了﹗
如果您的核心是從 internet 上面下載回來的﹐通常會是‘.tar.gz’或‘.tar.bz2’這樣的壓縮檔。目前﹐我在 http://www.kernel.org/pub/linux/kernel/v2.4/ 所找到的最新版本是 2.4.9 ﹐請先將 linux-2.4.9.tar.bz2 這個檔案抄進 /usr/src 再進行解壓﹕
tar Ixvf linux-2.4.9.tar.bz2
|
(因為這是 bz2 的壓縮﹐所以用 I 參數﹐如果您抓的是 gz 格式﹐就用 z 參數吧。)
這樣您就會產生一個‘linux’的目錄﹗注意哦﹕這個和您用 rpm 從 RH7.1 Disk2 的 CD 裝的目錄不一樣哦﹐如果您是用 CD 來裝的話﹐建議您建立一個 link﹕
無論您是用光碟的 rmp﹐還是下載回來的核心﹐最終我們都應該有一個‘/usr/src/linux’的目錄﹕如果原來已經有這樣一個目錄存在﹐而不是 link 的話﹐那就先用 mv 將它改一個名字吧。
當我們的目錄準備好之後﹐就是我們進行編譯的步驟了﹕
進行編譯
不過﹐編譯核心一點都不輕鬆﹐而且是相當費神費時的事情。幸好現在的機器越來越快﹐而且核心的編譯程式也好用多了。
- 首先確定您在安裝 Linux 時候準備的開機片可以工作﹐用它boot 一下就知道了﹐要確定您的 BIOS 裡面的開機順序是以“A”(即軟碟)為先。如您當初忘記了製作開機片﹐或磁片壞掉了﹐先在這裡自行做一張﹕
mkbootdisk --device /dev/fd0 `uname -r`
|
(用 uname -r 命令是找出您當前的核心版本﹐如果您確定是 2.4.2-2 ﹐ 那可以直接用版本號碼來代替。)
- 重新啟動機器﹐確定是用 bookdisk 開機的。然後用 root 身份進行登錄﹐並取出開機磁碟﹐貼好標籤﹐然後換一張新的磁碟進去。
- 然後﹐讓我們轉換到 /us/src/linux/Documentation/ 目錄裡面﹐看看裡面您認為需要了解的資訊﹐例如 Changes﹐modules.txt、Configure.help 和其它 .txt 檔。
- 當您閱讀完新 kernel 的重要資訊之後﹐然後回到 /usr/src/linux 目錄﹐並輸入﹕
如果在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)
|
(注意﹕bzImage 的‘i’為大寫)
Tips﹕上面的句子﹐您可以用一行代替﹕
make dep clean bzImage modules modules_install 1>/dev/null
|
甚至﹐您還可以將 make 丟到 background 執行。不過﹐這通常在您比較確定核心沒有問題的時候才使用。我是建議您手工的執行每個 make 命令﹐檢查它的執行結果才進行下一個動作﹐如果有錯誤﹐解決之後才好繼續。
在 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 的話﹐那就要考慮回去將內建的選項改為模組﹐或儘量減少。否則﹐您將不能為這個核心製作開機磁片﹐也不能運用下面提到的核心安裝測試程序。
安裝核心
不過﹐到此為止﹐我們只是將核心編譯出來而已﹐接下來的是要將核心安裝到系統上面去。
先將一張空白磁片放進軟碟機﹐然後輸入﹕
這可能需要一點時間﹐等完成之後﹐輸入﹕
這樣會讓機器重新啟動﹐這時候﹐你要確定您的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 bzdisk一樣﹐只不過將核心安裝到硬碟而已。它會將核心裝在 /boot 目錄去﹐請檢查那裡﹐如果您發現﹕vmlinuz-2.4.9 這個檔案﹐那就是核心了﹗除了核心檔之外﹐您應該還會看到 System.map-2.4.9 這樣的檔案﹕
# ls -l /boot/vmlinuz*
lrwxrwxrwx 1 root root 13 Sep 7 13:31 /boot/vmlinuz -> vmlinuz-2.4.9
-rw-r--r-- 1 root root 781806 Apr 9 08:57 /boot/vmlinuz-2.4.2-2
-rw-r--r-- 1 root root 980321 Sep 7 13:31 /boot/vmlinuz-2.4.9
# ls -l /boot/System.map*
lrwxrwxrwx 1 root root 16 Sep 7 14:05 /boot/System.map -> System.map-2.4.9
-rw-r--r-- 1 root root 410990 Apr 9 08:57 /boot/System.map-2.4.2-2
-rw-r--r-- 1 root root 455081 Sep 7 13:31 /boot/System.map-2.4.9
|
您不難發現其中的 vmlinuz 和 System.map 都是 links 吧。事實上﹐如果您不執行 make install 的話﹐可以手工的直接從 /usr/src/linux 目錄下面將相關檔案複製到 /boot 裡面去﹕
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.9
cp /usr/src/linux/System.map /boot/System.map-2.4.9
ln -sf /boot/vmlinuz-2.4.9 /boot/vmlinuz
ln -sf /boot/System.map-2.4.9 /boot/System.map
|
Okay﹗到這裡﹐基本上就把核心順利安裝到系統上面了。不過﹐因為我這裡有使用到 RAM DISK 機制﹐在開機的時候啟動我的 SCSI 控制卡模組。事實上我是可以直接將 SCSI 編進內建的啦﹐但作為這篇教學的需要﹐我這裡就為大家進行一次示範設定。如果日後您的系統只有 SCSI 硬碟﹐或是 RAID 系統﹐不能直接內建在核心裡面開機﹐那就可以傚法這裡﹐使用 initrd 的機制了。如果要手工進行﹐您大可以參考 /usr/src/linux/Documentation/initrd.txt 和 ramdisk.txt 文件﹐自己動手。然而﹐系統已經提供一個非常好用的工具﹐幫您搞定這些工作﹕
mkinitrd -f /boot/initrd-2.4.9.img 2.4.9
|
就這麼簡單﹐它同時會修改 /etc/modules.conf﹐幫您加上相應的 SCSI 模組﹐請檢查這個檔案確認一下模組是否正確﹐要不然可以手工修改過來﹐請您自行 man mkinitrd 參考資料囉。如果您還有其它模組需要加在這個檔案裡面﹐可以參考如下的動作﹕
dd if=/dev/zero of=initrd bs=300k count=1
mke2fs -F -m0 initrd
zcat /boot/initrd-2.4.9.img > initrd
mkdir /mnt/initrd
insmod loop # 如果當前核心沒內建 loop 的話
mount -t ext2 -o loop initrd /mnt/initrd
cp /lib/modules/2.4.9/xxx/yyyy.o /mnt/initrd/lib # yyyy.o 為增加的模組
echo "Loading module yyyy ...." >> /mnt/initrd/linuxrc
echo "insmod /lib/yyyy.o" >> /mnt/initrd/linuxrc
umount /mnt/initrd
dd if=initrd of=/boot/initrd-2.4.9.new bs=1k count=2880
gzip -9 /boot/initrd-2.4.9.new
vi /etc/lilo.ocnf # 修改 initrd=/boot/initrd-2.4.9.new.gz
lilo -v
|
假如您認為沒必要使用 RAM DISK﹐那就不用管這一段了。
設定 LILO
LILO 是 “LInux LOader”的縮寫﹐它是在機器啟動的時候負責載入作業系統的。我們在“安裝”和“開機”的章節裡面都提到過它的作用﹐這裡不再重複。然而﹐在許多時候﹐我們可能需要設定不同的核心來配合不同的測試﹐每次當我們編譯或修改過核心設定﹐那就一定要驚動到 LILO 的設定。我們這裡﹐將正式介紹如何修改 LILO 的設定檔。
我發現﹐在某些系統上﹐例如 Mandrak 8 上面﹐在編譯核心過程中﹐執行 make install 的話﹐會自動幫您修改 /etc/lilo.conf 這個重要的檔案。不過﹐RedHat 7.1 似乎還沒這麼自動。無論如何﹐請您修改 /etc/lilo.conf 這個檔案﹐看起來有點像這樣﹕
# -- GLOBAL -- #
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
#linear
lba32
default=linux
# -- PER-IMAGE SECTION -- #
image=/boot/vmlinuz-2.4.9 # 新的核心檔
label=linux
initrd=/boot/initrd-2.4.9.img # 新的 initrd 檔
read-only
root=/dev/hda6
image=/boot/vmlinuz-2.4.2-2
label=linux.242 # 將舊標籤改名
initrd=/boot/initrd-2.4.2-2.img
read-only
root=/dev/hda6
other=/dev/hda1
optional
label=win98
other=/dev/hdb2
label=rh62
other=/dev/hdb6
label=ol24
|
這裡﹐我們不妨先解讀一下這個檔案的設定結構﹐在最頂上的為 global 設定﹐也就是當 LILO 被啟動之後﹐都會被執行的項目﹕
除了上面這些介紹的項目之外﹐事實上還有很多其它的設定﹐例如 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 完成設定之後﹐請一定一定不要忘記執行如下命令﹕
請檢查您剛才寫進去的 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
這樣﹐您就可以用 NT 的 Loader 來啟動 Linux 了。
除此之外﹐在新版的 RedHat 系統上﹐除了 LILO 之外還提供了另外的新開機管理程式﹐稱為 GRUB ( GRand Unified Bootloader ) 。如果您勇於嘗新﹐可以參考如下網頁﹕
Grub開機管理程式安裝簡介
上面是 Linuxcenter 網站的介紹文章﹐您當然可以到 GNU 網站獲得更多關於 GRUB 的資訊。
進行 Patch
前面所介紹的方法﹐是直接抓一個完整的核心回來重新編譯。除了這個方法之外﹐我們還可以使用另外一種方法來為核心進行升級的動作。就是用 patch 的方式進行。
假如您曾經溜灠過 www.kernel.org 的核心下載目錄﹐應該會發現一堆 patch-xxxx.xxx.xx 這樣的檔案﹐這些檔案都比較小﹔再仔細看看﹐它們的版本安排﹐非常有順序﹐這就對了﹕關鍵是它的版本順序。因為﹐幫 kernel 進行 patch 的時候﹐必須是逐個逐個版本 patch 上去的﹐期間不能跳過任何一個版本。
比方說﹐您目前的版本是 2.4.2﹐如果您要升級到 2.4.9﹐您有兩個方法﹕
- 直接抓 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
|
(這樣﹐您應該會獲得一個 linux-2.4.9-ipvs-0.9.3.patch 的檔案。)
- 接下來﹐就是對核心進行 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
(註﹕因為我手邊的 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 是怎麼說的﹐這非常重要。