最開始聽說編譯核心時都嚇了一跳, 心想Linux那麼可怕, 一上來就是要自已編譯核心... 後來自己試了一下, 其實也不復雜, 主要是找些文檔來看就行了. 1.核心的源程序: 我現在在用TLC, REDHAT也用過, SLACKWARE也用過. 無論哪一種, 都是把核心源程序放到 /usr/src/linux 下, 因為有些別的應用程序在編譯時好像也會從這個路徑來引用一些頭文件之類. 一般來說這個 linux 目錄都只是個符號連接, 有一點點像WIN下的Shortcut, 而實際上它對應的目錄可能是 /usr/src/linux-2.0.35 之類. RedHat的缺省安裝好像並不裝源程序, 只有些頭文件. 以現在的2.2.5 核心為例, 我裝的時候就是這樣(其實什麼版本都一樣 :) cd /usr/src rm linux # 這個linux只是個符號連接, 刪掉它沒事的. 可以 ls -l 看看, 如果看到這個: # linux -> linux-XXXXX, 就表示它是個連接而已. 原來的源程序在箭頭後的目錄. tar zxvf XXXXXXX/linux-2.2.5.tar.gz # 這個包解開後, 新核心的源程序就放在了新建立的linux目錄下, 這可是個貨真價 # 實的目錄. mv linux linux-2.2.5 ln -s linux-2.2.5 linux # 按照慣例, 還是把目錄另命個名, 再重新做個linux的符號連接 好了, 現在源程序放好了. 2.准備編譯: 現在要做一些准備工作. 對於新釋放出來的核心源程序也沒啥好做的, 就打一個: cd /usr/src/linux make menUConfig 然後就會看到一個很友好的界面(在LINUX下...已經是很友好的了), 大致上有點像WIN 9X安裝時的選擇安裝項目. 這就是在配置核心, 選擇哪些內容要, 哪些不要. 慢慢道來: Code maturity ...... 按回車進去後只有一項, 是問是否在後面的選項中列出開發中/或未完成的代碼/ 驅動程序. 不管它, 不選它就行了 Processor type ...... 選擇CPU類型, 進去後有四項: Processor family: 按回車, 在裡面選CPU類型(我不懂為什麼把PPro和6x86MX列在 一起); Math emulation: 協處理器仿真, 當然不選(你不會還在用沒有FPU的386吧); MTRR: 搞不懂 :PP, 不管它, 缺省是不選的; Symmetric......: 如果你富到有兩個或以上的CPU並且裝在同一塊主板上, 就選; Loadable module support: 對模塊的支持. 模塊可是好東西, 網卡聲卡的驅動問題很多朋友都在問, 有模塊 其實很好辦. 這裡面有三項: Enable loadable .....: 當然要選; Set version.....: 好像是為了使核心可以裝入不同版本的模塊, 可以不選它; Kernel module.....: 讓核心在啟動時有自己裝入必需模塊的能力, 選上吧; General setup: 裡面東西不少, 我的辦法是一項也不改, 用缺省的; Plug and Play........: 著名的Plug and "Pray", 嘿嘿. 選上吧; Block devices: 選擇某些設備驅動, 按缺省的不變就可以了(如果你沒有什麼過於古舊的設備如 IDE卡的話), 不過我是把"CMD640"及"RZ1000"兩項去掉, 因為我不認得它們, 它 們也不認得我. 還有就是不妨把 "Loopback device" 也加上, 做成核心內包含 或模塊都可以. 現場解釋: 在每一個選項前都有個括號, 但有的是中括號有的是尖括號. 用空格鍵選擇時可以發現, 中括號裡要麼是空, 要麼是"*", 而尖括號裡可以是空, "*"和"M". 這表 示前者對應的項要麼不要, 要麼做在核心裡; 後者則多一樣選擇, 可以做成模塊. 模塊: 我的直觀理解是, 模塊就是像*.SYS那樣的驅動程序, 可以在核心啟動後加載,能有效減小核心尺寸, 並有更多的靈活性. 關於靈活性, 後面再說. Networking options: 主要是有關TCP/IP的設置. 一般機器用缺省的就行了, 別的如果要作防火牆啊 路由什麼的可以自己選, 我沒選過, 不敢亂說 :PP; SCSI support: 我是沒有SCSI設備的, 所以我一項也不選. 你有嗎? 不妨把你要的都做成模塊, 這樣內核會比較小. 像16.8就選了"low-level drivers" 裡的"AIC7xxx",因為 有一個SCSI 的 CDR 光驅, 有時候可能會接上來用; NetWord device support: 這裡就是網卡的設置. 進去以後第一項, Netword device support選上先(沒網卡? 也選!) ARCnet support: 小的不知此為何物, 不選它; Dummy net driver support: 啞(或空)網絡驅動支持. 照缺省的, M. EQL ........: 不懂. 不選. Ethernet (10 or 100Mbit): 你是用網卡上網就把它選上吧. 3COM cards: 如果你用3COM的卡, 選上. 下面會有多的選項, 選擇你的卡那一項吧. AMD LANCE .....: Western Digital......: Racal-Interlan......: 看起來都像是某種卡, 不管他. Other ISA cards: 其他的用ISA網卡的玩家們(尤其是UMC 9008這種XX卡), 選上. 別的卡我是沒用過, NE2000兼容的卡就選上 NE2000/NE1000 support, 最好是選成 M. 把網卡驅動做成模塊會有利於你裝網卡驅動的. 如果已經選出了你用的卡, 下面的可以全部不管了. 統統可以不選. 如果不是的話, 就照著列出來的項目選. 例如是撥號上網就要把PPP 選上. 下面的這些沒有一樣我用 過, 不敢胡說 :PP 出來, 然後是 Amateur Radio Support, 不選; 然後是ISDN...你富到了用ISDN上網? 下面是 Old CD-ROM drivers, 如果你還在用古老的非IDE或SCSI接口的光驅, 就進去 自己選吧. Character devices: 基本上可以全都不變. 如果用的是串口鼠標, "Mouse Support(not serial mouse)" 就可以不選了. 有游戲手柄的可以在 Joystick support 裡選. 一般的模擬手柄(不好 下精確的定義, 總之你能用60塊錢以下買到的4鍵6鍵8鍵之類都是模擬型的)就選第一 項"Classic PC ....". 我用的Creative Cobra裡面是沒有的. 不過, LINUX下把手柄 驅動起來好像也沒什麼意義... Filesystems: 文件系統支持. Quota support: 不用選了, 如果你的機器不是像16.8這樣做個人主頁服務器的話. 如果你要實驗如何 限制用戶使用的硬盤空間, 就選上. Kernel automounter support 可以選上, 雖然我沒發現選不選有什麼區別. DOS FAT fs support 最好要選上, 如果要在LINUX下讀寫DOS分區. 下面有三個選項,把 "MSDOS fs support" 與 "VFAT(Windows-95) fs support"選上就可以了. VFAT 即 FAT32. ISO 9660 .....: ISO 9660格式光盤(現在的軟件光盤..X版的光盤..都是這個格式)支 持, 當然選上. Microsoft Joliet......: 選上以後沒發現有什麼用. 以下的可以統統保持缺省. 如果裝了NT或OS/2, 可以選上NTFS ....及 OS/2 ....., 都 是只讀訪問. Network File Systems 子項裡缺省選上了NFS, 可以不要. SMB可以選上, 用來訪問局 域網中的WINDOWS共享目錄. 如果要訪問Netware卷, 就選上"NCP .....". 出來以後是 Console drivers, 可以不管它. 然後是 Sound...這一塊東西很多, 實在沒力氣一一寫下來. 不過有幾個建議: 1. 能用OSS驅動還是用OSS驅動, 又方便, 支持的卡也多; 2. 如果用OSS驅動, 在SOUND裡就不要選任何東西; 3. OSS不支持的卡(如ALS007), 才在核心裡想辦法. 可以參考上面我POST的"ALS007發聲經過". 4. OSS指Open Sound System, 是 4 Front Tech 的商業產品, 在16.8上可以找得到, 但有時間限制. 某高人作了工作將其注冊, 大家自己下載了回去研究. 核心裡的那個"OSS sound modules(NEW)" 只是OSS的一部分. 我也用過這個來驅動YAMAHA 719卡. Kernel hacking: 不管它啦...... 好了, 全部設完了, 選EXIT退出來, 問是否保存修改時答YES. 然後會有一些提示. 如果看到了有叫你"make dep", 就一定要打"make dep"先. 完了後就打 make bzImage. 如果提示信息中沒有叫你"make dep", 只有叫你 "make zImage", "make zdisk" 或 "make zlilo" 的, 就直接打 make bzImage 就行了. 一點說明: make dep 是作一些准備工作, make bzImage 則是開始編譯生成核心. 而 make bzImage與make zImage的區別在於, 作成bzImage的核心壓縮率比zImage高, 核心就更小一些. make zdisk 與 make zlilo 是做別的用處的核心的. 然後就等吧(有得你等的). 一般從5分鐘到半個鐘頭不等, 看你的機器了. 第一次編譯會比較慢. 以後再改了配置後make就會快很多了. 等這個完了後一定還要 make modules 和 make modules_install. make bzImage 完後會顯示核心放在什麼地方, 一般是/usr/src/linux/arch/i386/boot/ 下. 把bzImage拷到根下. 然後修改 /etc/lilo.conf, 照著原來的image = XXXXX來加上 image = /bzImage root = /dev/hda1 (這裡視你的LINUX安裝而定, 照你原有的改) label = linux read-only 把原來的 label = linux 改一下, 如 label = oldlinux. 把image = /bzImage 這一節加在原來的前面, 這樣會自動作為