Linux內核編譯

幾個概念:
1. 內核源碼樹:
簡單來說就是Linux內核源代碼,它是編譯驅動的前提;ubuntu系統默認情況下是沒有的;需要自己手動去下載內核源碼樹;
2.  驅動最終以*.ko的形式生成,insmod的本質就是將ko文件與運行的內核進行鏈接的過程。類似於編譯helloworld的鏈接過程。
鏈接必然需要先進行編譯,以便確定所需的外部符號(EXPORT_SYMBOLS)是否存在,因爲有些符號(函數或全局變量)在
內核中。在驅動中如果使用到這些符號,必須預留一個位置,insmod時進一步確定這些符號的具體位置(符號綁定)。
如果內核都沒有編譯過,怎麼知道這些符號有沒有編入內核中;

編譯Linux的步驟:
1:首先要查看自己系統是使用的內核版本
>> uname -r
如果系統自動安裝了源碼。在/usr/src目錄下面會有對應的使用的版本,我那個版本沒有,我是自己下載的
>> ls
 
其中linux2.6和linux-source-3.2.0是我自己下載的;

2. 如果沒有源碼,查看一下可以下載的源碼包(不要使用超級用戶使用此命令,他會提示沒有這個命令)
>>apt-cache  search  linux-source
linux-source - Linux kernel source with Ubuntu patches
linux-source-3.2.0 - Linux kernel source for version 3.2.0 with Ubuntu patches
 
然後下載linux-source-3.2.0
#sudo apt-get   install  linux-source-3.2.0
下載完成之後,會在/usr/src下,文件名爲linux-source-3.2.0.tar.bz2這個壓縮包,解壓之後就可以得到整個源代碼
 
# sudo  tar jxvf  linux-source-3.2.0.tar.bz2
 
解壓之後會生成一個新的目錄/usr/src/linux-source-3.2.0,現在所有的源代碼都在裏面
 
3:現在開始配置內核,有三種選擇選擇方式1:make oldconfig   2:make  menuconfig 3:make  xconfig
 
我選擇的是最快的配置原版的配置方法
#sudo   make  oldconfig  
(如果配置的過程中出現問題,原因是因爲你沒有下載配置環境的那個依賴的庫文件,可以自己下載)
配置完成之後就要開始對內核進行編譯了
在配置時,會出現因爲配置過程中的CONFIG_RTS5139值爲空而出現編譯錯誤,建議配置爲n:


 當然,也可以在.config隱藏文件中修改過來;

4:編譯內核  
  #sudo  make 
 
這個過程很漫長,建議去做做別別的事情吧~;大約需要1個小時;
 
5. #sudo  make  bzImage
 
編譯內核的結果最終出現了幾個錯誤,但最終對那個Hello  World 沒有造成影響
執行結束之後,會在當前目錄下面生成一個新的文件:vmlinux
 
5:然後就是編譯模塊了
 
#sudo make  modules 
 
6:安裝模塊
 
#sudo  make  modules_install
 
執行結束之後,會在/lib/modules下生成一個新的目錄/lib/modules/3.2.0/
 
在隨後的編譯模塊文件時,需要用到這個路徑下的build目錄。到這一步,內核就編譯完成了 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章