You're reading the documentation for a development version.
For the latest stable release version, please have a look at master.

ARM 端 RT-Thread 模型部署

文档说明

本文档面向使用 X78NE 平台的开发人员,系统性说明如何在 ARM 端基于 RT-Thread 操作系统完成 PNNA 推理示例的部署与运行。 内容覆盖环境准备、工程获取、编译构建、程序与模型加载以及推理验证,适用于首次接触该平台的用户参考执行。

开发环境与硬件准备

硬件与软件准备如下:

  • X78NE 开发板

  • 电源适配器

  • RS232 转 USB 串口线

  • 网线

  • 串口调试工具

  • tftpd64(用于 TFTP 服务)

串口与网络环境初始化

完成以下连接与配置以确保板卡可正常启动并具备网络通信能力:

  • 将电源、网线分别连接至开发板

  • 使用 RS232 转 USB 线连接开发板 UART_DSP 接口与主机

  • 在设备管理器中确认串口号

  • 打开串口工具,配置为 115200 波特率、8 数据位、无校验、1 停止位、无流控

  • 上电启动开发板,在 U-Boot 倒计时阶段进入命令行

进入 U-Boot 后,执行 tftpboot 命令确认板卡与主机的网络连通性,并根据提示在主机侧配置对应的 IP 地址。通过 ping 命令验证网络状态,确保通信正常。

 1U-Boot 2019.01+ (Jun 20 2024 - 15:43:38 +0800)
 2
 3SOC: X78NE
 4    CPU(ARMV7): 1600 MHz
 5    DSP(C66x): 1250 MHz
 6Model: X78NE EVM
 7
 8 mcu start work 
 9
10Mcu Channel 0
11/2 Bank Groups/4 Banks/10 Column/17 Row/X16/1 Ranks/ECC/Standard
12Systemp DRAM Capacity = 8GB, DDR freq = 1332MHZ
13DDR Init Done. 
14
15Flash: ## Unknown flash on Bank 1 - Size = 0x00000000 = 0 MB
160 Bytes
17NAND:  nand_scan failed, ret -19
180 MiB
19Net:   eth0: ethernet@4200000
20Hit any key to stop autoboot:  0 
21x78ne =>
  • 输入tftpboot命令,可以看到TFTP from server 192.168.23.111,需要我们在电脑上添加192.168.23.111这个IP

 1x78ne =>tftpboot
 2wait SGMII/RGMII link up ...
 3Speed: 1000, full duplex
 4*** Warning: no boot file name; using 'C0A81764.img'
 5Using ethernet@4200000 device
 6TFTP from server 192.168.23.111; our IP address is 192.168.23.100
 7Filename 'C0A81764.img'.
 8Load address: 0x82000000
 9Loading: *
10TFTP error: 'File not found' (1)
11Not retrying...
12x78ne =>
  • 在串口输入ping 192.168.23.111,打印host 192.168.23.111 is alive表示网络通信正常,至此环境准备完毕

1x78ne =>ping 192.168.23.111
2wait SGMII/RGMII link up ...
3Speed: 1000, full duplex
4Using ethernet@4200000 device
5host 192.168.23.111 is alive
6x78ne =>

安装 Env 开发工具

Env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。

具体请参考官方文档:Env 用户手册

RT-Thread 与示例工程获取

RT-Thread 主线版本使用 v5.1.0

1git clone https://gitlink.org.cn/nudt_dsp/rt-thread-v5.1.0.git

获取 X78NE BSP 工程:

1cd rt-thread-v5.1.0/bsp
2git clone -b v20260112 https://gitlink.org.cn/nudt_dsp/x78ne.git

获取 PNNA 示例工程

1cd x78ne/armhf/applications
2git clone -b v20260112 https://gitlink.org.cn/nudt_dsp/pnna.git

构建工具与编译器配置

Env 开发工具安装完成后,在安装目录下,自带交叉编译器工具链,只需编辑 x78ne/armhf/rtconfig.py

示例配置如下:

EXEC_PATH   = r'D:\env-windows\tools\gnu_gcc\arm_gcc\mingw\bin'

工程配置与编译

在 x78ne/armhf 目录空白处,单击鼠标右键,找到:ConEmu Here

在弹出了窗口中执行:

1scons -j16

如需清理工程:

1scons -c

如需修改 RT-Thread 配置项,可先设置 RTT_DIR 环境变量后进入 menuconfig:

1set RTT_DIR=D:\rtt\rt-thread-v5.1.0
2menuconfig

