2. 驱动版本与内核兼容性检查

任务说明

本案例目标为:在目标Linux系统上检查NPU驱动版本与当前内核版本是否兼容,并在检测到不兼容时给出处理路径。任务边界限定为“版本检查”与“不兼容处理”,不涉及驱动安装或内核升级的具体操作执行。

检查流程与判定逻辑

兼容性检查分为三个步骤:获取当前内核版本、获取已加载NPU驱动的版本及编译时内核版本、比对两者是否匹配。判定标准为:驱动模块的vermagic字段中的内核版本标识与uname -r输出一致,且驱动加载无version magic错误,即视为兼容。

步骤1: 获取内核版本 uname -r 步骤2: 获取驱动版本信息 modinfo npu_drv | grep vermagic 步骤3: 比对判定 vermagic vs uname -r 匹配 → 兼容,检查通过 不匹配 → 不兼容,进入处理 处理路径 1. 确认驱动版本 2. 匹配内核或升级驱动 验证观测点 dmesg | grep -i npu 无 version magic 报错

实现脚本

以下脚本自动完成上述三个步骤,并输出明确的兼容性结论。脚本仅执行检查与判定,不修改系统配置。

#!/bin/bash
# npu_compat_check.sh - NPU驱动与内核兼容性检查

# 步骤1: 获取当前内核版本
KERNEL_VERSION=$(uname -r)
echo "[1/3] 当前内核版本: $KERNEL_VERSION"

# 步骤2: 获取NPU驱动模块的vermagic信息
# 注意: 请将npu_drv替换为实际NPU驱动模块名(如: rockchip_npu, galcore等)
DRV_MODULE="npu_drv"

if ! modinfo "$DRV_MODULE" >/dev/null 2>&1; then
    echo "[错误] 驱动模块 $DRV_MODULE 未找到,请确认模块名称或驱动是否已安装"
    exit 1
fi

DRV_VERMAGIC=$(modinfo "$DRV_MODULE" | grep -i vermagic | awk '{print $2}')
echo "[2/3] 驱动编译时内核版本: $DRV_VERMAGIC"

# 步骤3: 比对判定
echo "[3/3] 比对结果:"
if [[ "$KERNEL_VERSION" == "$DRV_VERMAGIC" ]]; then
    echo "  ✓ 兼容 - 驱动版本与当前内核匹配"
    exit 0
else
    echo "  ✗ 不兼容 - 驱动编译内核($DRV_VERMAGIC)与当前内核($KERNEL_VERSION)不一致"
    echo ""
    echo "处理建议:"
    echo "  1. 确认NPU驱动是否有适配当前内核的更新版本"
    echo "  2. 若驱动版本过旧,需获取新版驱动重新编译安装"
    echo "  3. 若当前内核为自定义编译,可考虑切换回驱动支持的内核版本"
    exit 2
fi

使用与验证方法

运行方式:将脚本保存为npu_compat_check.sh,赋予执行权限后运行:

chmod +x npu_compat_check.sh
./npu_compat_check.sh

验证判定标准:

  • 脚本输出✓ 兼容且退出码为0,表示检查通过;
  • 脚本输出✗ 不兼容且退出码为2,表示存在版本不匹配,需按提示处理;
  • 若输出驱动模块未找到,说明模块名错误或驱动未安装,需先用lsmod | grep npu确认实际模块名并替换脚本中的DRV_MODULE变量。

补充验证:兼容时执行dmesg | grep -i npu应无version magic相关错误信息;不兼容时通常驱动加载失败,dmesg中会出现类似version magic 'X' should be 'Y'的提示,该信息与脚本判定结果相互印证。