gacktex
December 25, 2021, 2:44am
1
上次在社区看见有小伙伴问,使用官方系统固件无法开启并正常使用NPU进行rknn_ssd_demo的测试,官方小伙伴更新了内核,但是还是在最后SUBMIT的时候失败。。。
昨天自己研究了一下,并成功在官方固件下开启NPU并正常运行了DEMO。
方法如下:
1.下载radxa的kernel按照教程编译内核
2.如果成功了说明你的环境没问题了
3.修改rock3a分支下的dts文件,[rk3568-rock-3-a.dts]
4.将里面的reserved_memory节点删除,注意是与npu相关的节点
5.将rknpu节点下的预设节点引用删除,只保留supply和status
6.重新编译内核,完成后会生成rk3568-rock-3-a.dtb
7.将编译好的文件使用root权限覆盖3A里/boot/dtbs/同名文件
8.重启设备----大功告成
原理:
应该是官方为NPU预设保留内存时内核报错,导致预设内存失败节点失效,从而使得NPU节点引用内存也失败,所以NPU无法使用,以上代码是参考firefly的3568设备树文件,发现firefly没有使用预设内存,但是可以成功,所以试试,结果真成功了!
希望这个文档能帮助到大家,谢谢,圣诞快乐!!!!!
更新:
具体原因已经找到,基于Linux rock3a 4.19.193-16-rockchip-g0cca7bdf9cdb内核,在rk3568-rock-3-a.dts文件的reserved-memory节点中,关于“shared-dma-pool”属性参数官方写入了错误的格式 :
原文如下:
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
rknpu_reserved: rknpu {
compatible = "shared-dma-pool";
reusable;
size = <0x0 0x08000000>;
alignment = <0x0 0x1000>;
};
};
修改:应该将其中的
size属性参数改为<0x08000000>
alignment属性改为<0x1000>
然后启动时npu报内存资源分配失败,是因为npu的静态内存地址和npu_iommu分配地址冲突了,这个部分是在rk3568.dtsi文件中,我临时将npu_iommu的地址从fde4b000改为了fde5b000【查阅iomem表发现这个地址未被使用】,因为npu分配内存地址为fde40000正好与npu_iommu冲突,导致npu初始化时分配失败。。。。
修改后保存编译,一切正常了~ 这样可以不用删除预留内存节点。。。
正常启动的Console日志:
[ 3.008604] iommu: Adding device fde40000.npu to group 0
[ 3.011693] RKNPU fde40000.npu: Linked as a consumer to fde5b000.iommu
[ 3.015241] RKNPU fde40000.npu: RKNPU: rknpu iommu is enabled, using iommu mode
[ 3.018467] RKNPU fde40000.npu: Linked as a consumer to regulator.15
[ 3.022020] [drm] Initialized rknpu 0.4.2 20210701 for fde40000.npu on minor 1
[ 3.025205] RKNPU fde40000.npu: leakage=4
[ 3.028747] RKNPU fde40000.npu: avs=0
[ 3.032448] RKNPU fde40000.npu: l=0 h=2147483647 hyst=5000 l_limit=0 h_limit=0 h_table=0
最新修改的dtb文件
链接:https://pan.baidu.com/s/1B9jFAhdmAz5V54FiPkt8wA
提取码:GRMX
3 Likes
hyaska
December 25, 2021, 12:09pm
2
官方有这新版本 rock-3a-ubuntu-focal-server-arm64-20211223-0731-gpt.img.xz,也不知道修正没有。只需要覆盖rk3568-rock-3-a.dtb,还是内核也要覆盖?
gacktex
December 25, 2021, 12:43pm
3
覆盖dtb即可,我在11月的固件中直接覆盖即成功。
hyaska
December 25, 2021, 1:01pm
4
能在哪个网盘共享一下这个dtb文件吗,谢谢,圣诞快乐!
hyaska
December 27, 2021, 2:21pm
6
感谢,下载了,但是做测试运行./rknn_ssd_demo model/ssd_inception_v2.rknn model/road.bmp
会报以下错误
./rknn_ssd_demo: /lib/aarch64-linux-gnu/libm.so.6: version GLIBC_2.29’ not found (required by ./rknn_ssd_demo)`
请教如何解决
gacktex
December 28, 2021, 1:58am
7
你的系统是什么版本?
我用的是官方固件:https://github.com/radxa/rock-3-images-released/releases
中的rock3a_ubuntu_focal_server_arm64_20211113_0103-gpt.img.gz
11月的版本~
你尝试更新一下GLIBC呢~
Stephen
December 28, 2021, 3:24am
8
你好。我们修复了RNPU 运行时错误问题。
需要更新一下 kernel 版本到 4.19.193-25。用v1.1.0版本的NPU库。
请看文档 https://wiki.radxa.com/Rock3/dev/npu-run-test
gacktex
December 29, 2021, 4:21am
9
只有24啊。。。 没有25啊~
linux-headers-4.19.193-24-rockchip-g526c758e05e0 linux-image-4.19.193-24-rockchip-g526c758e05e0
git上面拉取的kernel源码,dts有问题,修改后虽然npu可用了,但是每次在shutdown和reboot的时候会报rcu错误。。。。
[ 438.537222] watchdog: watchdog0: watchdog did not stop!
[ 500.997705] rcu: INFO: rcu_sched detected stalls on CPUs/tasks:
[ 500.998445] rcu: 3-…0: (4 ticks this GP) idle=d5a/1/0x4000000000000000 softirq=12712/12713 fqs=368
[ 500.999504] rcu: (detected by 1, t=18046 jiffies, g=13781, q=1)
[ 501.000211] Call trace:
[ 501.000522] __switch_to+0xc4/0x128
[ 501.000946] _raw_spin_unlock_irqrestore+0x24/0x34
[ 501.001503] of_find_property+0x5c/0x74
[ 501.001954] of_find_property_value_of_size+0x40/0xa0
[ 501.002538] of_property_read_u32_index+0x44/0x6c
用回16的dtb就不会出现这个问题。。。
Stephen
February 9, 2022, 9:22am
10
Stephen
February 9, 2022, 9:26am
11
gacktex:
只有24啊。。。 没有25啊~
你再更新一下 Radxa APT 源,下载最新 kernel。最新的版本为 4.19.193-31。
sudo rm /var/lib/apt/lists/apt.radxa.com*
sudo apt update
sudo apt install -y linux-4.19-rock-3-latest
报这个错误。需要通过更新 u-boot / kernel 来解决。
涉及到的代码修改为:
你可以用最新的 ROCK 3A Ubuntu/Debian。https://github.com/radxa/debos-radxa/releases/tag/main-7a110bf1
1 Like
Cu635
February 11, 2022, 9:54am
14
Hi, @Stephen 试了一下,最新版本下的npu还是没法用……
我是先刷的20220207的官方debian系统(内核版本4.19.193-31),之后用apt update和apt dist-upgrade升级内核到4.19.193-32 ,4.19.193-36-rockchip-gd05f98887579 , (现在是) 4.19.193-42-rockchip-ge29be2b2ed27,并且下载 Index of /rock3/images/loader/rock-3a 目录下的idbloader.img和u-boot.itb ( 两个的Last modified时间都是 2022-02-10 10:50 ),用dd刷入tf卡,之后重启,测试rknn_ssd_demo,这样试验出来,npu还是不能用。
不能用的输出如下:
$ ./rknn_ssd_demo model/ssd_inception_v2.rknn model/road.bmp
Loading model ...
rknn_init ...
model input num: 1, output num: 2
input tensors:
index=0 name=Preprocessor/sub:0 n_dims=4 dims=[1 300 300 3] n_elems=270000 size=270000 fmt=0 type=3 qnt_type=2 fl=0 zp=0 scale=0.007812
output tensors:
index=0 name=concat:0 n_dims=4 dims=[1 1917 1 4] n_elems=7668 size=30672 fmt=0 type=0 qnt_type=2 fl=0 zp=53 scale=0.089455
index=1 name=concat_1:0 n_dims=4 dims=[1 1917 91 1] n_elems=174447 size=697788 fmt=0 type=0 qnt_type=2 fl=0 zp=53 scale=0.143593
rknn_run
E RKNN: [00:26:17.861] failed to submit!, op id: 1, op name: Conv:FeatureExtractor/InceptionV2/InceptionV2/Conv2d_1a_7x7/separable_conv2d/depthwise, flags: 0x5, task start: 0, task number: 15, run task counter: 0, int status: 0
rknn_run fail! ret=-1
下载发帖时候最新的radxa官方提供的debian系统,用etcher刷入tf卡,启动,按照页面 https://wiki.radxa.com/Rock3/dev/npu-run-test 测试给的步骤一步不落的测试,输出跟上面一样。
用这个帖子的lz百度网盘分享的dtb文件替换了之后,重启,再测试就成功了。
Cu635
August 22, 2022, 3:20pm
15
这个问题在8G内存的板子上持续了半年多,最近才最终解决的:
引用的帖子的主楼是:
两块rock 3a,都是V1.31版本,但是不同时间买的,买的早的那块丝印是白色,最近买的那块丝印是黑色。
内存卡内烧录镜像“rock-3a-debian-buster-xfce4-arm64-20220701-0158-gpt.img”,
然后按照https://wiki.radxa.com/Rock3/dev/npu-run-test,更新内核等。
把这张卡插入白色丝印的板子,运行NPU Run Test,能够出结果;插入黑色丝印的板子,运行报错如下:
Loading model …
rknn_init …
input tensors:
index=0 name=Preprocessor/sub:0 n_dims=4 dims=[1 300 300 3] n_elems=270000 size=270000 fmt=0 type=3 qnt_type=2 fl=0 zp=0 scale=0.007812
output tensors:
index=0 name=concat:0 n_dims=4 dims=[1 1917 1 4] n_elems=7668 si…