昇腾社区首页
中文
注册
开发者
下载

编译并生效新增用户驱动

前提条件

已完成搭建Ubuntu24.04 Arm64编译环境

编译驱动文件

  1. 登录Linux服务器。
  2. 执行如下命令,切换至root用户。

    su - root

  3. 使用WinSCP工具或其他工具,将下载软件包获取的源码包“Ascend310B-source.tar.gz”上传至服务器的“/home/ubuntu24_04/squashfs-root/opt”目录下。详细操作请参见使用WinSCP传输文件
  4. 切换根系统。

    cd /home/ubuntu24_04

    chroot squashfs-root

  5. 执行如下命令,进入源码包所在目录。

    cd /opt

  6. 执行如下命令,解压源码包“Ascend310B-source.tar.gz”。

    tar -xzvf Ascend310B-source.tar.gz

  7. 执行如下命令,进入“drivers”目录。

    cd Ascend310B-source/driver/drivers

  8. 执行如下命令,创建并进入“usr”目录。

    mkdir usr

    cd usr

  9. 执行如下命令,新增hello.c。

    vim hello.c

    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);

    配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。

  10. 执行如下命令,新增Makefile。

    vim Makefile

    Makefile文件的配置参考如下所示。
    KERNEL_DIR :=$(srctree)
    obj-m += drv_hello.o
    EXTRA_CFLAGS += -Wall -Werror
    ifneq ($(filter $(HELPER_KERNAL), openeuler),)
    EXTRA_CFLAGS += -DHELPER
    endif
    ifneq ($(HELPER_KERNAL),)
    EXTRA_CFLAGS += -DHELPER_KERNAL
    endif
    modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    modules_install:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
    clean:$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) clean
    drv_hello-objs := hello.o
    .PHONY: modules modules_install clean

    配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。

  11. 执行如下命令,新增CMakeLists.txt。

    vim CMakeLists.txt

    CMakeLists.txt文件的配置参考如下所示。
    add_device_ko(LOCAL_MODULE drv_hello
            KO_SRC_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}
    )

    配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。

  12. 执行如下命令,进入顶层目录下的“driver/cmake/config”

    cd /opt/Ascend310B-source/driver/cmake/config/

  13. 执行如下命令,修改“driver_config_ascend310Brc.cmake”文件。

    vim driver_config_ascend310Brc.cmake

    1. 在set(DEVICE_DRIVER_DIRS 驱动路径)添加新增的驱动代码路径。

    2. 在set(DEVICE_DRIVER_TARGETS 驱动名)中添加新增驱动名。

    3. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  14. 执行如下命令,返回“Ascend310B-source”目录。

    cd /opt/Ascend310B-source

  15. 执行如下命令,编译驱动模块。

    bash build.sh driver

    出现如下回显表示编译成功。

    generate /opt/Ascend310B-sdk/Ascend310B-source/output/driver_modules success!
    make driver success!

    编译后drv_hello.ko在“Ascend310B-source/output/driver_modules/”目录下。

  16. 执行如下命令,退出根系统。

    exit

  17. 在“/home/ubuntu24_04/squashfs-root/opt/Ascend310B-source/output/driver_modules”目录下获取编译后的驱动文件。

生效驱动文件

  1. 登录Atlas 200I A2 加速模块系统环境。
  2. 使用“WinSCP”,将编译后的drv_hello.ko文件上传至任意目录下,例如“/run”。详细操作请参见使用WinSCP传输文件
  3. 执行如下命令,进入“run”目录,再生效drv_hello.ko文件。

    cd /run

    insmod drv_hello.ko

  4. 执行如下命令,查看驱动模块是否加载成功。

    lsmod |grep drv_hello

    出现以下回显表示加载成功。
    drv_hello              12288  0