Hi3516CV610 20S V4 开发板启动与调试流程

Hi3516CV610 20S V4 开发板启动与调试流程

1 目标和当前成果

本文记录 Hi3516CV610 20S V4 开发板从首次上电到应用开发环境可用的完整过程。

目前已经完成:

  • 开发板通过 UART0 正常启动并进入 Linux。
  • Windows、Ubuntu 虚拟机与开发板能够通过网线直连通信。
  • SC4336P 摄像头、ISP、VI、VPSS、H.265 编码和 RTSP 推流正常。
  • VLC 可以显示实时视频,镜头已经完成手动调焦。
  • Ubuntu 与开发板之间的 NFS 双向读写正常。
  • 海思 ARM musl 交叉编译器可用。
  • 自行编译的 ARM 程序已经在开发板上成功运行。
  • 厂家 Ubuntu 虚拟机及 Hi3516CV610 SDK 已准备完成。

下一阶段是编译和运行 sample_venc,开始研究 MPP 应用层流程。

2 硬件连接

开发板主要接口:

  • Type-C:默认 5V 电源输入。
  • UART0 Debug:系统启动日志和命令行调试。
  • RJ45:有线网络。
  • Sensor 0/1:摄像头 FPC 接口。

首次启动需要两条独立连接:

  1. USB 转串口模块连接电脑和开发板 UART0。
  2. Type-C 为开发板供电,使用 5V、1A 或以上电源。

注意:只插 Type-C 电源不会产生 UART0 的 COM 端口。COM 端口来自 CH340/CH343 USB 转串口模块。

安全要求:

  • 摄像头禁止带电插拔。
  • 摄像头 FPC 排线不能插反。
  • 不要在普通启动时按升级键。
  • 不要把 Zadig 用于 CH340/CH343 普通串口驱动。
  • 暂时不要烧写固件、修改 U-Boot 或驱动。

3 Windows 串口调试

3.1 检查串口模块

将 USB 转串口模块单独插入电脑,它即使没有连接开发板也应该被 Windows 识别。

设备管理器中正常应出现类似:

text 复制代码
USB-SERIAL CH340 (COMx)

如果只有"蓝牙链接上的标准串行 COM3/COM4",说明 USB 转串口模块尚未被识别。

排查顺序:

  1. 重新插拔 USB 转串口模块。
  2. 更换电脑 USB 接口,不经过 USB Hub。
  3. 安装资料包中的 CH340 驱动。
  4. Win11 下仍不稳定时再考虑使用 CH343。

3.2 串口参数

使用 SecureCRT、XCOM 或 Xshell:

text 复制代码
波特率:115200
数据位:8
停止位:1
校验:无
流控:无

先打开串口窗口,再给开发板 Type-C 上电。看到 U-Boot 和 Linux 启动日志,表示基本启动正常。

4 开发板系统信息

开发板实测系统:

text 复制代码
Linux 5.10.221
ARMv7 32 位
架构:armv7l
C 库:musl 1.2.3
BusyBox:1.34.1
交叉编译器系列:arm-v01c02-linux-musleabi-gcc 10.3.0

查看命令:

sh 复制代码
uname -a
uname -m
cat /proc/version
busybox

开发板是裁剪过的 BusyBox 嵌入式 Linux,不是 Ubuntu,因此:

  • 没有 apt
  • 通常没有 sudo
  • 不一定存在 /etc/os-release
  • 软件应在 Ubuntu 中交叉编译,再传到板子运行。

5 电脑与开发板网线直连

没有路由器也可以调试。只要电脑、虚拟机和开发板处于同一静态网段即可。

本次使用的地址:

text 复制代码
开发板 eth0:192.168.9.9/24
Ubuntu 虚拟机:192.168.9.119/24

5.1 开发板配置

sh 复制代码
ifconfig eth0 192.168.9.9 netmask 255.255.255.0 up

5.2 Ubuntu 配置

先确认网卡名称:

