开始学习DavinciDM6446,首先就要知道Davinci软件是如何架构的。
三个--codecs,servers,apps
算法,算法服务器,应用
codecs就是处理各种数据信号的算法程序,是不能单独成为程序的,它是以库的形式提供给,servers,apps。
servers是dsp可以运行的程序(包括操作系统,就是算法的dsp端的执行体包括dsp/bios)。
Apps是arm端linux操作系统下的一个应用程序,也就是使用算法的应用。
还有一些其他的模块,如底层还有dsplink(dsp,arm多核通信模块),VISA(算法调用接口模块),CMEM模块(连续块内存分配模块),LPM(电源管理模块)。
架构流程:
1.算法工程师负责编写符合XDAIS的算法,并将算法封装成库如*.a64P相当于lib。
2.服务器集成工程师整合不同的组件(如DSP/BIOS,框架结构,Link驱动,Codec引擎等)生成一个称为Codec Server的DSP端可执行代码*.64P相当于.out,支持远端的Codec引擎。
3.引擎集成工程师定义各种引擎配置。
4.应用程序创建者使用Codec引擎API编写应用程序。
运行机制:
当程序编译完成后,应该要有两个程序,一个是在arm端运行的程序比如*.x470MV,dsp端运行程序*.x64p.
然后还要有各种驱动dsplinkk.ko(多核通信驱动),CMEM.ko(连续内存分配驱动,因为dsp要和arm共享一段内存来通信,而arm端一般跑linux,是虚拟内存,必须要一个机制分配连续的一致性内存),LPM.ko(电源管理模块)。
当我们在linux执行./*.x470MV时,linux加载这个程序并运行,这个应用程序会调用engine_create创建一个算法引擎,这个函数的实际效果是将*.x64p下载到内存指定地址,然后给dsp发相关命令,从指定地址启动,从而dsp程序运行起来,当arm应用程序要和arm端通信时就直接操作dsplink驱动文件,即可达到通信的目的,不过一般程序员只需使用标准的VISA Api来操作,这些api会帮你和dsp端通信。