儀器設備:虛擬機Vmware12 + Ubuntu 16.04(內核linux4.8.0)
虛擬機與ubuntu的安裝見我的上兩篇博客,本文步驟是本人親測編譯成功的,所以有一定的參考價值
linux內核編譯完整步驟如下:
1. 查詢自己系統的內核版本號: cat /proc/version
爲什麼要查詢自己的內核版本號?因爲最好你要編譯的內核與你現在的系統內核版本屬於同一系列的,比如我的操作系統內核版本爲4.8.0-49,而我要編譯的內核版本號爲4.8.0。 如果不一樣的話會出現各種讓人頭疼的問題(我前期裝的4.4版本的,一直報錯。。),所以一致的話最起碼環境配置都會一樣的,不存在兼容問題
2. 查詢ubuntu倉裏有哪些版本的內核: sudo apt-get search linux-source
會出現好多內核版本,選擇合適的版本進行下載
3. 下載linux內核: sudo apt-get install linux-source-X.X.X(對應的版本 比如我的linux-source-4.8.0)
強烈建議通過此方式下載linux源,我試過先從瀏覽器下載好內核壓縮包,再解壓安裝,裝了三次都出現了問題,所以避免麻煩還是從倉庫裏下載吧
4. 下載後會在/usr/src裏出現linux-source-4.8.0 與linux-source-4.8.0.tar.bz2兩個文件。將壓縮文件linux-source-4.8.0.tar.bz2解壓
sudo tar -xjvf linux-source-4.8.0.tar.bz2
默認會裝在linux-source-4.8.0文件夾裏
5. 進入linux-source-4.8.0文件夾:cd /usr/src/linux-source-4.8.0
6. 配置.config文件
① 如果不是第一次編譯內核,一定要執行 sudo make mrproper,清理以前留下的臨時文件
② 如果是編譯內核的新手,對config的具體配置感到無從下手,建議就按照原操作系統進行配置,將原先配置拷貝過來: sudo cp /boot/config-4.8.0-49-generic .config
(config-4.8.0-49-generic爲操作系統的配置, 這條語句要執行無誤,確保已經進入了linux-source-4.8.0目錄下,這樣.config才能複製到正確的位置)
接着執行 sudo make oldconfig (確認執行原有配置)
③ 如果自己想定製系統,那就執行: sudo make menuconfig(裏面的配置詳解見網址:http://blog.csdn.net/xuyuefei1988/article/details/8635539。這裏注意如果是在
虛擬機下編譯的,要把SCSI設備編譯進內核,不在虛擬機下編譯,加不加都可以)。在配置完成後會生成新的.config文件
配置.config文件的過程中會出現一些錯誤,解決辦法如下:
① fatal error: openssl/sha.h: No such file or directory之類的,是因爲缺少libssl-dev包
解決方法: sudo apt-get install libssl-dev
②curses.h: No such file or directory
解決辦法: sudo apt-get install libncurses5-dev libncursesw5-dev
7. 編譯內核: sudo make
時間較長,耐心等待(新的內核編譯過程已經優化, sudo make 相當於執行了 sudo make bzImage 和 sudo make modules兩步了)
8. 編譯和安裝內核模塊: sudo make modules_install
9. 安裝內核: sudo make install
10. 生成啓動: sudo mkinitramfs -o /boot/initrd.img-4.8.0
sudo update-initramfs -c -k 4.8.0
11. 再次重啓ubuntu要可以進入引導界面,以便於選擇用哪個內核啓動,所以配置grub使每次開機都可以進入引導界面: sudo gedit /etc/default/grub
在grub文件中用"#"註釋GRUB_HIDDEN_TIMEOUT=0語句: #GRUB_HIDDEN_TIMEOUT=0
12. 更新grub: sudo update-grub2
之後重啓ubuntu,自動進入引導界面,選擇自己編譯的內核,啓動。用"uname -r" 查看現在啓動的版本,如果是你編譯的版本,OK,大功告成!
後記:對於自己不想要的內核,如何刪除?
① 先查看有哪些內核版本在你的電腦上: sudo dpkg --get-selections | grep linux
② 刪除指定的版本: sudo apt-get remove linux-image-(接內核版本)
sudo apt-get remove linux-headers-(接內核版本)
③ 再次查看是否卸載:sudo dpkg --get-selections | grep linux
jdiwjediowjeijfiwe