快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

編譯核心的详细指导手册


  好了﹐當我們已經可以基本操控這台 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 ....
  
  無論如何﹐當新核心推出之後﹐都不建議立即在真正工作的系統上面應用﹐尤其是在商業機構中﹐不要拿營咧械南到y來做白老鼠。就算您獲得一個被認為是穩定的版本﹐也應該經過反復的測試﹐以及隨時留意核心團體所公佈的最新資訊。只有經過一段時期和廣泛的應用與回報﹐再加上自己的嚴格測試之後﹐才能決定是否要應用在工作的環境中。
  
  事實上﹐更新核心不是為了幹時髦﹐您必須很清楚您的需要是什麼﹐假如當前核心已經能應付您的需要﹐那就繼續保留它就是了。下面這篇文章﹐是小州兄的建言﹐非常有代表性﹐希望大家能深切領會其中的要旨﹕
  
  "小州" 撰寫於郵件
  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 和風
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论