linux開行版的自帶內核不一定能滿足linux學習和某些特殊的要求,這時我們就不得不根據自己的需求重新安裝內核。這裏我介紹一些常用編譯內核的步驟。
編譯內核
一、一定是下載滿足需求的內核啦。
官網:https://www.kernel.org/
p.s. 學習最新的內核,可以克隆linus在github的代碼:https://github.com/torvalds/linux
二、選擇內核配置:
進入下載好的源碼的根目錄下,輸入:
make menuconfig
選擇配置之後保存退出。之後在源碼的根目錄下會有.config文件。這個文件就是配置文件。
p.s.選擇默認選項的話:
make defconfig
p.s. 有時會將補丁打入內核,所有在make menuconfig之前,先打補丁:
patch -p1 < (PATCH_PATH)/(PATCH_NAME)。
參數 p1 :將補丁中的需要修改或添加的文件的第一級路徑省略。如:“a/include/linux/cgroup_subsys.h” 和省略 a/。
p.s. 如果需要當前內核的配置文件時,那麼就得克隆當前配置文件:
zcat /proc/config.gz > .config; make oldconfig。
p.s. make menuconfig可能不能使用,這是因爲缺少編譯環境。
sudo apt-get install libncurses5 libncurses5-dev build-essential kernel-package
問題就會迎刃而解
三、如果之後又修改過配置文件,或者在用已用的配置文件配置新的代碼樹的時候。應該驗證和更新配置:
make oldconfig
四、通過之上四步,內核已經配置好了,這是就可以編譯了。
make -j(cpu數×2)
五、安裝新內核。注意:必須是root用戶!
make modules_install --------------->可以把所有編譯好的模塊安裝到正確的主目錄/lib/modules下。
make install -----------> 自動將映像添加到/boot目錄下。
這是已安裝新內核了。重新啓動就可以選擇不同內核了。
p.s. ubuntu 發行版時,系統可能會自動隱藏grub菜單。所以必須修改grub文件:
打開 /etc/default/grub 註釋 GRUP_HIDDEN_TIMEOUT = 0 僅在前頭加一個#即可。
最後必須更新grub :
update-grub
卸載內核:
卸載自己編譯的內核
在/boot目錄下,存放着內核文件及鏡像:
/boot/vmlinuz*KERNEL-VERSION*
/boot/initrd*KERNEL-VERSION*
/boot/System-map*KERNEL-VERSION*
/boot/config-KERNEL-VERSION
/lib/modules
KERNEL-VERSION代表你想卸載的內核的版本號。依次刪除所示文件
最後必須更新grub :
update-grub。
卸載發行版自帶的內核
1、查找內核文件 :
dpkg --get-selections|grep linux 。
帶有image的就是內核文件。如:
linux-image-3.16-amd64 nstall
2、卸載:
sudo apt-get remove linux-image-(接內核版本)
最後必須更新grub :
update-grub