arm与dsp通信

                       DVSDK双核异构通信环境搭建

1.到TI官网下载源码dvsdk_dm3730-evm_4_00_00_22_setuplinux(需要注册用户),板子给的demo中也有改软件包(我的路径:G:\Project_Program\linux\demo\dvsdk\source)。

2.将下载的源码拷贝到Linux,

chmod +x dvsdk_dm3730-evm_4_00_00_22_setuplinux命令让文件可执行,./dvsdk_dm3730-evm_4_00_00_22_setuplinux,进入下面的界面

 

(选择包含交叉arm-none-linux-gnueabi-的交叉编译环境)

我用的是板子上给的arm-2009q1,这里面就包含上面的交叉编译环境

 

使用默认的安装目录即可

 

全部选上,然后默认下一步,最后大概半小时完成安装

3.安装完成后会在安装目录下生成以下文件,然后对它进行编译

  

   (1).进入filesystem文件夹,建立双核通信的驱动生成目录,所有的生成的文件都在该文件夹下面 

   Mkdir -p dm3730rootfs/opt/dvsdk

   (2).修改Rules.make文件,指定文件生成目录

     Vim Rules.make

     

将最后一行改成上面的文件目录

EXEC_DIR=/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs/opt/dvsdk的路径下,而对应的*.ko(特别是cmemk.kodsplinkk.kolpm_omap3530.kosdmak.ko)会直接COPY/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs/opt/dvsdk/dsp的目录下,自动的,我们已经在总的Makefile改好路径了。在开发X-LAODER,U-BOOT,LINUX-2.6.32,DVSDK等等会发觉这个omap3530omap3OMAP34XX、或者omap3630类似名字,是因为DM3730的架构和它们类似,同一个家族的,TI DM3730的软件开发都是在他们前身不断开发出来的,这一点搞得很乱

(3).修改Makefile

        

第一行改成适合devkit8500板子适合的内核配置文件

     (4).bootloader uboot可以单独编译,没必要在这里集成编译,因为这里只需要用到编译好的内核的配置文件。

     ( 2).编译

   因为我们没必要把怎个集成环境都编译一次,用不到也浪费时间,可以建立一个脚本对必要的进行编译即可

   Make dvsdk_setup.sh

   加入下面的内容:

   make linux_clean

make linux

make linux_install

 

make cmem_clean

make cmem

make cmem_install

echo "......build sdma......"

read $CMDNAME

 

make sdma_clean

make sdma

make sdma_install

 

echo "......build dsplink......"

read $CMDNAME

 

make dsplink_clean

make dsplink

make dsplink_install

 

echo "......build lpm......"

read $CMDNAME

 

make lpm_clean

make lpm

make lpm_install

 

echo "......build c6run......"

read $CMDNAME

 

make c6run_clean

make c6run

make c6run_examples

#make c6run_install

 

echo "......build c6ccel......"

read $CMDNAME

make c6accel_clean

make c6accel

#make c6accel_install

 

echo "......build ceexamples......"

read $CMDNAME

 

make ceexamples_clean

make ceexamples

 

echo "......build codecs......"

read $CMDNAME

 

make codecs_clean

make codecs

make codecs_install

 

echo "......build dmai......"

read $CMDNAME

 

make dmai_clean

make dmai

make dmai_install

 

make demos_clean

make demos

make demos_install

 

       然后让脚本文件可执行chmod +x dvsdk_setup.sh

       运行脚本:./setup.sh 

       编译半小时左右完成

    (4).

      我们使用read $CMDNAME命令停顿一下,便于分析编译的正确性,回车往下继续编译。运行这个./build_dvsdk.sh之前,一定要先编译内核linux-2.6.32!就是说,如果你的linux-2.6.32使用make distclean或make clean等命令,或刚刚拿到我们的光盘安装,一定要先编译linux-2.6.32,内核编译正常后,会在对应的目录生产很多临时文件,编译CMEM等元素就会去读这些内核临时文件,才能往下编译。只要这个内核有这些临时文件,就可以编译CMEM了,不需要每次都编译一次内核。编译内核方法后面再介绍。在总的Makefile里边提到:

Linux àcmem àsdma àdsplink àlpm àc6run àc6accelàcodecs àdmai àdemos

脚本文件的编译顺序一定要按照上面的编译顺序。

 

  

   (5).环境搭建好以后,我们要了解通信原理,最终要的就是

       

       CodecengineTI DAVINCI双核的核心思想,codec-engine_2_26_02_11\packages\ti\sdo\ce里边有很多算法接口,比DM6446多了一个vidanalytics

4.最后一步就是修改codec-engine_2_26_01_09中的

  

这个路径下的xdcpaths.mak这个文件,这是以后我们编译程序所要依赖的各种接工具的安装目录 

做如下修改:

从上到下:

       

 

 

 

上面的修改一定要正确,然后下面的可以根据自己的交叉编译环境来配置,做小的修改

具体可参照下面的文档(http://www.verydemo.com/demo_c161_i229663.html)

 

上面配置好以后,可以进入到

  

 

可以看到上面apps(ARM端程序开发)codecs(dsp算法程序开发)servers(集成dsp的算法,使能被arm端识别调用)

 

知识总结:

  (1).uboot在分配内存的时候

  内存可以任意设置,只需保证后端Linux128M内存即可

mem=68M@0x80000000 mem=128M@0x88000000

  

也可以参照上面截图的设置,只要内存不越界都行。

   (2).整个框架所用到的有用的函数

      dvsdk app中的函数

if(ce=Engine_open(engineName,NULL,NULL));

                  ce:Engine_open返回的句柄

 

enc=VIDENC_create(ce,encoderName,¶ms);

                  ce:Engine_open返回的句柄

  enconderName:打算调用dsp端的算法

  ¶ms:算法所需要传递的参数

 

 

该函数在算法创建成功后,可以通过该接口设置算法所需

要使用的动态参数。例如要进行视频编码的图像数据格式,

图像的宽高信息等

status=VIDENC_control(enc,XDM_GETSTATUS,&encDyParams,&encStatus);

 

  enc:算法句柄

  XDM_GETSTATUS:判断是要获取还是要置参数

  encDyParams:动态参数的结构体

  encStatus:是否成功标志

 

 

该函数执行最终的算法调用,调用该函数相当于远程调用

DSP端的算法处理函数,执行相应的算法调用并将算法处

理结果返回调用端

status=VIDENC_process(enc,&inBufDesc,&outBufDesc,&encInArgs,&encOutArgs)

  enc:算法句柄

  &inBufDesc:输入Buffer的数据结构信息

  &outBufDesc:输出Buffer的数据结构信息(包括物理地址,大小)

  &encInArgs:输入参数信息

  &encOutArgs:输出参数信息

VINDENC_delete(enc);删除暂时不用的算法实例

Engine_close(ce);关闭Engine_open打开的Engine实例

 

 

上面配置完成了就可以进行程序开发了

参考文档:

http://news.cecb2b.com/info/20130506/575727.shtml

http://blog.csdn.net/lanqilovezs/article/details/20746689

http://zjbintsystem.blog.51cto.com/964211/1199430

http://blog.csdn.net/gzzaigcnforever/article/details/7463525

http://blog.csdn.net/hyanglu1573/article/details/12882199

http://bbs.csdn.net/topics/370205213

 

你可能感兴趣的:(arm与dsp通信)