前言
嗯,延续惯例,介绍背景+吐槽。
如有缘看到此文,并有可以参考的地方,请看完全文再进行,否则后果自负。
背景:
实验室能供我瞎造的linux系统是装的Ubuntu18.04,内核5.4.0-73-generic,然而吧,这RealSense SDK2.0只支持4.4、4. 8、4.10、4.13、4.15及4.16。
诶,还能咋滴,开始csdn查:“Ubuntu18.04怎么降内核?”
很快啊,按着教程装了个4.15.0-135-generic的,但是不知道怎么切换内核,想着反正也不要5.4版本的,就按着教程rm
掉呗(嗯,我就是个憨憨),最后系统只剩一个4.15的内核,可以,reboot
。
结果,检测不到网卡和无线的驱动,人傻,又开始csdn:“Ubuntu系统无法联网”,然而搞了半天,按着各种方法都没有什么用,要么是虚拟机的,要么是刚安装完后找不到网络的,最后当然是选择重下内核,替代。其实整个的思想就是重新下载内核,删除不需要的内核。
因为走了很多弯路,故记录过程,留给以后的自己和像我一样碰到此情此景不知所措的小小白,各位dalao不喜勿喷。
设备信息:
操作环境:Ubuntu18.04
内核信息:初始:5.4.0-73-generic;终版:4.15.0-041500-generic+5.4.0-050400-generic
一、下载更新选择内核
step1:编辑/etc/apt/sources.list
文件,在最后一行加入
deb http://security.ubuntu.com/ubuntu trusty-security main
step2:更新sudo apt-get update
step3:下载自己所想要的内核
sudo apt-get install linux-image-4.15.0-135-generic
我此时下载安装的是linux-image-4.15.0-135-generic
step4:查看是否安装成功
dpkg --get-selections| grep linux-image-4.15.0-135-generic
step5:编辑vim /etc/default/grub
文件,找到GRUB_DEFAULT=0
将它修改为
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0-135-generic"
优先选择这个登陆。
step6:更新一下 Grub 引导
sudo update-grub
step7:重启系统
sudo reboot
不出意外,重启后就是新的内核了,可以使用命令:uname -r
查看当前的内核。
二、摸索到解决
1.噩梦伊始
然而吧,我就是启动不起来,于是乎我查找第二篇教程,这篇教程也可以说是对一个新手噩梦的开始,因为我启动不起来,所以按着第二个教程一步步操作,删除了原内核,只在系统中留一个内核,结果自闭。
不是教程作者的锅哈,只不过对于小白来说不是很友好,但作者没有引导读者从Grub选择内核的角度登陆,我就觉得不是很合理。
过程记录如下:
step1:在更新Grub 引导
sudo update-grub
可以看到此时系统的内核核心文件(这是我现在的系统信息,之前没截图)
教程教我的是,把高版本的文件核心文件删去,即
step2(这一步是否执行,自己斟酌):
sudo rm -rf /boot/vmlinuz-5.4.0-73-generic
sudo rm -rf /boot/initrd.img-5.4.0-73-generic
注:查过很多帖子有许多开发者表明,不会轻易使用rm
命令,后果难保。
step3:删除系统中多余的内核软件包,把不需要的删掉
先看看安装了什么内核:sudo dpkg --get-selections |grep linux
(此处无图,忘了截图…)
内核后标明install
的就是此时系统中存在的软件包,有的内核后面是deinstall
,那些也可以直接删除:
sudo dpkg -P linux-headers-5.4.0-73-generic //dpkg安装的内核仍然用dpkg删除,具体删除内容自己参考自己系统的文件情况
sudo apt autoremove linux-headers-5.4.0-73-generic //apt安装的内核用apt删除,具体删除内容自己参考自己系统的文件情况
sudo apt purge linux-headers-5.4.0-73-generic //同上
step4:最后更新一下Grub:sudo update-grub
小结:再次更新Grub 引导就只剩上文安装好的4.15.0-135-generic
内核,然后重启,确实是4.15.0-135-generic
内核了,因为系统里只有一个内核。
而,这个新内核却无任何的网卡驱动,连我外置的无线模块都识别不到,更别提原本就有的有线网卡了。如果我没有把原来的内核rm和卸载的话,我就可以切换到另一个内核进行一些处理。
所以指出上述做法有弊端,故在升级和降级应保留多个内核,用引导的方式决定每次进入哪个内核,提高容错率。
2.噩梦降临
由于没有网络,所以csdn中任何在系统中apt install的我通通做不了。
什么ifconfig后的eth0…也跟我没关系,只能尝试着做一些完全不需要网络的尝试,如:service NetworkManager stop、start、restart之类的,毕竟也不知道是什么问题。
后面冷静下来思考是不是驱动问题,想重新下驱动,但是没有找到单独下驱动的方法,一般的帖子写的都是“刚安装完Ubuntu系统却无法联网”,这种直接在映像文件中的找到bcmwl-kernel-source_xxxxxx_amd64.deb
包重新安装一次即可(这里推荐一个比较好的帖子[4]),但是我不是原来映像文件中的内核,而且删了原来内核的核心文件,嗯,原地爆炸。
我连usb共享手机网络都试了,结果也还是连不上网,卡住…
3.梦醒时分
嗯,想办法重新下新的内核覆盖,然后就成了呗。
内核下载网址([3]博主提供):
https://kernel.ubuntu.com/~kernel-ppa/mainline/
step1:我直接在能联网的Windows系统中,登入网站,在网站中下载自己想要的版本,以5.4.0
为例,
64位电脑,则找到Build for amd64 …,如果是其他芯片就找到对应项目:
下载图中不包含lowlatency的所有安装包,4.17之后的版本有module的包,所以一共下载4个包;而4.17之前的没有,一共下载3个包。
注:linux的内核除了generic(通用)类型外还有至少3种:lowlatency(低延时)、preempt(抢占式)和realtime(实时),该网站好像就只有generic和lowlatency,一般选择generic。
step2:用U盘拷贝到Ubuntu系统中(没网嘛,有什么办法),用命令行sudo dpkg -i
安装刚刚下载的包:
// 可以依次安装
sudo dpkg -i linux-headers-5.4.0-050400.201911242031_all.deb
sudo dpkg -i linux-headers-5.4.0-050400-generic_5.4.0-050400.201911242031_amd64.deb
sudo dpkg -i linux-image-unsigned-5.4.0-050400-generic_5.4.0-050400.201911242031_amd64.deb
sudo dpkg -i linux-modules-5.4.0-050400-generic_5.4.0-050400.201911242031_amd64.deb
//也可以把他们放在一个文件夹下一块安装
sudo dpkg -i linux*
//如果安装过程报错,执行一下命令修复
sudo apt-get -f install
//如果无法修复,则需要依次安装每个包,查看缺少了什么依赖。然后手动安装上去。
step3:更新Grub引导并重启
sudo update-grub
sudo reboot
重新开机后查看内核uname -a
,应该可以看到默认使用的是最新版本的内核。
4.设置引导界面以显示引导界面(多内核共存,重点)
先打开/etc/default/grub
文件
如图所示,将GRUB_DEFAULT=0
,将GRUB_TIMEOUT_STYLE=hidden
注释掉,然后GRUB_TIMEOUT=10
(选择时间只有10s,你可以根据自己的想法设置长或者短一点),最后将GRUB_CMDLINE_LINUX_DEFAULT="text"
。
就可以在启动Ubuntu系统的时候,选择不同的内核系统进行,实现多内核共存。
总结
作为小白,除了经验不足、学识浅薄之外,最主要的问题是还是遇事没办法冷静分析,一上来就想着打开csdn对话框,然后如果找不到答案就重装系统,这都是不可取的。
这篇文章中走的很多弯路其实都是因为不愿思考、不善思考,问题并不难解决。
希望往后的自己可以多思考、冷静分析、提高做事情的效率。
Reference
[1]. https://www.cnblogs.com/minseo/p/13065321.html
[2]. https://blog.csdn.net/qq_32590631/article/details/114868606
[3]. https://blog.csdn.net/surtol/article/details/102497572
[4]. https://blog.csdn.net/ifmvo/article/details/54023628