专栏底层软件J6X VDSP数字信号处理器

J6X VDSP数字信号处理器

费小财2026-02-10
37
0

J6X VDSP数字信号处理器

开发指南

CPU侧开发

镜像加载卸载

J6X VDSP 所有core共用一个Firmware,默认名字为vdsp0。
J6X系统在启动时默认不启动VDSP
FW(Firmware),需要用户通过命令的形式手动加载和卸载FW,命令如下所示:

echo -n <firmware路径> > /sys/module/firmware_class/parameters/path

#J6X VDSP0
#设置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名称在加载之前进行调整:

#J6X VDSP0
echo <firmware名称> > /sys/class/remoteproc/remoteproc1/firmware

用户需要修改原始镜像,配置init.rc,kernel启动后由init进程自动加载VDSP镜像。

#首先将编译出的FW镜像(如vdsp0)拷贝到/userdata 下
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版本查看

#J6X VDSP0
cat /sys/class/remoteproc/remoteproc1/version # for vdsp0

VDSP运行状态查看

#running表示已加载,offline表示未加载
#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开发环境搭建和编译

代码获取步骤如下:

(1)首先获取到发布包,解压后确认有vdsp源码
(2)在vdsp路径下可以获取到vdsp源码

DSP工具包获取方式如下:

(1)客户向地平线客户代表申请DSP工具包。
(2)地平线客户代表内部申请通过后释放DSP工具包给到客户。
(3)本文档里提及的DSP工具和手册均通过工具包释放。
Xtensa Xplorer是由cadence提供的VDSP集成开发环境,用户可使用该IDE实现代码开发、编译、调试、软件分析、性能分析等功能。
Xtensa Xplorer支持Window和linux的开发环境,用户可根据需求选择。

同样支持在linux环境下开发,获取代码后编译步骤如下:

(1)cd vdsp_fw
(2)bash make.sh

静态库生成在library目录

library/libvdsp0.a

二进制镜像生成在samples目录

samples/{subdir}/vdsp0

底层软件
社区征文前沿技术官方教程征程6
评论0
0/1000