瑞芯微Rockchip开发者社区
直播中

张伟

7年用户 1638经验值
私信 关注
[经验]

NPU全驱动与mini驱动的区别在哪

RKNPU

本工程主要为瑞芯微NPU提供驱动、示例等。

适用平台

RK1808/RK1806

RV1109/RV1126

注意:RK3399Pro用户状态的库和RK1808是不一样的

RKNN 工具包

​在使用 RKNN API 进行部署之前,需要使用 RKNN Toolkit 将原始模型转换成 rknn 模型。

  • RK1808/RK1806/RV1109/RV1126/RK3399Pro 使用
  • RK3566/RK3568使用

具体的使用说明请参考相应的网址。

NPU驱动说明

NPU驱动目录说明

NPU的驱动在$SDK/external/rknpu/drivers/目录下或者https://github.com/rockchip-linux/rknpu/tree/master/drivers

其中的编译、安装规则参考$SDK/buildroot/package/rockchip/rknpu/rknpu.mk

主要目录包括:

drivers/
├── common
├── linux-aarch64
├── linux-aarch64-mini
├── linux-armhf
├── linux-armhf-mini
├── linux-armhf-puma
├── linux-armhf-puma-mini
├── npu_ko

linux-aarch64:RK1808全驱动

linux-aarch64-mini:RK1808迷你驱动

linux-armhf: RK1806 完整驱动

linux-armhf-mini: RK1806 迷你驱动

linux-armhf-puma: RV1109/RV1126 完整驱动

linux-armhf-puma-mini:RV1109/RV1126 迷你驱动

npu_ko:NPU内核驱动KO

在更新驱动时,需要同时更新用户驱动状态及内核驱动,会产生类似错误:

[ 1] HAL user version 6.4.6.5.351518
[ 2] HAL kernel version 6.4.6.5.351518

另外,npu ko与内核配置强相关,可能会加载不成功,运行程序时,会产生错误:

[ 1] Failed to open device: No such file or directory, Try again...
[ 2] Failed to open device: No such file or directory, Try again...

遇到这种情况需要联系开发团队解决。

NPU全驱动与mini驱动的区别

主要包含以下业绩:

Mini driver只支持预编译的rknn模型,如果跑非预编译模型,会出现RKNN_ERR_MODEL_INVALID的错误,从1.6.0开始,会返回RKNN_ERR_NON_PRE_COMPILED_MODEL_ON_MINI_DRIVER的错误;

全驱动支持RKNN Toolkit的联机调试功能,小驱动不支持;

迷你驱动库大小小很多,以RV1109/RV1126 1.6.09/RV1126驱动全驱动,全驱动大小为87MB,迷你驱动大小7.1MB,可以有效的占压大小。

迷你驱动程序库运行时占用的内存比完整驱动程序小。

手动更新NPU驱动

需要手动更新 NPU 驱动,有时只要将相关的驱动复制到对应的目录就可以。

更新RK1808的驱动:

adb push drivers/linux-aarch64/ /
adb push drivers/npu_ko/galcore.ko /lib/modules/galcore.ko

更新RK1808迷你驱动:

adb push drivers/linux-aarch64-mini/ /
adb push drivers/npu_ko/galcore.ko /lib/modules/galcore.ko

更新RV1109/RV1126的驱动:

adb push drivers/linux-armhf-puma/ /
adb push drivers/npu_ko/galcore_puma.ko /lib/modules/galcore.ko

更新RV1109/RV1126迷你驱动:

adb push drivers/linux-armhf-puma-mini/ /
adb push drivers/npu_ko/galcore_puma.ko /lib/modules/galcore.ko

注意:adb不同版本的默认行为不一样,有的是push完的,有的是push目录下的文件。因此替换后,需要检查一下相关的库是否已经替换成功。比如通过md5sum检查文件的md5是否值相同。

​另外,toybrick可能对文件路径进行了调整,因此最好通过toybrick自带的方式更新。

librknn_api 与 librknn_runtime 的区别

librknn_runtime 是对 librknn_runtime 的主要驱动,主要是为了减少其他的编译依赖,功能上更新 API 区分。

原作者:rockchip-linux

更多回帖

发帖
×
20
完善资料,
赚取积分