编译完成后将生成 rtthread-a15.elf 与 rtthread-a15.bin 文件。

 1$ scons -j16
 2...
 3LINK rtthread-a15.elf
 4Memory region         Used Size  Region Size  %age Used
 5       MSMC_SRAM:     1788288 B      2016 MB      0.08%
 6    RPMSG_SH_MEM:         64 KB         4 MB      1.56%
 7arm-none-eabi-objcopy -O binary rtthread-a15.elf rtthread-a15.bin
 8arm-none-eabi-size rtthread-a15.elf
 9   text    data     bss     dec     hex filename
10 554523   30148 1264000 1848671  1c355f rtthread-a15.elf
11scons: done building targets.
12$ 

TFTP 服务配置

运行tftpd64.exe

  • Current Directory 一栏填 x78ne arm 工程路径 ~/rt-thread/bsp/x78ne/armhf

  • Server interfaces 一栏选择 192.168.23.111

程序与模型加载

在 U-Boot 命令行中依次加载模型、输入数据以及 RT-Thread 系统镜像::

1tftpboot 0xA0000000 ./applications/pnna/examples/yolov5s/resource/yolov5s-int16.nb
2tftpboot 0xA2000000 ./applications/pnna/examples/yolov5s/resource/car_int16.dat
3tftpboot 0x82000000 rtthread-a15.bin
4dcache flush
5go 0x82000000

系统启动成功后,进入 RT-Thread 控制台

1...
2Fined PHY Chip success, PhyAddr = 7, PhyID = 0e400141
31000Mbps FullDuplex
4[77] D/eth: gmac open
5msh />

推理示例运行与结果验证

在 msh 终端中执行 PNNA 示例命令:

1yolov5s

推理日志关键内容:

 1msh >yolov5s
 2...
 3npu[821ce2e8] gck pnna_drv_init, video memory heap base: 0xc0000000, size: 0x04000000
 4npu[821ce2e8] HASHMAP 0x0x8216c87c(process-ID) INIT SUCCESS
 5npu[821ce2e8] DATABASE 0x0x8216d560(task-desc) INIT SUCCESS
 6npu[821ce2e8] DATABASE 0x0x8216d52c(memory-mgt) INIT SUCCESS
 7INFO  init pnna lite, driver version=0x00010f00...
 8   at query_hardware_info (applications\pnna\src\nn_api.c:37)
 9INFO  cid=0xb1, device_count=1
10   at query_hardware_info (applications\pnna\src\nn_api.c:50)
11INFO    device[0] core_count=1
12   at query_hardware_info (applications\pnna\src\nn_api.c:53)
13INFO  Input: [640 640 3 1], Data format: INT16, Quant format: QUANTIZE_DYNAMIC_FIXED_POINT
14   at get_input_quantize_param (applications\pnna\src\quantize.c:933)
15INFO  QUANTIZE_DYNAMIC_FIXED_POINT, fl: 14
16   at get_input_quantize_param (applications\pnna\src\quantize.c:945)
17INFO  Output: [85 25200 1 0], Data format: INT16, Quant format: QUANTIZE_DYNAMIC_FIXED_POINT
18   at get_output_quantize_param (applications\pnna\src\quantize.c:989)
19INFO  QUANTIZE_DYNAMIC_FIXED_POINT, fl: 5
20   at get_output_quantize_param (applications\pnna\src\quantize.c:1001)
21INFO  No preprocess required   at create_app_ctx (applications\pnna\src\nn_api.c:124)
22create_app_ctx done
23Total detections: 5
240 0.88 42.44 230.98 193.25 540.08
250 0.88 175.69 241.36 271.75 511.14
260 0.88 532.30 229.30 639.58 519.95
270 0.59 -0.03 325.05 55.41 517.27
285 0.47 13.00 131.06 619.75 461.44
29destroy app_ctx_t done.
30pnna closed
31msh >

推理结果如下所示:

10 0.88 42.44 230.98 193.25 540.08
20 0.88 175.69 241.36 271.75 511.14
30 0.88 532.30 229.30 639.58 519.95
40 0.59 -0.03 325.05 55.41 517.27
55 0.47 13.00 131.06 619.75 461.44

运行过程中可观察到 PNNA 驱动初始化、模型加载、量化参数解析以及推理执行日志。程序结束后输出检测结果,每一行表示一个目标,字段依次为:

  • 类别索引

  • 置信度

  • 左上角 x 坐标

  • 左上角 y 坐标

  • 目标框宽度

  • 目标框高度

日志与结果输出表明模型已成功在 ARM 端 RT-Thread 系统上完成推理流程。