下载
中文
注册

编译并生效新增用户驱动

前提条件

  • 一台带网络端口且操作系统为Ubuntu 22.04的x86 Linux服务器。
  • Linux服务器已安装python、make、gcc、unzip、pigz、bison、flex、libncurses-dev、squashfs-tools、bc、device-tree-compiler、libssl-dev、cmake、rpm2cpio与交叉编译工具链。
  • 所有的依赖必须用root用户进行安装。
  • 用户可以通过如下命令进行安装上述依赖。

    apt-get install -y python3 make gcc unzip pigz bison flex libncurses-dev squashfs-tools bc device-tree-compiler libssl-dev cmake rpm2cpio

  • 交叉编译工具链安装请参见安装工具链

编译驱动文件

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

    su - root

  3. 使用WinSCP工具或其他工具,将下载软件包获取的源码包“Ascend310B-source.tar.gz”上传至Linux系统root用户属组目录下,例如“/opt”。详细操作请参见使用WinSCP传输文件
  4. 执行如下命令,进入源码包所在目录,例如“/opt”

    cd /opt

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

    tar -xzvf Ascend310B-source.tar.gz

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

    cd Ascend310B-source/driver/drivers

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

    mkdir usr

    cd usr

  8. 执行如下命令,新增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”键退出。

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

    vim Makefile

    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

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

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

    vim module.mk

    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)

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

  11. 执行如下命令,进入“product_modules”目录。

    cd /opt/Ascend310B-source/driver/build/product_modules

  12. 执行如下命令,修改device-ctrlcpu.mk文件。

    vim device-ctrlcpu.mk

    新增DRIVER_DEVICE_MODULES += myhello.ko

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

  13. 执行如下命令,返回“Ascend310B-source”目录。

    cd /opt/Ascend310B-source

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

    bash build.sh driver

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

    ### build driver_device modules successfully ###
    generate /opt/Ascend310B-sdk/Ascend310B-source/output/driver_modules success!
    make driver success!

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

生效驱动文件

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

    cd /run

    insmod myhello.ko

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

    lsmod |grep myhello

    出现以下回显表示加载成功。
    myhello                16384  0