背景

因为要安装驱动固件,但是这个ubuntu的内核版本太新需要降低版本,所以写个流程记录下更改内核的简单配置。

环境在kvm的虚拟机环境下进行,实际和物理机没有区别。

执行流程

首先虚机的ubuntu都会默认使用ubuntu的软件源,这里直接查看。

原版本是5.15.0-160-generic,我们的期望是改成5.15.0-72-generic版本。

首先查看ubuntu的内核源,

apt search linux-image-5.15.0.72-generic

在这里插入图片描述
发现有接着我们下载

sudo apt install -y \
  linux-image-5.15.0-72-generic \
  linux-headers-5.15.0-72-generic \
  linux-modules-5.15.0-72-generic  

接着创建并执行脚本,作用是生成将当前内核改为5.15.0-72-generic 需要在grub中做什么配置

TARGET_KERNEL="5.15.0-72-generic"

echo "正在查找内核 $TARGET_KERNEL 在 GRUB 菜单中的位置..."
echo "================================================"

# 获取 GRUB 配置
GRUB_CFG="/boot/grub/grub.cfg"

if [ ! -f "$GRUB_CFG" ]; then
    echo "错误: 找不到 $GRUB_CFG"
    exit 1
fi

# 查找目标内核
echo "搜索目标内核: $TARGET_KERNEL"
echo

FOUND=0
MENU_INDEX=0
SUBMENU_INDEX=0
IN_SUBMENU=0

while IFS= read -r line; do
    # 检测子菜单开始
    if [[ $line =~ "submenu" ]] && [[ $line =~ "Advanced options" ]]; then
        IN_SUBMENU=1
        SUBMENU_TITLE=$(echo "$line" | sed -n "s/.*'\(.*\)'.*/\1/p")
        echo "找到子菜单: $SUBMENU_TITLE"
        continue
    fi
    
    # 检测菜单项
    if [[ $line =~ "menuentry" ]]; then
        MENU_TITLE=$(echo "$line" | sed -n "s/.*'\(.*\)'.*/\1/p")
        
        if [[ $IN_SUBMENU -eq 1 ]]; then
            SUBMENU_INDEX=$((SUBMENU_INDEX + 1))
            CURRENT_INDEX="1>$((SUBMENU_INDEX - 1))"
        else
            MENU_INDEX=$((MENU_INDEX + 1))
            CURRENT_INDEX="$((MENU_INDEX - 1))"
        fi
        
        # 检查是否包含目标内核
        if [[ $MENU_TITLE =~ $TARGET_KERNEL ]]; then
            FOUND=1
            echo "✅ 找到目标内核!"
            echo "   菜单标题: $MENU_TITLE"
            if [[ $IN_SUBMENU -eq 1 ]]; then
                echo "   GRUB_DEFAULT 设置: \"$SUBMENU_TITLE>$MENU_TITLE\""
                echo "   或者使用数字索引: \"1>$((SUBMENU_INDEX - 1))\""
            else
                echo "   GRUB_DEFAULT 设置: \"$MENU_TITLE\""
                echo "   或者使用数字索引: \"$((MENU_INDEX - 1))\""
            fi
            break
        fi
    fi
done < "$GRUB_CFG"

if [[ $FOUND -eq 0 ]]; then
    echo "❌ 未找到内核 $TARGET_KERNEL"
    echo "当前 GRUB 菜单中的内核:"
    grep "menuentry" "$GRUB_CFG" | grep "Linux" | head -10
fi

在这里插入图片描述

接着把那个提示的GRUB_DEFAULT配置复制,贴到/etc/default/grub文件的GRUB_DEFAULT配置项
在这里插入图片描述
执行更新配置

 update-grub

在这里插入图片描述
接着重启后验证内核是否为我们期望的版本

reboot

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