linux內核編譯

一:前言

1:內核的概念:

Kernel(內核)是操作系統的核心,掌控著所有硬件設備的控制權。計算機所要完成的各項工作,都需要通過內核的幫助才能完成。內核就是系統上的一個文件,這個文件包含了驅動主機各項硬件的檢測程序與驅動模塊。

2:什么叫做編譯?

如果想要完成的某個功能是內核沒有提供的,那我們就無法通過內核來控制計算機完成這項工作。如果我們想讓內核去完成這個功能,那就必須將這個模塊“添加”到內核中,這就類似于“驅動程序”,有了這樣一個“驅動程序的支持后,硬件(CPU、網卡等)”才能去完成之前不能完成的功能。這里的模塊“添加”的過程就叫做編譯。

3:內核模塊

內核模塊的存放位置為/lib/modules/$(uname -r)/kernel,所有以.ko結尾的文件都是模塊文件;其中uname -r為當前系統內核版本信息。

二:編譯前準備(以Centos6.9為例)

1:安裝開發包組
  # yun groupinstall Development tools`
2:下載內核源碼及解壓

下載地址https://www.kernel.org/

#cd /usr/src
# tar -xvf linux-3.18.56.tar.xz 
查看解壓出來的文件夾
3:準備配置文件
# cd /usr/src/   
# cp /boot/config-2.6.32-696.el6.x86_64  ./linux-3.18.56/
# grep NTFS ./linux-3.18.56/config-2.6.32-696.el6.x86_64 
顯示結果為# CONFIG_NTFS_FS is not set

注:從boot下拷貝一個config文件主要是為了方便,這個文件里保存的是之前在安裝系統時內核做安裝的模塊。這里拷貝過來主要是為了方便演示,具體應用中可以根據自己的需要進行模塊的篩選。至于grep NTFS 是為了讓大家看一下NTFS這個模塊沒有啟動,下面在編譯的時候我們就將NTFS啟用

三:編譯開始

1:執行make menuconfig命令(該命令在源碼目錄下執行)
第一步:先給以后的內核加個名稱

2:選擇需要啟動的內核模塊
在編譯的第一個界面一次選擇File systems -->DOS/FAT/NT file systems -->NTFS file systems support(利用空格鍵選中。[M] b表示將模塊打進ramdisk中,[*]表示將模塊打在內核中。本實驗將NTFS模塊打在ramdisk中)

選擇
修改為[M]和[*]

保存退出之后
grep NTFS .config顯示修改結果

3:開始進行編譯
注:如果編譯是在遠程連接上的話、make會出問題的、如果遠程連接斷開的話那運行的進程是不是也都斷開了、這個make的進程一定是當前系統上運行的子進程、有些一旦父進程掛了、子進程也將不復存在。
所以我們使用一個叫screen這個命令來操作,沒安裝自己安裝上就是了,可以在一個窗口上啟動n個虛擬的桌面,即使退出了也會保留之前的內容,切換進screen就可以看到窗口標題欄上的screen標志了:
具體使用方法如下:

<在源碼目錄下執行>


-screen -ls:可以查看當前啟用了多少個screen 按Ctrl+a,松開再按d可以隱藏screen桌面 因為編譯內核需要比較長的時間、所以我們在screen上編譯、然后再把screen桌面隱藏就可以了;
重新接入screen: # screen -r 跟上screenID就可以了 然后我們就開始編譯吧;


正在編譯

4:安裝模塊

  make modules_install

這步完了之后可以查看一下/lib/modules 目錄下就會生成一個以版本號命名的一個文件模塊了


5:安裝內核相關文件

  make install

這一步的主要目的是將所有的編譯之后的內容拷貝安裝到相應的目錄。安裝完之后會在/boot目錄下生成一個內核文件vmlinux-3.13.2,還有一個與當前編譯的版本一樣的文件,可以查看一下。現在已經編譯好了一個新內核了


6:編輯grub配置文件(一般會自動配置,查看一下)
#vim /boot/grub/grub.conf

