linux核心編譯學習筆記
作者:laomai
首頁:http://blog.csdn.net/laomai
一、實驗環境
一台工控機,帶有光驅。裝有redhat linux es3作業系統。最小安裝,
即在選擇軟體的時候什麼都不選.
本文參考資料:
http://www.uplinux.com/www/sys/01/77.shtml
http://tristones.viaspeip.com/archives/000209.html
二、檢視目前的系統配置
1、檢視核心版本号
#uname -a
2、檢視目前已裝入的子產品
#lsmod
3、安裝編譯時所需工具(gcc、make和ncurse)
cpp-3.2.3-20.i386.rpm
glibc-devel-2.3.2-95.3.i386.rpm
glibc-headers-2.3.2-95.3.i386.rpm
glibc-kernheaders-2.4-8.34.i386.rpm
gcc-3.2.3-20.i386.rpm
make-3.79.1-17.i386.rpm
ncurses-devel-5.3-9.3.i386.rpm
三、編譯前準備
1、獲得核心源代碼。有幾種方式
⑴我實驗用的是as3第三張安裝CD光牒的 kernel-source-2.4.21-4.EL.i386.rpm
⑵最新的核心版本到http://www.kernel.org/下載下傳
2、安裝核心代碼
rpm -ivh kernel-source-2.4.21-4.EL.i386.rpm
3、清除以前編譯核心時留下的東西
cd /usr/src/linux-2.4 #進入核心源碼所在目錄
make mrproper #進行清理
四、設定核心選項
執行 #make menuconfig
1、選項的配置辦法
執行make menuconfig以後,會出現一個主菜單,用方向鍵選擇菜單項,如果選擇了某一個還有子菜單的項(以-->結尾),按Enter鍵回進入下級子菜單.
選項的配置形式:
按Y,表示以build-in的方式包含,也就是把選項內建到核心裡.
對應的圖示為[*]或<*>,
按N,表示不包含。對應的圖示為[ ]或< >
按M,表示以子產品的形式包含,對應的圖示為<M>. 注意不是所有的選項都可以用子產品形式加載的
2、選項的狀态圖示
每個選項設完之後會顯示一個狀态圖示,隻能是下面5種之一
[*] - built-in表示這個選項被內建在核心裡了
[ ] - excluded 表示這個選項被核心排除了
<M> - module 表示這個選項以子產品的形式放在核心裡,
使用者用到這個選項的時候要執行insmod指令.
要注意不是所有的選項都可以以子產品的形式加載的。
是以當你按了m鍵,圖示仍然是[*]而不是<M>時,就要
明白這個選項隻能要麼內建在核心裡,要麼被核心排除。
< > - module capable,表示這個選項雖然被排除了,但
可以以子產品的形式被重新加載,比如,一個圖示為<M>的
選項,按N鍵以後狀态就會變成< >.
<*> - 這個圖示幫助沒寫,當實際上會出現,比如,按某個選項狀态為<M>
或者< >時,按Y鍵,圖示就會變成這個,意思和[*] 一樣,把可以用子產品
加載的選項變成build-in方式加載。
歸納一下就是: 括号裡如果為空白,則該選項未被加載;
如果括号裡是*,是以build-in的方式加載;
如果中間是m(此時隻能是尖括号),就是以子產品的形式動态加載.
3、選項的具體含義
每個具體選項的含義可以按H鍵得到幫助,本文的主要是講清楚實驗步驟,
所有選項均取預設值。
4、儲存設定
設定完需要的選項後按ESC鍵退出menuconfig,此時會提示是否儲存,選yes.
五、開始編譯
1、設定關聯檔案
#make dep
2、編譯核心(也就是編譯build-in的東西),我的機器用了大概10分鐘(奔4+512記憶體)
#make bzImage
3、編譯子產品 這個時間比較長,我用了大概1個小時
#make clean
#make modules
4、安裝子產品
#make modules_install
5、檢查結果
#depmod –a
檢查核心中有沒有未解析的symbol,它是生成子產品間的依賴關系,
這樣啟動新核心之後,使用modprobe指令加載子產品時就能正确地定位子產品。
假如輸入這個指令後看不到沒有任何傳回資訊的話,那說明編譯過程已經成功了。
6、安裝完整新核心
#make install
六、用新核心啟動
1、檢查/etc/lilo.conf檔案
可以看到新編譯的核心已經增加到啟動菜單了。
2、執行 /sbin/lilo 使新的啟動設定生效
3、重起機器,觀看啟動菜單,多了一項,說明成功!
七、緻謝
在學習編譯核心的過程中得到了水晶劍鋒、刀子、苯熊、小二等餅子堂朋友的指點和幫助
,在此謝過。