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.ko,dsplinkk.ko,lpm_omap3530.ko,sdmak.ko)会直接COPY到/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs/opt/dvsdk/dsp的目录下,自动的,我们已经在总的Makefile改好路径了。在开发X-LAODER,U-BOOT,LINUX-2.6.32,DVSDK等等会发觉这个omap3530、omap3、OMAP34XX、或者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).环境搭建好以后,我们要了解通信原理,最终要的就是
Codecengine是TI 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在分配内存的时候
内存可以任意设置,只需保证后端Linux有128M内存即可
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