寫這篇文章一是為了對遇到同樣問題的人提供一個參考,二來也是為了自己便於總結和查閱。希望大神勿噴。
好了,廢話不多說了,轉入正題。
前幾天給自己的電腦裝了個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步就可以。只是個人感覺而已,並沒有經過實踐檢驗。第一次寫博客,如有不足請大家多加指正。引用了兩個鏈接,參考了許多網友的想法,如涉及原創者版權問題,請及時聯系,必當第一時間修改。