內核源碼更新內核(以linux內核4.11.7爲例子)linux
1. 內核更新前的工做準備ubuntu
a. 系統:ubuntu16.04的Desktop版本,內核爲linux-4.8.0;vim
b. 虛擬機VMware Workstation Pro 12,並安裝上述的ubuntu版本系統;ide
c. 配置好相應的ubuntu16.04的基本操做,包括安裝vim,nfs等必要包;ui
d. 在http://www.kernel.org上下載最新的內核源碼包,本文使用的爲當時最新的內核源碼包linux-4.11.7.tar.xz。es5
2. 解壓內核源碼包spa
a. 在ubuntu16.04中的/usr/src中創建目錄linux-kernel-4.11:線程
sudo mkdir /usr/src/linux-kernel-4.113d
b. 解壓內核源碼blog
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