2. 驱动版本与内核兼容性检查
任务说明
本案例目标为:在目标Linux系统上检查NPU驱动版本与当前内核版本是否兼容,并在检测到不兼容时给出处理路径。任务边界限定为“版本检查”与“不兼容处理”,不涉及驱动安装或内核升级的具体操作执行。
检查流程与判定逻辑
兼容性检查分为三个步骤:获取当前内核版本、获取已加载NPU驱动的版本及编译时内核版本、比对两者是否匹配。判定标准为:驱动模块的vermagic字段中的内核版本标识与uname -r输出一致,且驱动加载无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'的提示,该信息与脚本判定结果相互印证。