Ubuntu16.04修改內核啓動

  寫這篇文章一是爲了對遇到一樣問題的人提供一個參考,二來也是爲了本身便於總結和查閱。但願大神勿噴。linux

  好了,廢話很少說了,轉入正題。ios

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

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

grep menuentry /boot/grub/grub.cfg

 

1.該命令顯示內核的啓動順序,好比:ide

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中 ui

        

GRUB_DEFAULT=0 

改成 spa

GRUB_DEFAULT=6

或者改成code

GRUB_DEFAULT=」Ubuntu,Linux 4.4.0-21-generic「

 保存後orm

3. 而後使用命令sudo update-grubhtm

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步就能夠。只是我的感受而已,並無通過實踐檢驗。第一次寫博客,若有不足請你們多加指正。引用了兩個連接,參考了許多網友的想法,如涉及原創者版權問題,請及時聯繫,必當第一時間修改。

相關文章
相關標籤/搜索