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

仔细观察图中,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.youkuaiyun.com/csdn_duomaomao/article/details/77668946

           https://blog.youkuaiyun.com/qq_42030961/article/details/82740315

### 升级 Ubuntu 22.04 的内核版本 为了在 Ubuntu 22.04 上升级到最新的内核版本,可以按照以下方法操作。这涉及下载并安装所需的内核包以及配置启动选项。 #### 准备工作 确保系统的软件源已更新至最新状态,并且系统处于正常运行的状态: ```bash sudo apt update && sudo apt upgrade -y ``` #### 安装新内核 如果要手动安装特定版本的新内核,则需要分别安装 `linux-headers`、`linux-image` 和 `linux-modules` 系列的包。例如,对于目标内核版本 6.8.2 PREEMPT_RT: 1. **获取所需内核文件** 可以通过官方仓库或者第三方资源(如 [Kernel.org](https://www.kernel.org/) 或者 [Ubuntu Mainline Kernel PPA](https://kernel.ubuntu.com/~kernel-ppa/mainline/))下载对应的内核文件。假设已经找到适合的目标内核版本 6.8.2 并将其下载到本地目录 `/tmp/kernel/` 中[^1]。 2. **安装内核组件** 使用 `dpkg` 命令依次安装头文件、镜像和其他模块支持包: ```bash cd /tmp/kernel/ sudo dpkg -i *.deb ``` 3. **处理依赖关系** 如果存在未满足的依赖项,可以通过以下命令解决: ```bash sudo apt --fix-broken install ``` #### 配置 GRUB 启动菜单 完成上述步骤后,GRUB 引导加载程序会自动检测新增加的内核条目。然而,可能还需要手动调整默认启动顺序来指定新的内核作为首选项。 1. 编辑 GRUB 默认设置文件: ```bash sudo nano /etc/default/grub ``` 2. 修改其中的关键参数如下所示: ```plaintext GRUB_DEFAULT="saved" GRUB_SAVEDEFAULT=true ``` 这样可以让下次开机时保存最后一次选择的内核作为默认值[^3]。 3. 更新 GRUB 菜单列表: ```bash sudo update-grub ``` #### 测试新内核 重新启动计算机以应用更改: ```bash sudo reboot ``` 在启动过程中按住 Shift 键进入高级选项界面,从中挑选刚刚安装好的新内核版本进行测试。确认无误后再删除旧版冗余内核释放磁盘空间。 --- ### 注意事项 - 在执行任何重大变更之前,请备份重要数据以防万一出现问题无法恢复。 - 若尝试切换回之前的稳定环境失败,可通过 Live CD 方式修复系统或降级内核版本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值