在银河麒麟高级服务器操作系统(Kylin V10)上部署华为昇腾(Ascend)环境时,由于底层内核版本与新版编译器的严格安全策略,直接安装驱动往往会遇到内核模块(DKMS)编译中断的问题。本文将详细梳理从固件升级到驱动安装的完整流程,并提供针对该系统环境的底层编译拦截修复方案。
1. 运行环境说明
操作系统:Kylin Linux Advanced Server V10 (Hydrogen)
系统内核:5.10.0-153.5.v2305.ky10h.aarch64
目标硬件:华为 Ascend 910B NPU
HDK 版本包:25.5.1 (包含 Firmware 7.8.0.6.201 与配套 Driver)
2. 第一阶段:Firmware(固件)升级
固件是直接运行在 NPU 硬件底层的控制程序,升级驱动前必须确保固件版本与之匹配。
2.1 执行固件安装
将获取到的 Firmware .run 安装包上传至服务器,直接授予执行权限并运行:
Bash
# 示例命令(请根据实际包名调整)
./Ascend-hdk-910b-npu-firmware_7.8.0.6.201.run --full
2.2 重启并验证固件
注意:固件刷入后,必须重启物理服务器才能生效。 重启完成后,通过查看版本信息文件验证固件是否成功加载:
Bash
cat /usr/local/Ascend/firmware/version.info
期望输出示例:
Version=7.8.0.6.201 firmware_version=1.0 package_version=25.5.1 compatible_version_drv=[23.0.0,23.0.0.],[24.0,24.0.],[24.1,24.1.],[25.0,25.5.]
3. 第二阶段:Driver(驱动)安装前置准备
驱动的核心包含运行在 Linux 内核空间的 .ko 模块。Ascend 驱动采用 DKMS(动态内核模块支持)机制,在安装时现场编译源码。因此,必须补全系统的 C 语言编译栈。
3.1 检查并安装核心编译组件
执行以下命令安装基础工具链及与当前内核版本严格绑定的开发包:
Bash
sudo yum install -y gcc make dkms kernel-devel-$(uname -r) kernel-headers-$(uname -r)
3.2 补齐隐藏依赖(关键点)
在 Linux 5.10 及以上内核中,编译内核模块需要使用 objtool 进行 ELF 格式验证,这强依赖于 libelf 库。麒麟 V10 系统默认可能未安装其开发头文件,需显式补充:
Bash
sudo yum install -y elfutils-libelf-devel
4. 第三阶段:Driver 安装与底层编译拦截(核心难点)
在麒麟 V10 自带的高版本 GCC(如 GCC 10)环境下,执行原版驱动包会遭遇如下报错:
[ERROR]Dkms install failedcc1: all warnings being treated as errors
原因分析:驱动源码的 Makefile 中默认开启了 -Werror 标志(将所有警告视为致命错误)。由于高版本编译器的语法检查更为严格,源码中原本无害的警告(如符号比较警告)会直接触发编译中断。由于华为安装包内部存在环境变量隔离和脚本完整性校验(防篡改机制),常规的解压修改源码法会触发 ERR_NO:0x0004 错误被拦截。
终极对策:编译器系统层劫持(Wrapper 代理法) 通过在系统路径下伪造一个 gcc 和 cc 的代理脚本,静默向所有编译指令末尾追加 -Wno-error(忽略警告)参数,从而实现降维打击。
4.1 部署编译器代理木马
依次执行以下命令,将真实的编译器藏入后台,并生成代理脚本:
Bash
# 1. 备份并重命名系统真实编译器
mv /usr/bin/gcc /usr/bin/gcc-real
mv /usr/bin/cc /usr/bin/cc-real
# 2. 生成 gcc 代理(将拦截的参数全部转发,并追加免死金牌)
cat << 'EOF' > /usr/bin/gcc
#!/bin/bash
/usr/bin/gcc-real "$@" -Wno-error
EOF
chmod +x /usr/bin/gcc
# 3. 生成 cc 代理
cat << 'EOF' > /usr/bin/cc
#!/bin/bash
/usr/bin/cc-real "$@" -Wno-error
EOF
chmod +x /usr/bin/cc
4.2 顺利执行驱动安装
代理部署完成后,直接执行官方驱动安装包。此时底层的 DKMS 编译将被全局放行,平滑通过 100% 进度:
Bash
./Ascend-hdk-910b-npu-driver_25.5.1_linux-aarch64.run --install-for-all --full
4.3 恢复系统环境(必须执行)
驱动安装成功后,务必立即拆除代理脚本,恢复系统的真实编译器,以免影响服务器上后续其他业务代码的正常构建:
Bash
mv -f /usr/bin/gcc-real /usr/bin/gcc
mv -f /usr/bin/cc-real /usr/bin/cc
5. 环境最终验证
全部安装完成后,可通过昇腾自带的系统管理接口工具验证 NPU 的挂载情况:
Bash
npu-smi info
若终端成功输出包含 NPU ID、健康状态(Health)、温度、功率以及显存占用的设备列表卡片,即标志着整个底层运行环境部署圆满完成。