bash 复制代码
ip -br addr

假设有线网卡是 ens38

bash 复制代码
sudo ifconfig ens38 192.168.9.119 netmask 255.255.255.0 up

不需要设置网关和 DNS。

5.3 连通性测试

Ubuntu 测试开发板:

bash 复制代码
ping -c 4 192.168.9.9

开发板测试 Ubuntu:

sh 复制代码
ping -c 4 192.168.9.119

Windows 也可以测试:

powershell 复制代码
ping 192.168.9.9

6 使用 PQTools 点亮摄像头

进入开发板 PQTools 目录:

sh 复制代码
cd /system/Hi3516CV610-PQ-V1.0.2.0

SC4336P 摄像头:

sh 复制代码
./PQTools.sh -s sc4336p

其他可能的型号:

sh 复制代码
./PQTools.sh -s sc450ai
./PQTools.sh -s gc8613

只能选择实际摄像头型号,不能随意尝试。

检查 RTSP 服务:

sh 复制代码
netstat -an | grep 554

正常应看到 554 端口处于监听状态。

7 使用 VLC 播放视频

RTSP 地址:

text 复制代码
rtsp://192.168.9.9:554/0

该地址需要放入 VLC 的"打开网络串流",不能直接当作 PowerShell 命令执行。

Ubuntu 虚拟机中建议关闭硬件解码:

bash 复制代码
vlc --avcodec-hw=none --rtsp-tcp --network-caching=1000 rtsp://192.168.9.9:554/0

VMware 中出现以下日志,表示虚拟显卡不支持 VA-API/VDPAU 硬件解码:

text 复制代码
vaInitialize: unknown libva error
Failed to open VDPAU backend

这类错误可通过软件解码规避。Windows 能够 Ping 通开发板时,直接用 Windows VLC 播放通常更稳定。

如果出现少量:

text 复制代码
Could not find ref with POC

通常表示刚接入 H.265 码流时缺少参考帧,或虚拟机解码/缓存不足。持续出现时使用 TCP、增加缓存,并优先在 Windows VLC 播放。

8 摄像头调焦

如果画面能显示但整体呈现大面积光斑和均匀模糊,通常是镜头没有对焦,不是网络或 ISP 故障。

调焦方法:

  1. 将带文字的纸放在镜头前约 1~2 米。
  2. 保持 VLC 实时播放。
  3. 轻轻旋转镜头前端圆形镜筒。
  4. 每次只旋转一点,观察文字清晰度。
  5. 越来越糊时改为反方向旋转。

不要拉扯模组或排线,不要把镜头完全拧下,也不要触摸镜片玻璃。确认镜片表面没有保护膜。

9 检查媒体内存和负载

查看 MMZ 媒体内存:

sh 复制代码
cat /proc/umap/media-mem

本次 PQTools 推流实测:

text 复制代码
MMZ 总量:96MB
已用:约 83MB
剩余:约 13MB

内存记录中可看到:

text 复制代码
vi
isp
vpss
h265e
pqt_mbuf

说明当前媒体链路为:

text 复制代码
SC4336P Sensor
→ ISP/VI
→ VPSS
→ H.265 VENC
→ RTSP

查看 CPU:

sh 复制代码
top

实测 ittb_stream sc4336p CPU 占用约 4.8%,推流负载正常。PQTools 的 MMZ 占用较大,主要用于测试和 ISP 调试,不适合作为最终产品应用。

10 配置 NFS

10.1 NFS 的用途

NFS 让开发板把 Ubuntu 的目录当作自己的目录使用:

text 复制代码
Ubuntu:/nfs
       ↕ 网线
开发板:/tmp

使用方式:

text 复制代码
Ubuntu 写代码和交叉编译
→ 输出文件放入 /nfs
→ 开发板在 /tmp 中立即看到并运行

这样无需反复烧写 Flash,也方便保存视频、日志和调试文件。

10.2 Ubuntu 导出目录

确认目录:

