編譯核心的一點點經驗(轉)

BSDLite發表於2007-08-11
編譯核心的一點點經驗(轉)[@more@]  最開始聽說編譯核心時都嚇了一跳, 心想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 這一節加在原來的前面, 這樣會自動作為預設的核心. 你也可以在LILO時打linux或oldlinux來啟動不同的核心. 關於這一段, 也可以參考俺前面的"ALS007
  發聲經過".
  最後, 切記切記, 一定要打個lilo來重新生成LILO程式.
  
  好了, 重啟...

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-945855/,如需轉載,請註明出處,否則將追究法律責任。

相關文章