7.7 VDSP 开发指南
注意
S600上包含两个 VDSP 核,以下描述关于 VDSP1的使用只有在 S600上支持!
基础调试指南
CPU 侧开发
镜像加载卸载
VDSP 所有核共用一个 Firmware,默认名字为 vdsp0。第二个 VDSP 核(VDSP1,仅 S600等双核平台)与 VDSP0在功能上一致:同样通过 remoteproc 节点设置 FW 名称、执行加载/卸载,并可通过 version、state 等节点查看版本与运行状态;区别仅在于 sysfs 节点为 remoteproc_vdsp1(以及启停、日志等路径中的实例号,见下文各小节)。系统在启动时默认不启动 VDSP FW(Firmware),需要用户通过命令的形式手动加载和卸载 FW,命令如下所示:
echo -n <firmware路径> > /sys/module/firmware_class/parameters/path
# 设置VDSP0 FW名称:
echo <firmware名称> > /sys/class/remoteproc/remoteproc_vdsp0/firmware
#VDSP0的FW加载:
echo start > /sys/class/remoteproc/remoteproc_vdsp0/state
#VDSP0的FW卸载:
echo stop > /sys/class/remoteproc/remoteproc_vdsp0/state
# 设置VDSP1 FW名称:
echo <firmware名称> > /sys/class/remoteproc/remoteproc_vdsp1/firmware
#VDSP1的FW加载:
echo start > /sys/class/remoteproc/remoteproc_vdsp1/state
#VDSP1的FW卸载:
echo stop > /sys/class/remoteproc/remoteproc_vdsp1/state
用户可通过以下命令修改 FW 路径(必须是绝对路径):
echo -n <firmware路径> > /sys/module/firmware_class/parameters/path
用户可根据自己命名的 FW 名称在加载之前进行调整:
# VDSP0
echo <firmware名称> > /sys/class/remoteproc/remoteproc_vdsp0/firmware
# VDSP1
echo <firmware名称> > /sys/class/remoteproc/remoteproc_vdsp1/firmware
用户需要修改原始镜像,配置 init.rc,kernel 启动后由 init 进程自动加载 VDSP 镜像。
#首先将编译出的FW镜像(如vdsp0)拷贝到/userdata 下
echo -n <firmware路径> > /sys/module/firmware_class/parameters/path
# VDSP0
echo <firmware名称> > /sys/class/remoteproc/remoteproc_vdsp0/firmware
echo start > /sys/class/remoteproc/remoteproc_vdsp0/state
# VDSP1
echo <firmware名称> > /sys/class/remoteproc/remoteproc_vdsp1/firmware
echo start > /sys/class/remoteproc/remoteproc_vdsp1/state
FW 版本查看
#S100 VDSP0
cat /sys/class/remoteproc/remoteproc_vdsp0/version # for vdsp0
#S600 VDSP1(与 VDSP0 相同,仅节点不同)
cat /sys/class/remoteproc/remoteproc_vdsp1/version # for vdsp1
VDSP 运行状态查看
#running表示已加载,offline表示未加载
#S100 VDSP0
cat /sys/class/remoteproc/remoteproc_vdsp0/state # for vdsp0
#S600 VDSP1(与 VDSP0 相同,仅节点不同)
cat /sys/class/remoteproc/remoteproc_vdsp1/state # for vdsp1
心跳监控
默认处于关闭状态,可通过下列命令打开或关闭;心跳监控、发送周期为100ms,监控到连续7次心跳被丢失就会上报诊断并 reset VDSP。
# 打开心跳监控
echo Y > /sys/module/hobot_remoteproc/parameters/heartbeat_enable
# 关闭心跳监控
echo N > /sys/module/hobot_remoteproc/parameters/heartbeat_enable
通过函数接口形式操作 vdsp
通过 libvdsp.so 动态链接库加载 DSP 程序,实现加载、启动、停止、复位、获取 DSP 状态等功能,API 介绍可参考 VDSP启停控制接口。
消息连接和发送
目前用户只可使用系统预设的服务名称,可使用的服务名如下表所示:
| VDSP | 服务名称 | 作用 | 是否必须启动 | VDSP 侧是否默认启动 |
|---|---|---|---|---|
| DSP0/1 | dcore0_device_op/dcore1_device_op | 系统软件内部对 DSP 的调试控制,系统软件已经使用,用户不可再次注册和使用 | 是 | 是 |
| DSP0/1 | dcore0_acore_heart/dcore1_acore_heart | 心跳机制使用,目前未使用,用户可用作其他用途 | 否 | 否 |
| DSP0/1 | dcore0_rpmsg_bpu/dcore1_rpmsg_bpu | BPU 相关的控制,目前未使用,用户可用作其他用途 | 否 | 否 |
| DSP0/1 | dcore0_rpmsg_op/dcore1_rpmsg_op | 工具链算子相关的控制,目前未使用,用户可用作其他用途 | 否 | 否 |