前言
Linux內核(英語:linux kernel),是一種計算機操作系統內核,已C語言和匯編語言寫成,匹配POSIX標准,以GNU通用公共許可證發布。從技術上說Linux只是一個內核。“內核”指的是一個提供硬件抽象層、磁盤及文件控制、多任務等功能的系統軟件。
內核是操作系統的核心,也是操作系統最基本的部分。Linux內核工作在模塊化的方式下並且這些模塊可以動態的卸載和裝載;所以在很多公司面臨不同的實際應用時都會編譯內核定制相關的內核模塊配置相關的內核參數以達到需求並剔除不需要內核模塊。
目錄
前言
一、編譯前准備
1、准備開發環境
2、獲取目標主機硬件設備相關信息:
3、獲取目標主機系統功能的相關信息
4、獲取內核源碼
二、編譯前准備
1、安裝開發包組
2、下載源碼文件及解壓
3、准備配置文件
三、編譯開始
1、首先給執行make menuconfig 命令(該命令在源碼目錄下執行)
2、選擇我們需要啟動的內核模塊。
3、開始進行編譯
4、make modules_install:安裝模塊
5、make install :安裝內核相關文件
·6、編輯grub配置文件
四、補充:
1、大概步驟:
2、編譯配置選項
3、編譯
4、編譯內核
5、清理刪除
一、編譯前准備
1、准備開發環境
開發包組(CentOS6)
Server platform development
Development toos
2、獲取目標主機硬件設備相關信息:
CPU:
cat /proc/cpuinfo
x86info –a
lscpu
PCI設備:
lspci -v (-vv 詳細)
lsusb -v -vv
lsblk 塊設備
了解全部硬件設備信息
hal-device
3、獲取目標主機系統功能的相關信息
例如:需要啟用相應的文件系統
這個實驗裡我們需要將NTFS文件系統格式啟用。
在實際的應用中可能需求更為復雜。
4、獲取內核源碼
www.kernel.org
二、編譯前准備
1、安裝開發包組
1 #yum groupinstall Development toos
2、下載源碼文件及解壓
tar –xvf linux4.8.10.tar.xz (很多人說要解壓在/usr/src其實都一樣這裡實驗環境就沒有講究那麼多至新建了一個kernel目錄。)
3、准備配置文件
#cp /boot/config-2.6.32-573.el6.x86_64 /root/kernel/linux-4.8.10
#mv config-2.6.32-573.el6.x86_64 .config
#grep NTFS .config
# CONFIG_NTFS_FS is not set
解釋一下上面的兩步:
從boot目錄拷貝一個config文件過來主要是為了方便,這個文件裡保存都是之前你在安裝系統是內核所安裝的模塊,這裡拷貝過來為了主要為了方便演示,具體各位以後在應用中需要什麼的模塊那各位就自己去篩選了(雖然這種工作幾乎不會做當然除非有特殊需求的,既然剛剛來看這篇文章,那我相信你的老板也不放心讓你去這樣做。開個玩笑 哈。。)
至於 grep NTFS .confg (這裡只是想讓大家看下NTFS這個內核模塊沒有啟動的下面在編譯的時候我們就將NFTS啟用)
三、編譯開始
1、首先給執行make menuconfig 命令(該命令在源碼目錄下執行)
第一步先給以後內核加個名稱 。
2、選擇我們需要啟動的內核模塊。
在打開這個配置界面的第一個界面下依次選擇 File systems -- > DOS/FAT/NT file systems -- > NTFS file systems support (利用空格鍵選中。[ ] N [M] 表示將模塊打在ramdisk中 [*] y 表示將模塊打在內核中。本實驗將NTFS模塊打在ramdisk中。 )
退出保存 之後
grep NTFS .config (看圖就明白了)
3、開始進行編譯
因為遠程編譯可能終端如果斷開那那就前功盡棄了 ,所以諸位在編譯前最好使用screen 這樣即使終端斷開也不用擔心編譯中斷了。
# make -j 4(cpu 核心數 單一核心就不用寫了) (該命令在源碼目錄下執行) 編譯過程可能需要一段時間機器性能好的話 幾分鐘性能不好的話半小時以上。編譯過程總可能會報錯最多的報錯就是openssl 各位大可以提前安裝(yum 安裝就好)
4、make modules_install:安裝模塊
執行命令 make modules_install 就好了
5、make install :安裝內核相關文件
執行命令 make install 安裝內核相關文件,主要目的將所有的編譯之後的內
容拷貝安裝到相應的目錄。
6、編輯grub配置文件
補充:
1、大概步驟:
1、安裝開發包組
2、下載源碼文件
3、.config:准備文本配置文件
4、make menuconfig:配置內核選項
5、make [-j #]
6、make modules_install:安裝模塊
7、make install :安裝內核相關文件
安裝bzImage為/boot/vmlinuz-VERSION-RELEASE (去boot目錄下查看)
生成initramfs文件
8、編輯grub的配置文件
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以及編輯器備份文件
卸載內核
刪除/lib/modules/目錄下不需要的內核庫文件
刪除/usr/src/linux/目錄下不需要的內核源碼
刪除/boot目錄下啟動的內核和內核映像文件
更改grub的配置文件,刪除不需要的內核啟動列表
最後寫的不怎麼樣 ,望諸位見諒 希望朋友們能夠有所收獲。