Zhouyi NPU Driver开源项目

我要开发同款
匿名用户2023年04月07日
69阅读
开发技术C/C++
所属分类其他开源、Linux内核
授权协议未知

作品详情

Compass_NPU驱动包括两部分:内核态驱动(KMD)和用户态驱动(UMD),内核态驱动是一个标准的Linux字符设备驱动,而用户态驱动其实是辅助应用开发的一个库,它可以被编译成动态库或静态库的形式。应用程序通过直接调用用户态驱动提供的高层API,进而间接的调用到内核态驱动提供的接口,达到与硬件交互的目的。

1.目录driver存放内核态(KMD)和用户态(UMD)驱动的源码实现

devicetree如何在一些嵌入式平台上使用该驱动,对应的的设备文件树文件(DTS)的配置参考

samples如何调用用户态驱动(UMD)中的API来实现具体推理应用的参考例程

out-of-box一个在X86平台上的模拟器上跑的简单应用demo

unit_test一组内核态驱动(UMD)和用户态驱动(UMD)的单元测试源码

2.编译驱动2.1交叉编译KMD和UMD这里以JUNO(Arm64)开发板为例,如果使用其它的嵌入式平台,请根据实际环境,在bash_env_setup.sh或env_setup.sh中,设置以下的环境变量。

准备依赖的BSP资源,如:Linux源码,交叉编译链工具等.../home/ai/scrach01||--AIPU_BSP|--kernel||--linux-5.11.18|`--toolchain|--gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 切换工作目录到驱动源码包中路径Linux/

设置如下公用的环境变量

设置顶层编译包依赖的总路径CONFIG_DRV_BTENVAR_BASE_DIR=/home/ai/scratch01CONFIG_DRV_BTENVAR_BSP_BASE_DIR=${CONFIG_DRV_BTENVAR_BASE_DIR}/AIPU_BSP

指定交叉编译工具链的路径CONFIG_DRV_BTENVAR_CROSS_CXX_PATH=${CONFIG_DRV_BTENVAR_BSP_BASE_DIR}/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin

指定Linux内核源码包路径CONFIG_DRV_BTENVAR_JUNO_KPATH=${CONFIG_DRV_BTENVAR_BSP_BASE_DIR}/kernel/linux-5.11.18

指定编译UMD库和样例的C++编译器COMPASS_DRV_BTENVAR_CROSS_CXX=aarch64-linux-gnu-g++

指定交叉编译KMD的工具链COMPASS_DRV_BTENVAR_CROSS_COMPILE_GNU=aarch64-linux-gnu-

编译命令

#cdLinux#sourcebash_env_setup.sh(forbashenv)or#sourceenv_setup.sh(forcshenv)#./build_all.sh-pjuno-vx1[-d] 如果以上命令成功执行,一个驱动加载模块aipu.ko和一个用户态动态链接库libaipudrv.so将产生,并且被存放在bin文件夹中。2.2编译配合X86上模拟的UMD准备NPU模拟需要的依赖包资源(模拟器及动态库),如:aipu_simulator_x1,libaipu_simulator_z2.so.../home/ai/scratch01/||--AIPU_SIMULATOR||--bin||--aipu_simulator_x1||--aipu_simulator_x2||--aipu_simulator_z1||--aipu_simulator_z2||--aipu_simulator_z3|`--lib|--libaipu_simulator_x1.so|--libaipu_simulator_x2.so|--libaipu_simulator_z1.so|--libaipu_simulator_z2.so|--libaipu_simulator_z3.so 设置如下公用环境变量设置顶层编译包依赖的总路径CONFIG_DRV_BTENVAR_BASE_DIR=/home/ai/scratch01CONFIG_DRV_RTENVAR_SIM_BASE_PATH=${CONFIG_DRV_BTENVAR_BASE_DIR}/AIPU_SIMULATOR

指定X86平台的g++编译器和依赖库路径CONFIG_DRV_BRENVAR_X86_CLPATH=/arm/tools/gnu/gcc/7.3.0/rhe7-x86_64/lib64(可选)COMPASS_DRV_BTENVAR_X86_CXX=g++

针对aipuv1/v2/v3模拟的时候,指定模拟器和库存放的路径CONFIG_DRV_RTENVAR_SIM_PATH=CONFIGDRVRTENVARSIMBASEPATH/bin/COMPASSDRVRTENVARSIMLPATH=CONFIGDRVRTENVARSIMBASEPATH/bin/COMPASSDRVRTENVARSIMLPATH={CONFIG_DRV_RTENVAR_SIM_BASE_PATH}/lib/

编译命令

#cdLinux#sourcebash_env_setup.sh(forbashenv)or#sourceenv_setup.sh(forcshenv)#./build_all.sh-psim[-d] 如果以上命令成功执行,一个驱动加载模块aipu.ko和一个用户态动态链接库libaipudrv.so将产生,并且被存放在bin文件夹中。2.3推荐阅读的文档

driver/kmd/README.txt:关于编译和使用KMD的细节参考。3.编译样例3.1针对特定嵌入式平台,编译对应的参考样例这里以JUNO(Arm64)开发板为例,在此之前也要先完成#2.1中的步骤。

#cdLinux#sourcebash_env_setup.sh#./build_all.sh-pjuno-vx1-tsample[-d] 上述命令成功执行之后,对应的样例生成的可执行文件也将被放在bin文件夹中。

aipu_benchmark_test:调用aipu_finish_jobAPI(阻塞)的单图单帧的推理应用例程。aipu_flush_job_test:调用aipu_flush_jobAPI(非阻塞)的单图多帧的推理应用例程。aipu_mthread_test:多线程例程,每个线程独立加载graph并进行推算.3.2针对X86模拟器,编译对应的参考样例在执行下面的命令之前,也要先完成前面#2.2中的相应步骤。

#cdLinux#sourcebash_env_setup.sh#./build_all.sh-psim-vx1-tsample[-d] 上述命令成功执行之后,对应的样例生成的可执行文件也将被放在bin文件夹中。Afterperformthiscommandsuccessfully,thesamplesarealsostoredinforder'bin'.

aipu_simulation_test:调用aipu_finish_jobAPI(阻塞)的单图单帧的推理应用例程。(注意:在模拟器上不支持非阻塞和多线程应用实现)3.3推荐阅读samples/READM.md:关于所以参考样例的说明4.编译和运行单元测试请参考unit_test中的README.md    
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论