Ubuntu16.04修改內核啟動


  寫這篇文章一是為了對遇到同樣問題的人提供一個參考,二來也是為了自己便於總結和查閱。希望大神勿噴。

  好了,廢話不多說了,轉入正題。

  前幾天給自己的電腦裝了個Ubuntu16.04LTS,自己順手就把里邊的軟件什么的升級了一下。不知怎么地把內核升級到了4.8.0-26-generic,然后電腦就USB老出毛病(在開機之前插上優盤的話可以讀出優盤,開機后插上就沒反應,但USB可以有電)。耳機也不能用了,喇叭也沒聲音。自己也不懂怎么回事,就各種百度,Google。網上好多人說是內核和硬件不兼容,一般把顯卡驅動卸載了就好了。我試了一下沒有成功。后來注意到開機的時候提示Failed to start Load Kernel Modules。然后就轉戰內核方向。

  看到也有網友遇到相似問題,並提出了解決方法(http://askubuntu.com/questions/809199/failed-to-start-load-kernel-modules-ubuntu-16-04)。然而我的問題並未如願解決。然后想到了修改啟動配置文件,更改系統默認加載的內核。

grep menuentry /boot/grub/grub.cfg

 

1.該命令顯示內核的啟動順序,比如:

zgw@zgw-ThinkPad:~$ grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" menuentry_id_option="" export menuentry_id_option menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5bce3795-da96-4c6f-bed2-67d37185a77d' { submenu 'Ubuntu 高級選項' $menuentry_id_option 'gnulinux-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu,Linux 4.8.0-26-lowlatency' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-lowlatency-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu, with Linux 4.8.0-26-lowlatency (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-lowlatency-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu, with Linux 4.8.0-26-lowlatency (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-lowlatency-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu,Linux 4.8.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu, with Linux 4.8.0-26-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu, with Linux 4.8.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-45-generic-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu,Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu, with Linux 4.4.0-21-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Ubuntu, with Linux 4.4.0-21-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' { menuentry 'Memory test (memtest86+)' { menuentry 'Memory test (memtest86+, serial console 115200)' {

 

2. 假設你要以4.4.0-21內核版本啟動,則將文件/etc/default/grub中 

        

GRUB_DEFAULT=0 

改為 

GRUB_DEFAULT=6

或者改為

GRUB_DEFAULT=”Ubuntu,Linux 4.4.0-21-generic“

 保存后

3. 然后使用命令sudo update-grub

4.重新啟動后輸入uname -r查看,內核即為想要的內核。

   

然而我的沒成功,沒辦法,只能卸載內核了=========》》看到有牛人的方法(http://www.linuxidc.com/Linux/2016-05/131143.htm),順便就使用了,在此不再做贅述。

  我在恢復模式用低版本內核進入系統后,檢查不到4.8.0-26-generic內核,不知道是什么原因。命令如下:

 dpkg -l | tail -n +6| grep -E 'linux-image-[0-9]+'| grep -Fv $(uname -r) 

 

 

最后沒辦法,抱着死馬當活馬醫的想法。

5.直接把/boot/中4.8.0-26相關的文件及文件夾全部刪除。命令如下:

sudo rm -rf *4.8.0-26*

6.然后修改了配置文件:/boot/grub/grub.cfg

sudo cp /etc/boot/grub/grub.cfg /etc/boot/grub/grub.cfg.bak.zgw
sudo vim  /etc/boot/grub/grub.cfg

7.找到如下代碼塊(我的為148,149行):

linux    /vmlinuz-4.8.0-26-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro  quiet splash $vt_handoff
    initrd    /initrd.img-4.8.0-26-generic

將其改為自己想使用的內核,我的如下:

linux    /vmlinuz-4.4.0-45-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro  quiet splash $vt_handoff
    initrd    /initrd.img-4.5.0-45-generic

8.然后重啟電腦就可以了,如若不行,請找如下代碼塊(我的為151行)。

submenu 'Ubuntu 高級選項' $menuentry_id_option 'gnulinux-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' 

9.將此行代碼下的與4.8.0-26相關的代碼全部刪除(我的為152~263行)然后重啟就可以了。

menuentry 'Ubuntu,Linux 4.8.0-26-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.0-26-generic-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 88421677-a988-4ff9-bf29-6c56aa4a9027 else search --no-floppy --fs-uuid --set=root 88421677-a988-4ff9-bf29-6c56aa4a9027 fi echo '載入 Linux 4.8.0-26-generic ...' linux /vmlinuz-4.8.0-26-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro quiet splash $vt_handoff echo '載入初始化內存盤...' initrd /initrd.img-4.8.0-26-generic } menuentry 'Ubuntu, with Linux 4.8.0-26-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.0-26-generic-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 88421677-a988-4ff9-bf29-6c56aa4a9027 else search --no-floppy --fs-uuid --set=root 88421677-a988-4ff9-bf29-6c56aa4a9027 fi echo '載入 Linux 4.8.0-26-generic ...' linux /vmlinuz-4.8.0-26-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro quiet splash $vt_handoff init=/sbin/upstart echo '載入初始化內存盤...' initrd /initrd.img-4.8.0-26-generic } menuentry 'Ubuntu, with Linux 4.8.0-26-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.0-26-generic-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' { recordfail load_video insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 88421677-a988-4ff9-bf29-6c56aa4a9027 else search --no-floppy --fs-uuid --set=root 88421677-a988-4ff9-bf29-6c56aa4a9027 fi echo '載入 Linux 4.8.0-26-generic ...' linux /vmlinuz-4.8.0-26-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro recovery nomodeset echo '載入初始化內存盤...' initrd /initrd.img-4.8.0-26-generic } menuentry 'Ubuntu,Linux 4.8.0-22-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.0-22-generic-advanced-5bce3795-da96-4c6f-bed2-67d37185a77d' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 88421677-a988-4ff9-bf29-6c56aa4a9027 else search --no-floppy --fs-uuid --set=root 88421677-a988-4ff9-bf29-6c56aa4a9027 fi echo '載入 Linux 4.8.0-22-generic ...' linux /vmlinuz-4.8.0-22-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro quiet splash $vt_handoff echo '載入初始化內存盤...' initrd /initrd.img-4.8.0-22-generic } menuentry 'Ubuntu, with Linux 4.8.0-22-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.0-22-generic-init-upstart-5bce3795-da96-4c6f-bed2-67d37185a77d' { recordfail load_video gfxmode $linux_gfx_mode insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 88421677-a988-4ff9-bf29-6c56aa4a9027 else search --no-floppy --fs-uuid --set=root 88421677-a988-4ff9-bf29-6c56aa4a9027 fi echo '載入 Linux 4.8.0-22-generic ...' linux /vmlinuz-4.8.0-22-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro quiet splash $vt_handoff init=/sbin/upstart echo '載入初始化內存盤...' initrd /initrd.img-4.8.0-22-generic } menuentry 'Ubuntu, with Linux 4.8.0-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.0-22-generic-recovery-5bce3795-da96-4c6f-bed2-67d37185a77d' { recordfail load_video insmod gzio if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 88421677-a988-4ff9-bf29-6c56aa4a9027 else search --no-floppy --fs-uuid --set=root 88421677-a988-4ff9-bf29-6c56aa4a9027 fi echo '載入 Linux 4.8.0-22-generic ...' linux /vmlinuz-4.8.0-22-generic root=UUID=5bce3795-da96-4c6f-bed2-67d37185a77d ro recovery nomodeset echo '載入初始化內存盤...' initrd /initrd.img-4.8.0-22-generic }

 

10.總結,經過大半個下午的折騰,終於可以正常使用了。我感覺直接執行第7步就可以。只是個人感覺而已,並沒有經過實踐檢驗。第一次寫博客,如有不足請大家多加指正。引用了兩個鏈接,參考了許多網友的想法,如涉及原創者版權問題,請及時聯系,必當第一時間修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM