前言
Linux內核是Linux操作系統的核心,也是整個Linux功能體現的核心,就如同發動機在汽車中的重要性。內核主要功能包括進程管理、內存管理、文件管理、設備管理、網絡管理等。Linux內核是單內核設計,但卻采用了微內核的模塊化設計,支持內核線程以及動態裝載內核模塊的能力。
Linux作為一個自由軟件,在廣大愛好者的支持下,內核版本不斷更新。新的內核修訂了舊內核的bug,并增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統定制一個更高效,更穩定的內核,就需要手動編譯Linux內核。那么如何編譯內核呢?本文將講解Linux內核編譯的詳細程。
內核編譯之內核獲取
編譯內核的前提是需要有新內核的源碼包,獲取源碼包的渠道有很多,這里就不詳細介紹了,建議直接去官方網站(www.kernel.org)下載。我這里準備的是3.10.10版本的源碼包,盡量不要直接編譯最新版本的內核,可能會造成不兼容等問題。
內核編譯之解壓源碼包
編譯內核時,一般把源碼解壓到/usr/src目錄下,解壓完成后會在該目錄下生成一個與源碼包版本號一致的目錄,為了方便起見,我們可將它做一個鏈接,鏈接為linux目錄。
內核編譯之配置內核
編譯內核首先需要安裝開發環境(Development Tools和Server Platform Development),配置內核之前可以查看當前系統的設備信息,了解系統詳細配置。
查看CPU信息: cat /proc/cpuinfo x86info #此工具需手動安裝 lscpu 查看PCI: lspci #可用選項-v查看詳細信息 查看USB: lsusb #可用選項-v查看詳細信息 查看塊設備: lsblk
配置內核可選用多種方法
make config #遍歷選擇編譯內核功能 make allyesconfig #啟用內核全部功能 make allnoconfig #內核功能選項全部為否 make menuconfig #開啟文本菜單選項,對窗口有限制,盡量調大窗口,否則會出錯 #使用此命令需安裝gcc和ncurses-devel make gconfig #依賴GNome桌面環境及GNome的圖形開發環境,gtk2 make kconfig #依賴KDE桌面環境及KDE的圖形開發環境,qt
內核功能選項
[*] #編譯進內核本體 [M] #編譯成內核模塊 [ ] #不選擇使用
使用make menuconfig開啟菜單選項,手動選擇內核功能
配置完成后,配置信息會存儲于名為.config的隱藏文件,如果想方便配置,可復制/boot/config文件覆蓋.config文件,直接修改即可。
內核編譯之編譯安裝
編譯時如果是遠程連接,一旦斷開連接,編譯就會出問題。所以我們可使用screen命令(需安裝),啟動多個窗口,即使連接中斷,編譯也不會終止。
screen #開啟窗口 Ctrl+A+D #隱藏窗口 screen -ls #查看運行的窗口 screen -r SCREEN_ID #返回窗口
開始編譯
安裝模塊
安裝完成后在/lib/modules/目錄下會生成一個同內核版本好的目錄,目錄下便是新內核的模塊了
安裝內核
安裝完成后會在/boot目錄下生成幾個新內核的文件
查看grub.conf配置文件,會發現新內核的信息已經寫入了
以新內核啟動
查看新內核版本
補充:
如果前面多次編譯過,在編譯開始之前可進行清理
make clean #清理編譯的文件,但保留配置文件 make mrproper #移除所有編譯生成的文件、配置文件和備份文件 make distclean #完全清理
如果想快速編譯,可進行如下操作
make -j * #*為cup核心數
如果想將編譯生成的文件保存至別處,可進行如下操作
mkdir /path/to/somewhere #創建存放目錄 cd /path/to/somewhere #進入目錄 ./configure --ksource=/usr/src/linux #指定源目錄
如何只編譯內核的部分代碼
只編譯某子目錄中的相關代碼: cd /usr/src/linux make path/to/dir/ 只編譯部分模塊: make M=path/to/dir 只編譯一個模塊: make path/to/dir/MOD_NAME.ko 將編譯生成的文件保存至別處: make O=/path/to/somewhere
The end
好了,內核編譯的過程就是這樣了,其中麻煩的地方除了需要消耗大量時間,也就是配置內核菜單了(英文傷不起…),想詳細了解每個項目的意思請自行查資料。
以上僅為個人總結,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/2063
不錯,內容充實,格式優美,能迅速吸引眼球并能勾起讀者繼續的欲望
@stanley:大神辛苦 每篇都一一審核修改
意義不大。如果gcc不滿足要求怎么辦