bash 复制代码
ls -ld /nfs

安装服务:

bash 复制代码
sudo apt update
sudo apt install nfs-kernel-server

导出给开发板:

bash 复制代码
sudo exportfs -i -o rw,sync,no_subtree_check,no_root_squash,insecure 192.168.9.9:/nfs
sudo exportfs -v

永久配置 /etc/exports 时加入:

text 复制代码
/nfs 192.168.9.9(rw,sync,no_subtree_check,no_root_squash,insecure)

然后执行:

bash 复制代码
sudo exportfs -rav
sudo systemctl restart nfs-kernel-server

10.3 开发板挂载

sh 复制代码
mount -t nfs -o nolock,vers=3 192.168.9.119:/nfs /tmp

检查:

sh 复制代码
mount | grep nfs
ls -la /tmp

双向测试:

Ubuntu:

bash 复制代码
echo "hello hi3516" > /nfs/nfs_test.txt

开发板:

sh 复制代码
cat /tmp/nfs_test.txt
echo "hello from hi3516" > /tmp/board_test.txt
sync

Ubuntu:

bash 复制代码
cat /nfs/board_test.txt

本次双向测试已经成功。

卸载前先离开挂载目录:

sh 复制代码
cd /
sync
umount /tmp

11 安装交叉编译器

工具链压缩包:

text 复制代码
gcc-20240318-arm-v01c02-linux-musleabi.tgz

解压安装:

bash 复制代码
tar -xzf gcc-20240318-arm-v01c02-linux-musleabi.tgz
cd gcc-20240318-arm-v01c02-linux-musleabi
chmod +x install_gcc_toolchain.sh
sudo ./install_gcc_toolchain.sh
source /etc/profile

检查:

bash 复制代码
which arm-v01c02-linux-musleabi-gcc
arm-v01c02-linux-musleabi-gcc --version

默认安装位置通常是:

text 复制代码
/opt/linux/x86-arm/arm-v01c02-linux-musleabi-gcc

12 验证交叉编译和运行

Ubuntu 创建测试程序:

bash 复制代码
printf '#include <stdio.h>\nint main(void){puts("hello Hi3516CV610");return 0;}\n' > /nfs/hello.c

编译:

bash 复制代码
arm-v01c02-linux-musleabi-gcc /nfs/hello.c -o /nfs/hello_arm
file /nfs/hello_arm

结果应包含:

text 复制代码
ELF 32-bit
ARM
interpreter /lib/ld-musl-arm.so.1

开发板运行:

sh 复制代码
cd /tmp
chmod +x hello_arm
./hello_arm

本次实际输出:

text 复制代码
hello Hi3516CV610

这证明交叉编译器、NFS、CPU 架构和开发板运行环境全部正常。

13 厂家虚拟机和 SDK

厂家 SDK 源码目录:

text 复制代码
~/Hi/hi3516cv610_1020_musl/Hi3516CV610_SDK_V1.0.2.0/smp/a7_linux/source

主要结构:

text 复制代码
source/
├── bsp          整个系统和固件编译入口,暂时不使用
├── cfg.mak
├── common
├── interdrv     芯片内部驱动,当前不研究
├── Makefile.param
├── mpp          媒体应用和 sample,当前重点
├── osal
├── out          海思二进制库和模块,不修改
└── scripts

当前只研究 MPP 应用层,不研究协议、底层驱动、U-Boot 和完整固件构建。

14 下一步编译 sample_venc

进入 SDK 的 source 目录后查找:

bash 复制代码
source /etc/profile
find mpp/sample -maxdepth 3 -type d -iname "*venc*" -print
find mpp/sample -maxdepth 4 -type f -name "Makefile" | grep -i venc

目录可能是:

text 复制代码
mpp/sample/venc

或者:

text 复制代码
mpp/sample/sample_venc

进入实际目录:

bash 复制代码
cd 实际找到的目录
ls -la
make 2>&1 | tee ~/sample_venc_build.log

