J6X VDSP数字信号处理器
开发指南
CPU侧开发
镜像加载卸载
J6X系统在启动时默认不启动VDSP
FW(Firmware),需要用户通过命令的形式手动加载和卸载FW,命令如下所示:
echo -n <firmware路径> > /sys/module/firmware_class/parameters/path
#设置VDSP0 FW名称:
echo <firmware名称> > /sys/class/remoteproc/remoteproc1/firmware
#VDSP0的FW加载:
echo start > /sys/class/remoteproc/remoteproc1/state
#VDSP0的FW卸载:
echo stop > /sys/class/remoteproc/remoteproc1/state
用户可通过以下命令修改FW路径(必须是绝对路径):
echo -n <firmware路径> > /sys/module/firmware_class/parameters/path
用户可根据自己命名的FW名称在加载之前进行调整:
echo <firmware名称> > /sys/class/remoteproc/remoteproc1/firmware
用户需要修改原始镜像,配置init.rc,kernel启动后由init进程自动加载VDSP镜像。
echo -n <firmware路径> > /sys/module/firmware_class/parameters/path
#J6X VDSP0
echo <firmware名称> > /sys/class/remoteproc/remoteproc1/firmware
echo start > /sys/class/remoteproc/remoteproc1/state
FW版本查看
cat /sys/class/remoteproc/remoteproc1/version # for vdsp0
VDSP运行状态查看
#J6X VDSP0
cat /sys/class/remoteproc/remoteproc1/state # for vdsp0
心跳监控
默认处于关闭状态,可通过下列命令打开或关闭;心跳监控、发送周期为100ms,监控到连续7次心跳丢失就会上报诊断并reset VDSP
打开心跳监控
echo Y > /sys/module/hobot_remoteproc/parameters/heartbeat_enable
关闭心跳监控
echo N > /sys/module/hobot_remoteproc/parameters/heartbeat_enable
通过libvdsp.so动态链接库加载DSP程序,实现加载、启动、停止、复位、获取DSP状态等功能.
用户可使用的API可参考下表:
| 接口 | 功能 | 头文件 | 相关库 |
| | | | |
+===================+================+===========+==========+
| hb_vdsp_get_version | 库版本号 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_init | 初始化库 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_deinit | 解初始化库 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_start | 加载并启动VDSP | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_stop | 停止VDSP | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_get_status | 获取vdsp运行状态 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_reset | 复位VDSP | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_set_path | 配置vdsp镜像路径 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_set_name | 配置vdsp镜像名字 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_get_fd | 获取底层设备fd句柄 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_close_fd | 关闭底层设备fd句柄 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_mem_alloc | 分配 hbmem 和映射 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_mem_free | 释放hbmem 和解映射 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
.. if defined(j6e) or defined(j6p)
| hb_vdsp_mmu_map | smmu映射 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
| hb_vdsp_mmu_unmap | smmu解映射 | hb_vdsp_mgr.h | libvdsp.so |
+---------------------+--------------------+---------------+------------+
用户可使用的API可参考下表:
接口 功能 头文件 相关库 ========================== ==== ======= =======
hb_rpmsg_connect_server 连接服务 rpmsg_lib.h librpmsg.so
hb_rpmsg_disconnect_server 断开服务 rpmsg_lib.h librpmsg.so
hb_rpmsg_send 发送消息 rpmsg_lib.h librpmsg.so
hb_rpmsg_recv 接收消息 rpmsg_lib.h librpmsg.so ========================== ==== ======= =========
其中,同一个服务通道,不支持多进程、多线程并发接收或发送。
heap相关开发
VDSP提供了动态分配释放heap接口,支持配置自定义内存对齐大小,以及支持查看当前heap状态,当VDSP端需要动态分配heap时,可以通过以下接口实现。
| 接口 | 功能 | 相关头文件 |
+========================+=======================+==================+
| hb_mem_heap_initialize | 初始化mem allocator接口 | hb_mem_allocator.h |
| | | |
+--------------------------+---------------------------+--------------------+
| hb_mem_heap_deinitialize | 解初始化mem allocator接口 | hb_mem_allocator.h |
| | | |
+--------------------------+---------------------------+--------------------+
| hb_mem_heap_alloc | 分配heap空间 | hb_mem_allocator.h |
| | | |
+--------------------------+---------------------------+--------------------+
| hb_mem_heap_free | 释放已分配的heap空间 | hb_mem_allocator.h |
| | | |
+--------------------------+---------------------------+--------------------+
| hb_mem_heap_get_status | 获取当前heap状态 | hb_mem_allocator.h |
| | | |
+--------------------------+---------------------------+--------------------+
VDSP侧开发
vdsp开发环境搭建和编译
代码获取步骤如下:
(2)在vdsp路径下可以获取到vdsp源码
DSP工具包获取方式如下:
(2)地平线客户代表内部申请通过后释放DSP工具包给到客户。
(3)本文档里提及的DSP工具和手册均通过工具包释放。
Xtensa Xplorer支持Window和linux的开发环境,用户可根据需求选择。
同样支持在linux环境下开发,获取代码后编译步骤如下:
(2)bash make.sh
静态库生成在library目录
library/libvdsp0.a
二进制镜像生成在samples目录
samples/{subdir}/vdsp0