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

本文介绍如何在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

<think> 首先,用户查询是关于在Ubuntu系统中切换内核的脚本。系统指令要求我生成相关问题,并使用中文回答。我需要参考提供的引用内容。 回顾引用: - 引用[1]:提到使用脚本`sudo ubuntu-mainline-kernel.sh -i v5.11.0`来下载和安装指定版本的内核,以及`-u`选项来删除不需要的版本。 - 引用[2]:详细介绍如何安装和使用`ubuntu-mainline-kernel.sh`脚本,包括下载、授权、查看可用版本、安装指定版本等步骤。 - 引用[3]:类似,强调安装脚本和使用它来安装指定版本内核。 用户明确说:“我想查找用于在Ubuntu系统中切换内核的脚本 请问Ubuntu系统切换内核的脚本”。所以,我正在回答这个问题。 我的回答需要结构化清晰,逐步解决问题,并提供真实可靠的信息。既然系统指令要求生成相关问题,我应该在本回答后添加相关问题。 关键点来自引用: - 脚本名称是`ubuntu-mainline-kernel.sh`,可以从GitHub下载。 - 步骤包括: 1. 下载脚本。 2. 授权并移动到系统bin目录。 3. 查看可用内核版本。 4. 安装指定版本。 5. 管理已安装内核删除旧版本)。 6. 重启系统生效。 7. 如何在grub中设置默认内核(如果需要降级)。 我应该组织回答: 1. 介绍脚本的来源和用途。 2. 详细步骤如何安装和使用脚本。 3. 确保语法正确:行内数学表达式使用`$...$`,但这里可能不需要数学公式,除非有计算。独立公式用`$$...$$`,但这里也可能不需要。 4. 引用末尾添加引用标识,如`[^1]`、`[^2]`。 5. 最后生成相关问题。 用户上一次的问题和回答:从上下文看,用户可能是在讨论内核版本切换,但没有提供之前的对话。系统指令说:“参考站内引用”,并提供了引用,所以我主要基于这些。 回答结构: - 开头:直接回答问题。 - 主体:逐步解释如何使用脚本。 - 结尾:生成相关问题。 步骤: 1. 下载脚本:从GitHub获取`ubuntu-mainline-kernel.sh`。 2. 安装脚本:授权并移动到`/usr/local/bin/`。 3. 查看可用内核版本:使用`ubuntu-mainline-kernel.sh -l`。 4. 安装指定内核:使用`sudo ubuntu-mainline-kernel.sh -i <version>`。 5. 管理内核:使用`-u`查看用户安装的内核删除旧版本。 6. 重启生效:`sudo reboot`。 7. 如果需要切换回旧内核,编辑grub文件或使用启动菜单。 添加引用标识: - 在相关地方添加`[^1]`, `[^2]`, `[^3]`,因为它们来自引用。 生成相关问题: - 类似于示例中的方式,提出相关问题。 完整回答大纲: 1. 回答用户查询:提供脚本的详细信息。 2. 步骤: - 下载脚本。 - 安装脚本。 - 使用脚本安装内核。 - 管理内核版本。 3. 添加相关问题。 确保中文回答。 最终回答: - 先回答查询。 - 然后相关问题。 </think> ### Ubuntu系统切换内核的脚本 在Ubuntu系统中切换内核版本,可以使用官方维护的脚本`ubuntu-mainline-kernel.sh`。这个脚本允许用户轻松安装、管理和切换到指定版本的Linux内核,包括升级或降级操作。以下是基于引用内容的详细步骤指南(假设您已安装`wget`和必要的依赖)。整个过程需以root权限执行,确保操作安全可靠。 #### 步骤1: 下载和安装脚本 首先,从GitHub仓库下载脚本文件,并移动到系统可执行路径: ```bash # 下载脚本文件 wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh # 授予脚本执行权限,并移动到系统bin目录 chmod +x ubuntu-mainline-kernel.sh sudo mv ubuntu-mainline-kernel.sh /usr/local/bin/ ``` 此脚本由社区维护,可通过GitHub仓库访问:[pimlie/ubuntu-mainline-kernel.sh] [^3]。 #### 步骤2: 查看可用内核版本 在安装内核前,建议先列出可用的内核版本。运行以下命令查看所有可用版本(输出会显示最新和旧版本的列表): ```bash ubuntu-mainline-kernel.sh -l ``` 如果需要确认当前系统内核版本,可以使用`uname -r`命令 [^2]。 #### 步骤3: 安装指定内核版本 使用脚本安装所需内核版本(例如,安装v5.11.0版本): ```bash sudo ubuntu-mainline-kernel.sh -i v5.11.0 ``` - `-i`选项指定安装版本,您可替换`v5.11.0`为其他版本号(如`v4.19.284`)。 - 安装完成后,内核会自动添加到系统启动菜单。脚本会处理依赖和配置,避免手动编译问题 [^1]。 #### 步骤4: 管理已安装内核 安装后,可能需清理旧内核以节省空间: - 查看当前用户安装的所有内核版本: ```bash sudo ubuntu-mainline-kernel.sh -u ``` - 删除不需要的内核版本(脚本支持选择性删除,确保只保留必要版本): ```bash sudo ubuntu-mainline-kernel.sh -r <version> # 替换<version>为具体版本号 ``` 这有助于实现内核版本的灵活升级或降级 [^1]。 #### 步骤5: 切换内核并重启 - **重启系统以启用新内核**: ```bash sudo reboot ``` - **降级内核时的额外步骤**:如果从高版本切换到低版本(如v5.x降级到v4.x),重启时需临时修改GRUB引导: 1. 开机时长按`Shift`键进入GRUB菜单。 2. 选择旧内核版本启动。 3. 永久设置默认内核(可选):编辑`/etc/default/grub`文件,设置`GRUB_DEFAULT`参数,然后运行`sudo update-grub` [^2]。 #### 注意事项 - **兼容性**:确保内核版本与您的Ubuntu发行版兼容(如20.04或22.04)。建议在生产环境前先在测试机验证。 - **安全性**:切换内核可能影响系统稳定性,操作前备份重要数据。脚本会自动处理签名和依赖问题,降低风险。 - **引用支持**:本指南基于可靠的开源工具和文档 [^1][^2][^3]。 如果脚本执行失败(如网络问题),请检查GitHub仓库更新或以`sudo`权限重试。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值