Ubuntu 的内核升级,切换以及删除

Ubuntu 的内核升级,切换以及删除

1 背景

最近公司新到了几台Franka Emika 的七轴机械臂Panda,赶紧抓住机会捣鼓一下,毕竟是ROS中MoveIt!教程的官方机械臂。官方的desk编程操作当然没有问题,所以决定使用FCI(Franka Control Interface),体验下MoveIt!。FCI是啥我也就不说了,主要是为了使用FCI,官方教程要求更新Ubuntu内核,使用带RT后缀的实时内核来保证与机械臂通信的实时性,这就涉及内核的升级与切换等问题,下面是捣鼓内核的一些小总结。

2 普通内核升级

2.1 查看当前系统内核版本

在终端中执行如下命令可以查看当前内核版本

uname -r

2.1 下载目标版本的内核文件

Ubuntu内核网站:http://kernel.ubuntu.com/~kernel-ppa/mainline/

在网站选择对应的内核版本,FCI教程中是以v4.14.12为例,那这边也就将v4.14.12作为目标版本,

在其详细介绍页面根据硬件架构选择内核版本,由于FCI安装在64位Ubuntu的笔记本上,故下载AMD64相关内核文件

下载如下三个文件,可以使用wget命令也可以直接点击下载。

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.12/linux-headers-4.14.12-041412_4.14.12-041412.201801051649_all.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.12/linux-headers-4.14.12-041412-generic_4.14.12-041412.201801051649_amd64.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.12/linux-image-4.14.12-041412-generic_4.14.12-041412.201801051649_amd64.deb

2.2 安装内核文件

sudo dpkg -i *.deb

2.3 切换内核

安装成功后重启,默认会调用版本最高的内核使用,如果原始内核版本高于新安装内核版本,那么重启系统后查看内核版本会发现,仍然使用的是原始内核(及高版本),此时需要手动切换内核。

第一步:查询已安装的内核和内核的序号

grep menuentry /boot/grub/grub.cfg

Ubuntu 的内核升级,切换以及删除_第1张图片

仔细观察图中,menuentry底下还有submenu,submenu底下就包含了 带有缩进的 menuentry。以下是计数规则:

  • 第一个menuentry 的序号是0,第二个submenu的序号是1,以此类推
  • 在submenu中,第一个menuentry的序号是0,第二个是1,以此类推

例如,若命令显示结果如下: 

gaitech@franka:~$ 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-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	menuentry 'Ubuntu, with Linux 4.14.12-041412-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	menuentry 'Ubuntu, with Linux 4.14.12-rt10' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	menuentry 'Ubuntu, with Linux 4.14.12-rt10 (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	menuentry 'Ubuntu, with Linux 4.14.12-rt10 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {

则相应序号如下: 

gaitech@franka:~$ grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
0---menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
1---submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	0---menuentry 'Ubuntu, with Linux 4.14.12-041412-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	1---menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	2---menuentry 'Ubuntu, with Linux 4.14.12-041412-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-041412-generic-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	3---menuentry 'Ubuntu, with Linux 4.14.12-rt10' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-advanced-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	4---menuentry 'Ubuntu, with Linux 4.14.12-rt10 (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-init-upstart-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
	5---menuentry 'Ubuntu, with Linux 4.14.12-rt10 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.12-rt10-recovery-ef6d1105-4bb5-46a1-9ab5-a4a07860085c' {
2---menuentry 'Memory test (memtest86+)' {
3---menuentry 'Memory test (memtest86+, serial console 115200)' {

根据自己需要启动的内核版本来确定启动序号。

第二步:修改grub文件

sudo gedit /etc/default/grub

打开文件后修改GRUB_DEFAULT的值(注意>之前的空格),并保存

GRUB_DEFAULT="1 >3"  
#"1 >3"这个表示启动序号1中,子序号为3的启动项,即'Ubuntu, with Linux 4.14.12-rt10'
#若无子序号,则只需填入序号即可

关于GRUB_DEFAULT的值,有教程是写menuentry后单引号里的内容,但我尝试后不成功,故推荐使用数字序号。

第三步:更新grub文件,并重启

sudo update-grub
sudo reboot

此时检查内核版本即为目标版本,但此方法为修改默认启动项,当然也可以在开机时进入grub界面(如自动跳过,可在开机时长按Esc和Shift键进入选项界面),选择Ubuntu高级模式,再选择内核版本,这样的话为当次启动生效,下次启动还是会以默认内核启动。

2.4 删除内核

我们可以使用以下命令删除空闲内核(删除当前版本重启会使用低一级的已安装内核,如果是最后一个内核版本删除之后重启会进入BIOS界面)

sudo apt-get remove linux-image-4.4.0-75-generic


 

参考:https://blog.csdn.net/csdn_duomaomao/article/details/77668946

           https://blog.csdn.net/qq_42030961/article/details/82740315

你可能感兴趣的:(Ubuntu 的内核升级,切换以及删除)