查找编译结果:

bash 复制代码
find . -type f -name "sample_venc" -ls
file ./sample_venc

复制到 NFS:

bash 复制代码
cp ./sample_venc ~/nfs/
chmod +x ~/nfs/sample_venc

运行前必须停止 PQTools,避免 ittb_streamsample_venc 同时占用 VI、ISP、VPSS 和 VENC。最稳妥的方法是重启开发板,然后只启动 sample_venc

开发板重新配置网络并挂载 NFS 后运行:

sh 复制代码
cd /tmp
chmod +x sample_venc
./sample_venc 0 1

按照厂家说明,后续交互依次选择:

text 复制代码
0
c

VLC 地址:

text 复制代码
rtsp://192.168.9.9:554/live.h264

15 sample_venc 应重点研究的应用流程

后续阅读源码时只跟踪以下主线:

text 复制代码
系统和 VB/MMZ 初始化
→ Sensor 与 ISP 启动
→ 创建 VI
→ 创建 VPSS
→ 创建 VENC
→ 绑定 VI → VPSS → VENC
→ 获取编码码流
→ 保存文件或发送 RTSP
→ 停止线程
→ 按相反顺序解绑和释放资源

模块的简单理解:

  • ISP:曝光、白平衡、去噪、色彩和图像质量。
  • VI:从 Sensor 接收视频帧。
  • VPSS:缩放、裁剪、增强并生成不同尺寸的视频帧。
  • VENC:编码为 H.264、H.265 或 JPEG。
  • 应用层:控制启停、获取码流、保存录像和网络发送。

16 常见问题速查

Windows 没有 COM 端口

  • Type-C 只是供电,UART0 需要独立 USB 转串口模块。
  • 检查 CH340 驱动;Win11 不稳定时再考虑 CH343。
  • 不要用 Zadig 接管普通 USB Serial。

能 Ping 但 VLC 打不开

  • 确认 PQTools 已启动。
  • 执行 netstat -an | grep 554
  • 地址必须是 rtsp://192.168.9.9:554/0
  • 暂停 VPN、代理并检查防火墙。

视频非常模糊

  • 先旋转镜头手动调焦。
  • 检查镜头保护膜。
  • 不要先调整 ISP 参数。

NFS Permission denied

  • 确认导出的是真实目录。
  • /home/youyan/nfs 之类路径只是示例,必须以 pwd 为准。
  • 确认 /etc/exportsexportfs 已允许开发板 IP 192.168.9.9

板子没有 apt

  • 这是 BusyBox 嵌入式 Linux,不是 Ubuntu。
  • 在 Ubuntu 交叉编译,再通过 NFS 到板子运行。

sample_venc 运行失败或资源忙

  • 不要同时运行 PQTools/ittb_stream
  • 重启板子后只运行 sample_venc
  • 确认摄像头型号和配置一致。

录像文件保存位置

  • 不要把大文件写入板载 Flash。
  • 优先保存到 NFS 或 SD 卡。
  • 断电前执行 sync

17 最终开发闭环

text 复制代码
Windows 串口观察启动日志
→ Ubuntu 交叉编译应用
→ NFS 共享到开发板
→ 开发板运行程序
→ VI/ISP/VPSS/VENC 处理视频
→ VLC 验证 RTSP
→ 保存日志和码流到 Ubuntu

完成 sample_venc 后,再开始对照源码绘制应用流程图,并围绕初始化、绑定、取流和退出四部分研究 MPP API。

相关推荐
P.D.Wei1 小时前
[Leetcode 3524] 求出数组的X值I
python·学习
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day46|贯穿项目 2 思维导图复盘
java·开发语言·vue.js·学习·spring
M78佐菲9 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
无敌贵点大王12 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
是翎13 小时前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
Linux-lucky13 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手14 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
AI职业加油站17 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
啄缘之间18 小时前
1.【SVA】什么是SVA?
经验分享·学习·测试用例·verilog·sva