前言
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>