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 接口。
首次启动需要两条独立连接:
- USB 转串口模块连接电脑和开发板 UART0。
- 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 转串口模块尚未被识别。
排查顺序:
- 重新插拔 USB 转串口模块。
- 更换电脑 USB 接口,不经过 USB Hub。
- 安装资料包中的 CH340 驱动。
- 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~2 米。
- 保持 VLC 实时播放。
- 轻轻旋转镜头前端圆形镜筒。
- 每次只旋转一点,观察文字清晰度。
- 越来越糊时改为反方向旋转。
不要拉扯模组或排线,不要把镜头完全拧下,也不要触摸镜片玻璃。确认镜片表面没有保护膜。
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_stream 与 sample_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/exports或exportfs已允许开发板 IP192.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。