D12CRknn
0 前言
环境与工具:
- x86_64 ubuntu22.04主机一台
- YY3588 开发板一台
- YY3588标配电源一个
- USB typeA 转 typeC 调试线一根
1 准备工作
1.1 硬件准备
YY3588开发板接上电源接口和adb调试接口,adb 另一端接上ubuntu22.04主机;如下图:

1.2 开发环境准备
1.2.1 安装 Python3.10
# 提示:使用普通用户即可
$ sudo apt update
$ sudo apt search python3.10
# 选择一个安装即可
$ sudo apt install xxx
# 检查安装是否成功
$ python --version
1.2.2 安装 adb
$ sudo apt install adb
# 查看开发板信息,出现开发板信息说明安装成功
$ adb devices
List of devices attached
e917a56d5822e215 device
1.2.3 下载 RKNN 相关仓库
$ mkdir yyt_RKNN_Projects
$ cd yyt_RKNN_Projects
$ mv /path/to/rknn-toolkit2 /path/to/rknn_model_zoo -t ./
1.2.4 安装依赖库和 RKNN-Toolkit2
-
查看是否安装
# 没有报错则为已经安装(已经安装可以跳过此章节)$ python$ from rknn.api import RKNN -
安装
$ cd yyt_RKNN_Projects/rknn-toolkit2/rknn-toolkit2$ pip install -r packages/x86_64/requirements_cp310-2.3.0.txt$ pip install -r packages/x86_64/rknn_toolkit2-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
1.2.5 安装编译工具
$ sudo apt install cmake
2 简单推理
2.1 准备模型
$ cd yyt_RKNN_Projects/rknn_model_zoo/examples/yolov5/model
# 可以自己下载模型,也可以使用我们下载好的模型,在RKNN相关仓库资料里面
$ ./download_model.sh
# 下载好的模型路径 model/yolov5s_relu.onnx
2.2 模型转换
$ cd yyt_RKNN_Projects/rknn_model_zoo/examples/yolov5/python
$ python convert.py ../model/yolov5s_relu.onnx rk3588 i8 ../model/yolov5s_relu.rknn
2.3 运行 Python Demo
$ cd Projects/rknn_model_zoo/examples/yolov5/python
# 将RKNN相关仓库资料里面的adbd.zip推送到板端
$ unzip adbd.zip
$ adb push adbd/linux-aarch64/adbd /usr/bin/adbd
$ adb shell "chmod +x /usr/bin/adbd"
$ adb reboot
# 等待板子启动后
$ sudo adb kill-server
# 调试命令
## 连板调试
$ adb shell "restart_rknn.sh"
$ python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3588 --img_save
## 主机调试
$ python yolov5.py --model_path ../model/yolov5s_relu.onnx --img_save

两种调试结果的输出图片均在result目录下面,默认输入有2张照片(bus.jpg、women.jpg)
- before

- after

更新rknpu2驱动和库
更新rknpu2驱动
- 下载驱动:
目前瑞芯微官方的rknpu2驱动最新为 0.9.8,在 rknn-llm 源码下。

- 解压获取驱动包,并把驱动包放到SDK源码下。


- 执行以下命令解压更新驱动
tar -xjvf rknpu_driver_0.9.8_20241009.tar.bz2 -C kernel-6.1/
再把sdk源码下的 kernel-6.1/drivers/rknpu/rknpu_devfreq.c 一条语句注释掉

- 编译kernel
# 编译
cd kernel-6.1
make clean
cd ..
./build.sh kernel
- 拿一块yy3588开发板,登录Debian系统查看当前rknpu驱动版本
cat /sys/kernel/debug/rknpu/version

- 编译完成后,将生成的 boot.img 文件(位于 SDK/rockdev/ 目录)烧录到设备的 boot 分区即可。

- 测试是否升级成功:重启开机执行
cat /sys/kernel/debug/rknpu/version

更新rknn api
- librknnrt.so: 是一个板端的 runtime 库。
- rknn_server: 是一个运行在板子上的后台代理服务,用于接收 PC 通过 USB 传输过来的协议, 然后执行板端 runtime 对应的接口,并返回结果给 PC。
- 下载 rknpu2

- 解压,使用adb把rknpu2导入到板子
adb push C:\Users\stack\Downloads\rknn-toolkit2-master\rknpu2\runtime\Linux /home/youyeetoo
- 更新rknpu2库
adb shell
cd /home/youyeetoo
# 板子查看rknpu2 库和进程版本
sudo strings /usr/bin/rknn_server | grep "rknn_server version:"
sudo strings /usr/lib/librknnrt.so | grep "librknnrt version:"
# 查看下载的版本
sudo strings Linux/librknn_api/aarch64/librknnrt.so | grep "librknnrt version:"
sudo strings Linux/rknn_server/aarch64/usr/bin/rknn_server | grep "rknn_server version:"
# 如果两个版本不一样,再执行下面命令更新
sudo chmod +x Linux/rknn_server/aarch64/usr/bin/*
sudo cp Linux/rknn_server/aarch64/usr/bin/* /usr/bin/
sudo cp Linux/librknn_api/aarch64/* /usr/lib/
sudo cp Linux/librknn_api/include/* /usr/include/
sudo reboot
