一、緒論:
Linux以其開源的開發方式贏得了越來越多人的關注,而作爲操作系統的核心的內核尤爲重要。
在linux的開發中採用了集市模型(bazaar,與cathedral--教堂模型對應)的版本控制方式,即Linux採用了雙樹系統。一個樹是穩定樹(stable tree),另一個樹是非穩定樹(unstable tree)或者開發樹(development tree)。一些新特性、實驗性改進等都將首先在開發樹中進行。如果在開發樹中所做的改進也可以應用於穩定樹,那麼在開發樹中經過測試以後,在穩定樹中將進行相同的改進。一旦開發樹經過了足夠的發展,開發樹就會成爲新的穩定樹。開發數就體現在源程序的版本號中;源程序版本號的形式爲x.y.z:對於穩定樹來說,y是偶數;對於開發樹來說,y比相應的穩定樹大一(奇數)。下載內核版本請訪問http://www.kernel.org。
Linux中定製內核爲linux系統提供了更好的處理方式,可以根據用戶自己的系統度身定製一個更高效,更穩定的內核。Linux下內核的編譯模式有如下二種:直接加載到內核中(build-in)方式和動態加載到內核中(module)。前一種方式在內核啓動時就可以支持相應部分的功能,這樣的優點是方便、速度快,機器一啓動,就可以使用這部分功能了;缺點是會使內核變得龐大起來,不管是否需要這部分功能,它都存在(例如:Windows)。後一種方式則可以動態的加載和卸載,在需要模塊進行處理時加載內核模塊,使用完畢後則進行卸載,這樣不會使得內核過分龐大,缺點是必需通過命令來加載。
二、本文的寫作內容
本篇文章涉及的內容:
1. linux-2.6.11內核的編譯過程
本篇文章不包含的內容:
1. 內核編譯中模塊功能選項說明
2. Linux內核編譯中有關編譯錯誤
三、文章正文
1. 下載linux2.6.11版本,在ftp://ftp.kernel.org/pub/中找到相關版本的壓縮包 linux-2.6.11.tar.bz2
2. 將壓縮包放到/usr/src/redhat/SOURCES/下,解壓縮包:
$tar -xvf linux-2.6.11.tar.bz2
3. 在/usr/src/redhat/SOURCES/下得到解壓後的文件linux-2.6.11,在linux-2.6.11當前目錄下進行編譯,在進行以下幾步之前,先要對linux-2.6.11中的一個頭文件進行修改。
i2c.h中對58,197行進行修改,修改內容如下:
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],int num);
修改爲:
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg,int num);
4. 清除當前目錄下編譯設置:
$make mrproper
該命令確保目錄下沒有相關的文件和配置,如果已經編譯過linux內核,建議使用該命令
5. 配置內核模塊的功能,有幾種方式可以進行界面選擇:
$make config(文本的配置方式,需要用戶自己寫配置文件)
$make menuconfig(文本選單的配置方式,在有字符終端下才能使用)
$make xconfig(圖形窗口模式的配置方式,必須支持Xwindow下才能使用)
$make oldconfig(文本配置方式,在原內核配置的基礎修改時使用)
這裏推薦make xconfig方式,圖形窗口的配置比較直觀,對應每一項相應的配置時,有三種選擇:
Y--該模塊編譯進內核
N--該模塊不編譯進內核
M--該模塊編譯成可加載內核模塊
內核編譯中各項模塊功能的選擇請參考其它文章(參見參考文獻)。
6. 內核模塊文件連接 :
$make
在進行該步時如果出現錯誤,而且這些錯誤支持的模塊省略了對編譯沒有影響,可以去掉,在進行了修改之後要重新進行make。
7. 內核模塊的編譯 :
$make modules
8. 內核模塊的安裝 :
$make modules_install
9. 安裝環境的安裝 :
$make install
三、參考文獻
文章名 |
作者 |
來源 |
Linux內核編譯 |
b_2_bomber 6 |
http://www.linuxbbs.cn/TopicOther.asp?t=5&BoardID=71&id=424 |
Linux操作系統的內核編譯內幕詳解 |
|
http://school.21tx.com |
Linux內核完全剖析 |
趙炯 |
機械工業出版社 |
http://www.kernel.org |