[Atlas200I A2] HelloWorld驱动的编写与装载

0. 写在前面

上文说到,实验室有两块 Atlas200I A2。它们搭载了 aarch64 的 Ubuntu22.04 的镜像,可以用来学习 Linux 驱动的开发。所以这里参考了华为官方的教程来编译并装载一个 hello world 的驱动。

1. 环境准备

参考:Atlas 200I A2 加速模块 24.1.RC3 驱动开发指南 04

前提条件:
一台带网络端口且操作系统为Ubuntu 22.04的x86 Linux服务器,我使用的是 vm 虚拟机上的 Ubuntu 系统。
Linux服务器已安装python、make、gcc、unzip、pigz、bison、flex、libncurses-dev、squashfs-tools、bc、device-tree-compiler、libssl-dev、cmake、rpm2cpio与 交叉编译工具链

同时还需要下载资源包。源码包和交叉编译工具链都包含在一个名为 Ascend-hdk-310b-sdk-soc_<version>.zip 的资源包文件里。这里我使用的是 Ascend-hdk-310b-sdk-soc_23.0.0.zip。解压以后可以看到 Ascend310B-source.tar.gztoolchain.tar.gz

下载链接为:固件与驱动下载

注意:交叉编译工具链一定要安装,安装可参考以下链接:安装工具链

2. 编译步骤

同样参考:Atlas 200I A2 加速模块 24.1.RC3 驱动开发指南 04

这里就做一个简单说明:

服务器的 Ubuntu 系统上以 root 身份,在恰当的位置(如 /home/uu 下)使用 tar -xzvf Ascend310B-source.tar.gz 命令解压文件夹,并进入 Ascend310B-source/driver/drivers 目录下,执行如下命令,创建并进入 usr 目录。

mkdir usr
cd usr

之后,执行如下命令,使用 vi 命令新增 hello.cMakefilemodule.mk,并填充相应的配置。

hello.c

#include <linux/module.h>
#include <linux/kernel.h>
 
int __init myhello_init(void)
{
         printk("==========user hello mod init=========\n");
         return 0;
}
 
void __exit myhello_exit(void)
{
 
         printk("===========user hello mod exit=========\n");
}
 
MODULE_LICENSE("GPL");
module_init(myhello_init);
module_exit(myhello_exit);

Makefile

ccflags-y += -Wall -Werror -Wtrampolines $(WDATE_TIME) -Wfloat-equal -Wvla -Wundef -funsigned-char -Wformat=2 -Wstack-usage=2048 -Wcast-align
ccflags-y += -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-missing-field-initializers
 
obj-m += myhello.o
myhello-objs := hello.o

module.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myhello
LOCAL_KO_SRC_FOLDER := $(LOCAL_PATH)
LOCAL_INSTALLED_KO_FILES := myhello.ko
include $(BUILD_DEVICE_KO)

编辑完上述文件后,进入 Ascend310B-source/driver/build/product_modules 文件夹下,使用 vim device-ctrlcpu.mk 修改配置文件,在配置文件中新增 DRIVER_DEVICE_MODULES += myhello.ko,如下图所示:
img

最后返回 Ascend310B-source 目录,执行 bash build.sh driver 编译驱动模块。编译成功控制台会有相应输出,如下图所示:

1756830297995

编译后的 myhello.koAscend310B-source/output/driver_modules/ 目录下。

3. 装载驱动

同样参考:Atlas 200I A2 加速模块 24.1.RC3 驱动开发指南 04

登录 Atlas 200I A2 加速模块系统环境,将 myhello.ko 上传到某一目录下,并使用 insmod myhello.ko 进行驱动加载。使用 lsmod |grep myhello 命令查看后台日志,如果出现下图回显,则表示驱动加载成功:

img

4. 注意事项

要注意服务器上的源码包版本要和开发板上的内核源码版本一致。如果使用的资源包是 Ascend-hdk-310b-sdk-soc_23.0.0.zip,那么开发板上,使用:

npu-smi info -t board -i 0

就应该查到的是 Software Version 显示为 23.0.0。如下图所示。

img

如果不一致会出现加载驱动,开发板重启的情况。更具体的内容可以查看:【Atlas200I DK A2】编译装载自定义驱动失败

posted @ 2025-09-03 23:48  珞喻路小白  阅读(38)  评论(0)    收藏  举报