好了、重啟一下試試,如果順利的話就可以進到內核選擇界面了,選項我們編譯的新內核就OK了

三:總結

1:步驟整理:

 1、獲取內核源碼,解壓至/usr/src
       # tar xf linux-3.13.5.tar.xz -C /usr/src
       # ln -sv /usr/src/linux-3.13.5  /usr/src/linux
   2、配置內核特性(選擇一種方法就可以了)
       make config:遍歷選擇所要編譯的內核特性
       make allyesconfig:配置所有可編譯的內核特性
       make allnoconfig:并不是所有的都不編譯
       make menuconfig:這種就是打開一個文件窗口選擇菜單
       make kconfig(KDE桌面環境下,并且安裝了qt開發環境)
       make gconfig(Gnome桌面環境,并且安裝gtk開發環境)
   3、編譯內核
       # make [-j #] : #號最多為CPU物理核心總數的兩倍,這樣會快點哦            
   4、安裝內核模塊
       # make modules_install
   5、安裝內核
       # make install
   6、驗正并測試
       # cat /boot/grub/grub.conf
       查看新內核是否已經添加, 而后重啟系統并測試

2、配置內核選項
支持“更新”模式進行配置: make help

(a) make config:基于命令行以遍歷的方式去配置內核中可配置的每個選項 
(b) make menuconfig:基于curses的文本窗口界面 
(c) make gconfig:基于GTK (GNOME)環境窗口界面 
(d) make xconfig:基于QT(KDE)環境的窗口界面 支持“全新配置”模式進行配置 
(a) make defconfig:基于內核為目標平臺提供的“默認”配置進行配置 
(b) make allyesconfig: 所有選項均回答為“yes“ 
(c) make allnoconfig: 所有選項均回答為"no“

3、編譯
全編譯:make [-j #]
編譯內核的一部分功能:
a) 只編譯某子目錄中的相關代碼:
# cd /usr/src/linux
# make dir/
(b) 只編譯一個特定的模塊:
# cd /usr/src/linux
# make dir/file.ko
例如:只為e1000編譯驅動:
#make drivers/net/ethernet/intel/e1000/e1000.ko

4、編譯內核
如何交叉編譯內核:
編譯的目標平臺與當前平臺不相同;
# make ARCH=arch_name
要獲取特定目標平臺的使用幫助
# make ARCH=arch_name help
# make ARCH=arm help

5、清理刪除
在已經執行過編譯操作的內核源碼樹做重新編譯:
需要事先清理操作:
# make clean:清理大多數編譯生成的文件,但會保留config文件等
# make mrproper: 清理所有編譯生成的文件、 config及某些備份文件
# make distclean: mrproper、 patches以及編輯器備份文件
6: 卸載內核
刪除/lib/modules/目錄下不需要的內核庫文件
刪除/usr/src/linux/目錄下不需要的內核源碼
刪除/boot目錄下啟動的內核和內核映像文件
更改grub的配置文件,刪除不需要的內核啟動列表

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,690評論 2 370

推薦閱讀更多精彩內容

  • 我們說的Linux其實指的就是 內核(kernel)而已。這個內核控制你主機的所有硬件并提供系統所有的功能,所以它...
    Zhang21閱讀 7,440評論 0 18
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數據革命閱讀 12,191評論 2 33
  • Ubuntu的發音 Ubuntu,源于非洲祖魯人和科薩人的語言,發作 oo-boon-too 的音。了解發音是有意...
    螢火蟲de夢閱讀 99,409評論 9 467
  • 準備工作: 準備好開發環境 獲取目標主機上硬件設備相關信息 獲取目標主機系統功能的相關信息 獲取內核源代碼www....
    扎啤閱讀 418評論 0 0
  • #你好,我叫白暖瑾。你失眠嗎?讓我來給你講個故事吧# 何事唱離歌,卻唱不響曾經的誓言。 “喂,你好。” “暖瑾啊。...
    蘇藎郃閱讀 238評論 0 7