# ascend-driver-gen **Repository Path**: ascend_rocks/ascend-driver-gen ## Basic Information - **Project Name**: ascend-driver-gen - **Description**: 用于替换Ascend驱动中的DKMS源代码,并重新打包构建 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-24 - **Last Updated**: 2024-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 晟腾NPU驱动研究 ## 晟腾NPU驱动安装失败原因分析 安装晟腾NPU时,软件包中的脚本将相关库文件和配置脚本解压到`/usr/local/Ascend`(默认),并将DKMS源码解压到`/usr/src/davinci_hiai-1.0`,执行DKMS模块的添加和编译,而DKMS源码编译容易出现错误,导致驱动程序安装失败。 ## Linux发行版和内核版本测试分析 ### Ubuntu - [x] Ubuntu 20.04 - [x] Kernel 5.4.0 Ubuntu 20.04 Server内核默认为5.4.0,GCC 7.5,能够成功编译安装驱动程序 - [x] Kernel 5.15.0 Ubuntu 20.04 Desktop版内核默认为5.15.0,因为5.15.0内核文件中有对比无符号正整数和0的代码,导致GCC编译器产生告警,并且晟腾驱动DKMS的编译配置中增加了`-Werror`的选项,告警产生错误,导致编译失败。解决方法: 1. 通过脚本替换所有`-Werror`编译选项 2. 完成步骤1后,会提示2个函数声明为`static`但是使用`EXPORT_SYMBOL`宏进行导出。在编程规范中,`static`声明是让函数不被外部调用,与`EXPORT_SYMBOL`冲突([相关说明](https://stackoverflow.com/questions/22059369/export-symbol-and-the-static-keyword))。解决方法是将这两个函数声明中的`static`关键字去掉 上述2步可以通过[ascend_rocks/ascend-driver-dkms-src](https://gitee.com/ascend_rocks/ascend-driver-dkms-src/tree/master/patches)的脚本进行替换 - [x] Ubuntu 22.04 - [x] Kernel 5.15.0 Ubuntu 22.04默认内核版本为5.15.0,编译产生`static`与`EXPORT_SYMBOL`冲突的错误提示,执行上述步骤2即可 - [ ] Ubuntu 24.04 - [ ] Kernel 6.8.0 目前产生无法找到``头文件的错误,该文件为`gcc`库自带文件,路径位于`/usr/lib/gcc/x86_64-linux-gnu/{GCC_VERSION}/include/stdbool.h`,默认应该在gcc搜索路径中,且使用`gcc`直接编译`#include `不会报错。可能是晟腾驱动程序中的DKMS编译配置与之冲突。目前正在进一步探索。 ## 晟腾NPU驱动重新打包 基于上述DKMS驱动源码编译的分析,将原驱动文件解压,替换DKMS源码并重新打包: ```bash # 以Atlas 300(3010) x86 驱动文件为例: # 执行--extract命令解压文件 chmod +x ./A300-3010-npu-driver_23.0.0_linux-x86_64.run ./A300-3010-npu-driver_23.0.0_linux-x86_64.run --extract=./A300-3010-npu-driver_23.0.0_linux-x86_64-run-extracted/ # 准备用于替换的DKMS源码 wget https://gitee.com/ascend_rocks/ascend-driver-gen/repository/archive/master.zip unzip master.zip cd ascend-driver-dkms-src-master/patches bash apply_patch.sh cd - # 替换DKMS源码 cd ./A300-3010-npu-driver_23.0.0_linux-x86_64-run-extracted/ rm -rf driver/kernel/ cp ../ascend-driver-dkms-src-master/ ./driver/kernel # 重新使用makeself.sh打包 ./driver/script/makeself.sh --header ./driver/script/makeself-header.sh --help-header ./driver/script/help.info . ../A300-3010-npu-driver_23.0.0_linux-x86_64.patched.run some-description ./driver/script/install.sh # 使用打包后的文件安装驱动 cd ../ chmod +x A300-3010-npu-driver_23.0.0_linux-x86_64.patched.run ./A300-3010-npu-driver_23.0.0_linux-x86_64.patched.run --install-for-all --full --install-username=$(id -u -n) --install-usergroup=$(id -g -n) ```