天天看點

Linux核心編譯過程詳解

前言

Linux核心是Linux作業系統的核心,也是整個Linux功能展現的核心,就如同發動機在汽車中的重要性。核心主要功能包括程序管理、記憶體管理、檔案管理、裝置管理、網絡管理等。Linux核心是單核心設計,但卻采用了微核心的子產品化設計,支援核心線程以及動态裝載核心子產品的能力。

Linux作為一個自由軟體,在廣大愛好者的支援下,核心版本不斷更新。新的核心修訂了舊核心的bug,并增加了許多新的特性。如果使用者想要使用這些新特性,或想根據自己的系統定制一個更高效、更穩定的核心,就需要手動編譯Linux核心。那麼如何編譯核心呢?本文将講解Linux核心編譯的詳細程。

核心編譯之核心擷取

編譯核心的前提是需要有新核心的源碼包,擷取源碼包的管道有很多,這裡就不詳細介紹了,建議直接去官方網站(www.kernel.org)下載下傳。我這裡準備的是3.10.10版本的源碼包,盡量不要直接編譯最新版本的核心,可能會造成不相容等問題。

核心編譯之解壓源碼包

編譯核心時,一般把源碼解壓到/usr/src目錄下,解壓完成後會在該目錄下生成一個與源碼包版本号一緻的目錄,為了友善起見,我們可将它做一個連結,連結為linux目錄。

核心編譯之配置核心

編譯核心首先需要安裝開發環境(Development Tools和Server Platform Development),配置核心之前可以檢視目前系統的裝置資訊,了解系統詳細配置。

<code>檢視CPU資訊:</code>

<code>cat</code> <code>/proc/cpuinfo</code>

<code>x86info             </code><code>#此工具需手動安裝</code>

<code>lscpu</code>

<code>檢視PCI:</code>

<code>lspci               </code><code>#可用選項-v檢視詳細資訊</code>

<code>檢視USB:</code>

<code>lsusb               </code><code>#可用選項-v檢視詳細資訊</code>

<code>檢視塊裝置:</code>

<code>lsblk</code>

配置核心可選用多種方法

<code>make</code> <code>config           </code><code>#周遊選擇編譯核心功能</code>

<code>make</code> <code>allyesconfig     </code><code>#啟用核心全部功能</code>

<code>make</code> <code>allnoconfig      </code><code>#核心功能選項全部為否</code>

<code>make</code> <code>menuconfig       </code><code>#開啟文本菜單選項,對視窗有限制,盡量調大視窗,否則會出錯</code>

<code>                      </code><code>#使用此指令需安裝gcc和ncurses-devel</code>

<code>make</code> <code>gconfig          </code><code>#依賴GNome桌面環境及GNome的圖形開發環境,gtk2</code>

<code>make</code> <code>kconfig          </code><code>#依賴KDE桌面環境及KDE的圖形開發環境,qt</code>

核心功能選項

<code>[*]                   </code><code>#編譯進核心本體</code>

<code>[M]                   </code><code>#編譯成核心子產品</code>

<code>[ ]                   </code><code>#不選擇使用</code>

使用make menuconfig開啟菜單選項,手動選擇核心功能

配置完成後,配置資訊會存儲于名為.config的隐藏檔案,如果想友善配置,可複制/boot/config檔案覆寫.config檔案,直接修改即可。

核心編譯之編譯安裝

編譯時如果是遠端連接配接,一旦斷開連接配接,編譯就會出問題。是以我們可使用screen指令(需安裝),啟動多個視窗,即使連接配接中斷,編譯也不會終止。

<code>screen</code>                 <code>#開啟視窗</code>

<code>Ctrl+A+D               </code><code>#隐藏視窗</code>

<code>screen</code> <code>-</code><code>ls</code>             <code>#檢視運作的視窗</code>

<code>screen</code> <code>-r SCREEN_ID    </code><code>#傳回視窗</code>

開始編譯

安裝子產品

安裝完成後在/lib/modules/目錄下會生成一個同核心版本好的目錄,目錄下便是新核心的子產品了

安裝核心

安裝完成後會在/boot目錄下生成幾個新核心的檔案

檢視grub.conf配置檔案,會發現新核心的資訊已經寫入了

以新核心啟動

檢視新核心版本

補充:

如果前面多次編譯過,在編譯開始之前可進行清理

<code> </code><code>make</code> <code>clean       </code><code>#清理編譯的檔案,但保留配置檔案</code>

<code> </code><code>make</code> <code>mrproper    </code><code>#移除所有編譯生成的檔案、配置檔案和備份檔案</code>

<code> </code><code>make</code> <code>distclean   </code><code>#完全清理</code>

如果想快速編譯,可進行如下操作

<code>  make</code> <code>-j *         </code><code>#*為cup核心數</code>

<code>如果想将編譯生成的檔案儲存至别處,可進行如下操作</code>

<code></code>

<code>mkdir</code> <code>/path/to/somewhere</code>               <code>#建立存放目錄</code>

<code>cd</code> <code>/path/to/somewhere</code>                  <code>#進入目錄</code>

<code>.</code><code>/configure</code> <code>--ksource=</code><code>/usr/src/linux</code>   <code>#指定源目錄</code>

<code>如何隻編譯核心的部分代碼</code>

<code>隻編譯某子目錄中的相關代碼:</code>

<code>cd</code> <code>/usr/src/linux</code>

<code>make</code>  <code>path</code><code>/to/dir/</code>

<code>隻編譯部分子產品:</code>

<code>make</code> <code>M=path</code><code>/to/dir</code>

<code>隻編譯一個子產品:</code>

<code>make</code> <code>path</code><code>/to/dir/MOD_NAME</code><code>.ko</code>

<code>将編譯生成的檔案儲存至别處:</code>

<code>make</code> <code>O=</code><code>/path/to/somewhere</code>

好了,核心編譯的過程就是這樣了,其中麻煩的地方除了需要消耗大量時間,也就是配置核心菜單了(英文傷不起...),想詳細了解每個項目的意思請自行查資料。<code></code>

<code>      本文轉自灬落魄灬  51CTO部落格,原文連結:</code><b>http://blog.51cto.com/smoke520/1830275</b><code>,如需轉載請自行聯系原作者</code>

上一篇: perl守護程序
下一篇: perl學習筆記

繼續閱讀