《CMEM与DSPLINK详解(一)》:CMEM与DSPLINK简介

简介: <h2 align="center">CMEM与DSPLINK简介</h2> <p>在双核(ARM+DSP)系统中(典型的为达芬奇系统),如何共享缓冲区并进行通信是一个值得学习和思考的问题。</p> <p>CMEM是一个连续物理存储空间分配模块,使得ARM端Linux进程和DSP端算法之间能够共享缓冲区。DSPLINK即DSP/BIOS LINK是基于DaVinci架构处理器的ARM与

CMEM与DSPLINK简介

在双核(ARM+DSP)系统中(典型的为达芬奇系统),如何共享缓冲区并进行通信是一个值得学习和思考的问题。

CMEM是一个连续物理存储空间分配模块,使得ARM端Linux进程和DSP端算法之间能够共享缓冲区。DSPLINK即DSP/BIOS LINK是基于DaVinci架构处理器的ARM与DSP端进行通信。

1、CMEM

由于应用程序是运行在 MontaVista Linux 之上,在应用程序里进行的地址空间都是虚拟地址,实际上的物理地址空间不一定是连续的,当将这个指针传递给 DSP 端的算法时, DSP 不能够进行处理,因为 DSP 端的算法运行在 DSPBIOS 之上,而 DSP端只能访问实的物理地址,为了解决这个问题, TI 提供了一个 CMEM 模块,用于解决这个问题。

CMEM 是一个连续物理存储空间分配模块,使得 ARM 端 Linux 进程和 DSP 端算法之间能够共享缓冲区。当应用程序需要在共享缓存区动态申请一个连续的物理空间时,通过调用 CMEM 的 API 可以实现,申请得到的空间可以供 DSP 端访问,进行算法处理时数据的传递与处理。

对于DVS365开发套件,CMEM位于:..\dvsdk_2_10_00_17\linuxutils_2_24_02\packages\ti\sdo\linuxutils\cmem

注意:DVS365下的cmem下的demo和测试代码make不通过,待处理。。。。基本测试流程如下图所示:

CMEM Demo 提供了以下测试程序, apitest 用于演示测试 CMEM 的 API 功能,translate 用于演示虚拟地址与实物理地址之间的转换,具体流程如下图所示:

2、DSPLINK

DSPLINK 即 DSP/BIOSTMLINK 是基于 DaVinci 架构处理器的 ARM 与 DSP 端进行通信, DSPLINK 提供了一套通用的 API,从应用层抽象出 ARM 与 DSP 的物理连接特性,从而降低用户开发程序的复杂度。 DSPLINK 可以为用户提供以下 API 服务:
--基本的处理器控制;
--基于逻辑通道的数据传输;
--基于 DSP/BIOS 的 MSGQ 模块的消息传递机制,支持 Zero Copy和 ProcessorCopy 两种物理机制的消息传递。

在实际应用中,应用可能不需要 DSPLINK 提供的所有模块功能,而且可能只需要一种消息传递机制,因此 TI 的 DSPLINK 提供了可配置功能,用户可以根据自己的需要进行裁剪配置,以满足应用需求。

DSPLINK的软件架构如下图所示:

2.1、GPP

从上图看,在 GPP 端,一般运行一个操作系统,基于 GPP 上还有以下模块:OS抽象层、LINK Driver、Processor ManagerDSP/BIOS LINK API。

--OS抽象层 :该层包含了 DSPLINK 需要的一些通用的 OS 服务部件,提供一套通用的 API 与 OS 的其他组件隔离,其他组件通过API 访问不进行直接的访问。而此特性也使DSPLINK 可以方便的移植到不同操作系统中。

--LINK Driver :该层包含了基于 GPP 与 DSP 的物理连接的底层控制操作,负责 GPP 与 DSP 之间的数据传输和 DSP 的运行等操作。

--Processor Manager:该层维护一个针对所有模块的 Book-Keeping 信息,通过 API 给用户提供通过 LINK Driver 的控制操作。

--DSP/BIOS LINK API:该层是提供给 GPP 端的接口,是非常轻小型的组件,API 层可以认为是基于 PROCESSOR MANAGER 和LINK DRIVER 之上的层。

2.2、DSP

LINK DRIVER 是 DSP/BIOS 中驱动的一部分,该部分驱动只负责基于物理连接之上与 GPP 之间的交互。 DSP 端没有 DSPLINK 的 API ,通信是基于DSP/BIOSTM 模块上的 SIO、 GIO、 MSGQ 模块实现。

目录
相关文章
|
XML 安全 网络协议
netconf简介
netconf简要
|
7月前
|
编译器 程序员 C语言
C++系列一: C++简介
C++系列一: C++简介
|
运维 Kubernetes Ubuntu
Kebernetes简介
Kebernetes简介
236 0
|
索引 容器
NSIndexSet 简介
NSIndexSet (以及它的可修改子类, NSMutableIndexSet) 是一个排好序的,无重复元素的整数集合。它看上去有点像 支持离散整数的 NSRange .它能用于快速查找特定范围的值的索引,也能用于快速计算交集, 同时,Foundation collection class 提供了很多好用的方法,方便你使用 NSIndexSet.
387 0
NSIndexSet 简介
|
C# 编译器 存储
|
数据安全/隐私保护
叶帆密码箱简介
叶帆密码箱一个纯绿色软件,小巧实用,可以保存各种网络账号,银号帐户,Email信息 等等,此外还可以直接打开链接网址,直接通过热键发送登录信息,方便简洁
739 0
|
缓存 Shell 开发工具
antigen简介
在Linux下经常需要进行终端操作,一个好的shell解释器可以帮助我们极大提高工作效率。有些同学可能听说过zshell和oh-my-zsh,前者是一个shell程序,由于功能比较强大,所以叫做z shell,意为终极shell;而后者是一个模板化的zshell配置脚本,通过它我们可以快速配置一个好用的zsh。
1585 0
|
数据安全/隐私保护 网络架构 网络协议
|
Java Android开发 C++
|
机器人 vr&ar