Ubuntu16.04切换系统内核

1.遇到的问题
你本来已经装好显卡驱动了,然后在某次重启后:屏幕分辨率变低了;终端输入nvidia-smi,报错

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.Make sure that the latest NVIDIA driver is installed and running

比如下图;安装显卡驱动时,提示kernal module有错(一般Error中只要涉及到kernal的,都是这个问题)也就是内核有问题。
Ubuntu16.04切换系统内核
就是内核进错了(查看内核的方法:终端输入uname -r),这里提供两种解决方法。
2.解决方法
方法一(暂时解决问题,永久解决请移步方法二):

  • 对于双系统的用户来说,启动过程中会有选择启动项,这时选择ubuntu高级设置,切换一下内核就可以了(选择像ubuntu 4.15.0.45-generic,不要选后面带有recovery mode或upstart)。
  • 如电脑只装了一个linux,有时候开机不会有选择启动项,那么你在开机的时候一直按ESC键就可以了(不要按得太快了,不然当出现选择界面时,由于按下ESC会直接启动),然后选择内核。
  • 方法一虽然能进入系统,并且显卡驱动等都正常,但重启后又回到起点,每次都手动选择的话太麻烦了,因此可以参照方法二。

方法二(永久解决问题)
1.首先找到内核名称。

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-3a45027c-15ed-4cec-a233-7c3927e74d11' {
submenu 'Ubuntu 高级选项' $menuentry_id_option 'gnulinux-advanced-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu,Linux 4.15.0-43-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-43-generic-advanced-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu, with Linux 4.15.0-43-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-43-generic-init-upstart-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu, with Linux 4.15.0-43-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-43-generic-recovery-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu,Linux 4.15.0-33-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-33-generic-advanced-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu, with Linux 4.15.0-33-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-33-generic-init-upstart-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu, with Linux 4.15.0-33-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-33-generic-recovery-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu,Linux 4.15.0-29-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-29-generic-advanced-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu, with Linux 4.15.0-29-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-29-generic-init-upstart-3a45027c-15ed-4cec-a233-7c3927e74d11' {
	menuentry 'Ubuntu, with Linux 4.15.0-29-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-29-generic-recovery-3a45027c-15ed-4cec-a233-7c3927e74d11' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {
menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-246AF2746AF241DA' {

比如我当前的内核是Ubuntu,Linux 4.15.0-43-generic
我现在要切换为Ubuntu,Linux 4.15.0-33-generic
2.切换方法
使用如下指令打开grub文件

sudo gedit /etc/default/grub

修改grub文件中的GRUB_DEFAULT=“Ubuntu,Linux 4.15.0-33-generic”.
然后执行sudo update-grub
这时候会有WARNING提示修改GRUB_DEFAULT的名称

Warning:Please don't use old title `Ubuntu,Linux 4.15.0-33-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu,Linux 4.15.0-33-generic' (for versions before 2.00) or `gnulinux-advanced-f21f12ec-7e7a-4ffc-9284-f51686f360c8>gnulinux-4.15.0-33-generic-advanced-f21f12ec-7e7a-4ffc-9284-f51686f360c8' (for 2.00 or later)

根据提示可以使用Advanced options for Ubuntu>Ubuntu,Linux 4.15.0-33-generic
或者gnulinux-advanced-f21f12ec-7e7a-4ffc-9284-f51686f360c8>gnulinux-4.15.0-33-generic-advanced-f21f12ec-7e7a-4ffc-9284-f51686f360c8
将上面的代码放在GRUB_DEFAULT=‘’单引号里面

GRUB_DEFAULT=‘gnulinux-advanced-f21f12ec-7e7a-4ffc-9284-f51686f360c8>gnulinux-4.15.0-33-generic-advanced-f21f12ec-7e7a-4ffc-9284-f51686f360c8’

两个最好都试一下

然后执行sudo update-grub
然后重启sudo reboot
我这里经过测试,启动过程中,如果出现选择启动项界面(如第一幅图,这里默认选的是Advanced options for Ubuntu),那什么都不要动,他自己过一会就会选默认的选项进去,进去以后发现内核正常,显卡驱动等都可以正常使用;如果选了上面的Ubuntu(第二幅图)那就可能内核出错。
Ubuntu16.04切换系统内核
Ubuntu16.04切换系统内核
参考
https://blog.****.net/cf_wu95/article/details/85984956