內核源碼更新內核(以linux內核4.11.7為例子)
1. 內核更新前的工作准備
a. 系統:ubuntu16.04的Desktop版本,內核為linux-4.8.0;
b. 虛擬機VMware Workstation Pro 12,並安裝上述的ubuntu版本系統;
c. 配置好相應的ubuntu16.04的基本操作,包括安裝vim,nfs等必要包;
d. 在http://www.kernel.org上下載最新的內核源碼包,本文使用的為當時最新的內核源碼包linux-4.11.7.tar.xz。
2. 解壓內核源碼包
a. 在ubuntu16.04中的/usr/src中建立目錄linux-kernel-4.11:
sudo mkdir /usr/src/linux-kernel-4.11
b. 解壓內核源碼
sudo xz –d linux-4.11.7.tar.xz,得到 linux-4.11.7.tar的tar包;
sudo tar –xvf linux-4.11.7.tar,得到linux-4.11.7解壓源碼包。
3. 獲取內核源碼包的相關說明和配置編譯內核的最小要求的文檔
a. 進入linux-4.11.7目錄中,打開README文檔說明,查看到相關的文檔說明信息
在Documentation/admin-guide/README.rst中,然后打開它
b. 在README.rst文檔中,我們看到了對內核編譯的兩種方式,其中一種就是使用打
補丁的方式,另外一種就是現在我們在做的,使用源碼內核包來進行內核升級(
查看到144行,有教導我們如何編譯內核的方式)
c. 按照上述的文檔的方法,我們在自己的家目錄中建立相應的文件夾來進行編譯內核
本文使用的是host用戶名,建立目錄為
sudo mkdir –p /home/host/build/kernel
(這個目錄是隨自己建立的,但是不能建立在ubuntu和windowns共享的文件目錄下,因為有些鏈接文件是共享目錄無法建立的)
4. 獲取編譯內核的要求說明文檔
a. 進入Documentation目錄找到Changes這個文件,就是我們編譯內核的環境要求;
b. 打開Documentation/Changes這個文件,獲取重要信息;
c. 上述的信息中,第一列代表需要安裝的庫包,第二列表示第一列庫包的最小版本信息,第三列表示查詢當前系統這個包的命令,
沒有的添加之,版本不夠的就升級;
d. 可以在查詢之前升級當前系統的信息:
sudo apt-get update 升級當前新安裝的包信息;
sudo apt-get upgrade 升級系統附帶的最新包
5. 安裝編譯之前需要安裝另外一些庫文件和lib:
a. sudo apt-get install automake autoconf libtool 進行make和庫連接的關鍵
b. sudo apt-get install libssl-dev 防止出現openssl/ioensslv.h找不到
c. sudo apt-get install libncureses5-dev 防止出現curses.h沒有找到
d. sudo apt-get install build-essential 防止出現系統建立build時候出錯
6. 進行編譯:
a. 按照Documentation/admin-guide/README.rst的所說,第一步先去掉linux-kernel-4.11源碼包中的所有.o文件(在文檔的112行);
sudo make mrproper
b. 轉到141行的內容,按照相應的步驟進行編譯;
i. 配置內核,生成.config文件:
sudo make O=/home/host/build/kernel menuconfig
在里面我們不需要修改任何東西,然后點擊Save,然后確定保存的名字為.config不變,
這樣就會在我們的/home/host/build/kernel/中出現了.config這個配置文件;
ii. 編譯內核(這里一次性編譯bzImage和modules):
sudo make O=/home/host/build/kernel –j4
其中,-j4表示以4線程的方式進行編譯內核,這樣會比較快,因此筆者的電腦vmwere配置成2核的,
所以使用4線程的方式編譯,節省編譯的時間;
iii: 安裝內核和模塊到現有的內核中:
sudo make O=/home/host/build/kernel modules_install install
其中 modules_install為安裝模塊,install為安裝內核
iv. 到此,如果沒有出現任何問題的話,內核的編譯就已經完成了。
7. 替換當前系統
a. 找到4.11.07在/lib的位置,並進行mkinitramfs操作:
sudo find /lib -iname "4.11.7",得到路徑為:/lib/modules/4.11.7,那么執行
mkinitramfs /lib/modules/4.11.7 /boot/initrd.img-4.5.0
(注意這時候還是在源碼目錄中的)
b. 修改啟動的grub
安裝grub: sudo apt-get install grub2
更改啟動: update-grub2
重啟系統: reboot
查詢內核版本: uname -r