DSP

ARM核与DSP核通信的解决方案(dvsdk_3_00)

2019-07-13 12:50发布

本文章整理于网络,不知原作者信息,如有侵权请联系本人(http://blog.csdn.net/dyzok88)注明,谢谢。 本文操作适用于dvsdk_3_00_02_44版本,新版dvsdk_4与之差别很大,请各位读者知晓。

1. 软件安装

a) 安装dsp编译工具

i. 在windows下复制 TI-C6x-CGT-v6.0.16.1.bin 到与虚拟机共享的share目录
ii. 起动虚拟机,起动控制台
iii. 输入 cd ~/workdir/ 进入workdir目录
iv. 输入 chmod +x TI-C6x-CGT-v6.0.16.1.bin 设定可执行属性
v. 输入 ./TI-C6x-CGT-v6.0.16.1.bin 安装
vi. 安装过程中选择安装路径时,输入 /home/realtimedsp/workdir/cg6x_6_0_16即可

b) 安装 xdc 编译工具

i. 在windows下复制 xdctools_setuplinux_3_15_01_59.bin 到与虚拟机共享的share目录
ii. 起动虚拟机,起动控制台
iii. 输入 cd ~/workdir/ 进入workdir目录
iv. 输入 chmod +x xdctools_setuplinux_3_15_01_59.bin 设定可执行属性
v. 输入 ./xdctools_setuplinux_3_15_01_59.bin 安装
vi. 安装过程中选择安装路径时,输入 /home/realtimedsp/workdir/xdctools_3_15_01_59即可

c) 安装 dsp/bios 编译工具

i. 在windows下复制 bios_setuplinux_5_33_06.bin 到与虚拟机共享的share目录
ii. 起动虚拟机,起动控制台
iii. 输入 cd ~/workdir/ 进入workdir目录
iv. 输入 chmod +x bios_setuplinux_5_33_06.bin 设定可执行属性
v. 输入 ./bios_setuplinux_5_33_06.bin 安装
vi. 安装过程中选择安装路径时,输入 /home/realtimedsp/workdir/bios_5_33_06即可

d) 安装 dvsdk

i. 在windows下复制 dvsdk_3_00_02_44.tar.gz 到与虚拟机共享的share目录
ii. 起动虚拟机,起动控制台
iii. 输入 cd ~/workdir/omap3530/project 进入project目录
iv. 输入 tar -xvf /mnt/windows/dvsdk_3_00_02_44.tar.gz 解压dvsdk工程到本目录下

2. 修改环境配置

a) 配置dvsdk_3_00_02_44/codec_engine_2_24/examples/xdcpaths.mak:

i. 设定xdc用到的环境变量,注意使用绝对路径

设定CE_INSTALL_DIR := /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/codec_engine_2_24
设定XDC_INSTALL_DIR       := /home/realtimedsp/workdir/xdctools_3_15_01_59
设定BIOS_INSTALL_DIR      := /home/realtimedsp/workdir/bios_5_33_06
设定DSPLINK_INSTALL_DIR:= /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/dsplink_1_61_03/packages
设定XDAIS_INSTALL_DIR     := /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/dmai_2_00_01_04
设定FC_INSTALL_DIR        := /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/framework_components_2_24
设定CMEM_INSTALL_DIR      := /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/linuxutils_2_24_02
设定BIOSUTILS_INSTALL_DIR := /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/biosutils_1_01_00
设定EDMA3_LLD_INSTALL_DIR := /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/edma3_lld_01_10_00_01
设定LPM_INSTALL_DIR       := /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44/local_power_manager_1_24

ii. 如果某个工具不存在,又不需要则注释掉即可,同时注释掉跟这个目录相关的语句

iii. 配置arm编译器路径

设定CGTOOLS_V5T := /home/realtimedsp/workdir/arm-2009q1

iv. 配置dsp编译器的路径

设定CGTOOLS_C64P := /home/realtimedsp/workdir/cg6x_6_0_16 
设定CGTOOLS_C674 := /home/realtimedsp/workdir/cg6x_6_0_16

3. Dvsdk编译环境配置

a) 输入gedit rules.make 

设定DVSDK_INSTALL_DIR=${HOME}/workdir/omap3530/project/dvsdk_3_00_02_44
设定 CODEGEN_INSTALL_DIR=/home/realtimedsp/workdir/cg6x_6_0_16
设定 XDC_INSTALL_DIR=/home/realtimedsp/workdir/xdctools_3_15_01_59
设定 BIOS_INSTALL_DIR=/home/realtimedsp/tools/bios_5_33_06
设定 LINUXKERNEL_INSTALL_DIR=/home/realtimedsp/workdir/omap3530/project/linux-02.01.03.11
设定UBOOT_INSTALL_DIR=/home/realtimedsp/workdir/omap3530/projects/uboot-02.01.03.11
设定CSTOOL_DIR=/home/realtimedsp/workdir/arm-2009q1
设定EXEC_DIR=${HOME}/workdir/filesys/opt/dvsdk/$(PLATFORM)

4.DMAI 编译环境设置

DVSDK_3_00_INSTALL_DIR = $(HOME)/workdir/omap3530/projects/dvsdk_3_00_02_44
CE_INSTALL_DIR_o3530_al =
    $(DVSDK_3_00_INSTALL_DIR)/codec_engine_2_24
LINUXKERNEL_INSTALL_DIR_o3530_al =
    $(HOME)/workdir/lsp
CROSS_COMPILE_o3530_al =
    $(HOME)/workdir/arm-2009q1/bin/arm-none-linux-gnueabi-
XDC_INSTALL_DIR_o3530_al =
    $(HOME)/workdir/xdctools_3_15_01_59
EXEC_DIR_o3530_al =
$(HOME)/workdir/filesys/opt/dvsdk/$(PLATFORM)

4. 编译 dvsdk

a) 以上设定完成后,回到 /home/realtimedsp/workdir/omap3530/project/dvsdk_3_00_02_44 目录下,先输入 make clean, 清除以前编译的临时文件,在 输入 make 对 整个的dvsdk工程编译一次。这里会编译cmem组件和lpm组件模块,为以后的算法编译做准备
b) 编译dsplink, 在当前dvsdk根目录下,输入 make dsplink_clean,先清除以前编译产生的临时文件,再输入 make dsplink 编译dsplink组件模块

5. 程序开发

a) codec程序开发

       开发Ti程序最简单的方法,复制例程,然后在本例程基础上修改。以下以制作直方图统计为例,说明操作步骤如下:

i. 复制

复制dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/codecs/目录下的videnc_copy目录, 改变本目录的安全属性,使一般用户可读写。

ii. 改目录名和文件名

首先将复制的目录名改为videnc_histogram, 然后进入目录做如下更改
videnc_copy.c 改为 videnc_histogram.c
VIDENC_COPY.xdc 改为VIDENC_HISTOGRAM.xdc (注意大写)
VIDENC_COPY.xs 改为VIDENC_HISTOGRAM.xs (注意大写)
videnc_copy_ti.h 改为videnc_histogram_ti.h
videnc_copy_ti_priv.h 改为videnc_histogram_ti_priv.h

iii. 改文件内容

1. Makefile内容不变
2. package.bld: 打开package.bld, 查找替换文件中的copy 为 histogram
3. Package.mak 是自动生成的文件,不变。
4. Package.xdc: 打开Package. xdc, 改 copy为histogram, 改COPY为 HISTOGRAM
5. Package.xs: 打开Package.xs, 查找替换文件中的copy 为 histogram, 查找替换文件中的COPY 为 HISTOGRAM
6. Videnc_histogram.c: 打开videnc_histogram.c, 查找替换文件中的copy 为 histogram,查找替换文件中的COPY 为 HISTOGRAM
7. VIDENC_HISTOGRAM.xdc: 打开VIDENC_HISTOGRAM.xdc,查找替换文件中的COPY 为 HISTOGRAM
8. VIDENC_HISTOGRAM.xs不变
9. videnc_histogram_ti.h: 打开videnc_histogram_ti.h,查找替换文件中的COPY 为 HISTOGRAM
10. videnc_histogram_ti_priv.h: 打开videnc_histogram_ti_priv.h,查找替换文件中的COPY 为 HISTOGRAM

iv. 添加算法

打开Videnc_histogram.c 
想加算法的话,就用自己的算法替换第 333 行到 381 行的复制语句,不做替换是就是个简单的内存复制,我们暂不加自己的算法。
v. 编译
在命令窗口中进入本工程的根目录, 先调用make clean清过程文件,再调用用make 生成codec库, 这时在lib目录里可以生成videnc_histogram.a64P等库文件,如果没有生成这些文件,则说明之前中间哪一步做错了。

b) server程序开发

       开发Ti程序最简单的方法,复制例程,然后在本全程基础上修改。以下以制作直方图统计为例,说明操作步骤如下:

i. 复制

复制dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/servers/目录下的all_codecs目录, 改变本目录的安全属性,使一般用户可读写。

ii. 改目录名和文件名

首先将复制的目录名改为video_histogram, 然后进入目录做如下更改
改all.cfg 为video_histogram.cfg
            改all.tcf 为video_histogram.tcf

iii. 改文件内容

1. link.cmd: 不变
2. main.c: 查找替换文件中的all_codecs为 video_histogram
3. package.bld: 查找替换文件中的all_codecs为 video_histogram, 替换   serverName = "all" 为  serverName = "video_histogram"
4. package.mak: 不变
5. package.xdc: 查找替换文件中的all_codecs为 histogram
6. video_histogram.cfg: 查找替换文件中的all_codecs 为 videnc_histogram, 查找替换videnc_copy为videnc_histogram,查找替换文件中的VIDENC_COPY 为 VIDENC_HISTOGRAM

iv. 编译

在命令窗口中进入本工程的根目录, 先调用make clean清过程文件,再调用用make 生成server库, 这时在工程的bin/ti_platforms_evm3530目录下可以生成video_histogram.x64P库文件,如果没有生成这个文件,则说明之前中间哪一步做错了。

c) 应用程序开发

开发Ti程序最简单的方法,复制例程,然后在本全程基础上修改。以下以制作直方图统计为例,说明操作步骤如下:

i. 复制

复制dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/apps/目录下的video_copy目录, 改变本目录的安全属性,使一般用户可读写。

ii. 改目录名

首先将复制的目录名改为video_histogram, 然后进入目录做如下更改

iii. 改内容

1. remote.cfg : 查找替换文件中的video_copy为 video_histogram, 替换   all_codecs 为  video_histogram
2. local.cfg : 查找替换文件中的viddec_copy为 viddec_histogram, 替换   VIDDEC_COPY 为  VIDDEC_HISTOGRAM, 替换 video_copy为 video_histogram,
3. app.c
查找videnc_copy, 替换为videnc_histogram, 查找 video_copy, 替换为 video_histogram

iv. 编译

在命令窗口中进入本工程的根目录, 先调用dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/apps/video_histogram/make clean清过程文件,再调用用dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/apps/video_histogram/make 生成可执行程序, 这时在工程的/bin/ti_platforms_evm3530目录下可以生成app_remote.xv5T文件,如果没有生成这个文件,则说明之前中间哪一步做错了。

6. 利用nfs起动测试程序

i. 建立测试目录

虚拟机控制台下输入 mkdir -p ~/workdir/filesys/opt/dvsdk/xdm_test 建立测试目录

ii. 复制测试文件

a. 复制 cmem.ko, 虚拟机控制台下输入
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/linuxutils_2_24_02/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ~/workdir/filesys/opt/dvsdk/xdm_test/
b. 复制 dsplink.ko, 虚拟机控制台下输入 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/dsplink_1_61_03/packages/dsplink/gpp/export/BIN/Linux/OMAP3530/RELEASE/dsplinkk.ko ~/workdir/filesys/opt/dvsdk/xdm_test/
c. 复制 lpm_omap3530.ko, 虚拟机控制台下输入 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/local_power_manager_1_24/packages/ti/bios/power/modules/omap3530/lpm/lpm_omap3530.ko ~/workdir/filesys/opt/dvsdk/xdm_test/
d. 复制 sdmak.ko, 虚拟机控制台下输入 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/linuxutils_2_24_02/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ~/workdir/filesys/opt/dvsdk/xdm_test/
e. 复制loadmodules.sh, 模块加载/卸载脚本,虚拟机控制台下输入 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/codec_engine_2_24/examples/apps/system_files/OMAP3530/*.sh /home/realtimedsp/workdir/filesys/opt/dvsdk/xdm_test/ f. 修改loadmodules.sh,输入 
realtimedsp@realtimedsp-desktop:~$ gedit ~/workdir/filesys/opt/dvsdk/xdm_test/loadmodules.sh
将第58行内容改动如下
insmod cmemk.ko phys_start=0x84e00000 phys_end=0x86000000 pools=20x4096,10x131072,2x1048576,1x256000,8x829440,2x131072,10x4096
g. 复制arm应用程序 虚拟机输入 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/apps/video_histogram/bin/ti_platforms_evm3530/app_remote.xv5T ~/workdir/filesys/opt/dvsdk/xdm_test/ h. 复制arm应用程序 虚拟机输入 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/servers/video_histogram/bin/ti_platforms_evm3530/video_histogram.x64P ~/workdir/filesys/opt/dvsdk/xdm_test/ i. 复制测试用数据文件,虚拟机输入 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/omap3530/project/dvsdk_3_00_02_44/codec_engine_2_24/examples/ti/sdo/ce/examples/apps/video_histogram/in.dat /home/realtimedsp/workdir/filesys/opt/dvsdk/xdm_test/ j. 复制内核到tftpboot目录,没有则按照使用说明书编译一个 
realtimedsp@realtimedsp-desktop:~$ cp ~/workdir/lsp/arch/arm/boot/uImage ~/workdir/tftpboot

7. 在ICETEK-OMAP3530-EVM实验箱上测试和运行

i. 断除ICETEK-OMAP3530-EVM系统电源,关闭实验箱左上角电源总开关。
ii. 取出ICETEK-OMAP3530-EVM系统配件箱中的串口通信电缆;用此线连接ICETEK-OMAP3530-EVM板上J26插座和PC机COM1插座。
iii. 取出ICETEK-OMAP3530-EVM系统配件箱中的以太网电缆;用此线连接ICETEK-OMAP3530-EVM板上以太网插座J13和PC机网络插座。
iv. 取出ICETEK-OMAP3530-EVM系统配件箱中的电源连接电缆;用此电缆连接实验箱左侧电源插座和220V交流供电接线插座。
v. 用视频线连接视频前端的摄像头到ICETEK-OMAP3530-EVM板的J33,视频输入
vi. 用lcd排线连接lcd70到evm的U13,做视频输出
vii. Pc机起动超级终端【Davinci-超级终端】
viii. 插入起动用sd卡到 ICETEK-OMAP3530-EVM 的J16
ix. 开启实验箱总电源,开启ICETEK-OMAP3530-EVM板的电源开关。正常情况下ICETEK-OMAP3530-EVM板上电源指示灯D12将亮起。
x. 观察【Davinci-超级终端】中的显示,当出现计数时,按回车,进行如下操作:
could not establish link
Hit any key to stop autoboot:  0   输入回车以暂停起动
OMAP3_EVM # setenv bootargs 'initcall_debug console=ttyS2,115200n8 noinitrd rw ip=192.168.1.77:192.168.1.103:192.168.1.1:255.255.255.0::eth0:off eth=70:64:66:75:66:6c root=/dev/nfs nfsroot=192.168.1.103:/home/realtimedsp/workdir/filesys, rootdelay=15 mem=78M'                                    输入起动参数,配置为nfs起动
OMAP3_EVM #  tftp 0x80200000 uImage     从tftp下载起动内核
OMAP3_EVM #  boot                       起动


......


initcall ip_auto_config+0x0/0xe08 returned 0 after 1547694 usecs
initcall ip_auto_config+0x0/0xe08 returned 0 after 1547694 usecs
<6>Waiting 15sec before mounting root device...
Waiting 15sec before mounting root device... 为保证顺利nfs起动,重新插拨一下网线 


......


INIT: Entering runlevel: 5
Starting telnet daemon.
Starting syslogd/klogd: done
Starting thttpd.                             到这里说明nfs起动已经成功
i. 虚拟机下,起动控制台,输入如下
realtimedsp@realtimedsp-desktop:~$ telnet 192.168.1.77


Trying 192.168.1.77...
Connected to 192.168.1.77.
Escape character is '^]'.


 _____                    _____           _         _   
|  _  |___ ___ ___ ___   |  _  |___ ___  |_|___ ___| |_ 
|     |  _| .'| . | . |  |   __|  _| . | | | -_|  _|  _|
|__|__|_| |__,|_  |___|  |__|  |_| |___|_| |___|___|_|  
              |___|                    |___|            


Arago Project http://arago-project.org omap3evm


Arago 2009.09 omap3evm




omap3evm login: root                 以根用户权限登录ICETEK-DM355-EVM嵌入式操作系统
root@omap3evm:~# cd /opt/dvsdk/xdm_test     进入程序测试目录
root@omap3evm:~# ./loadmodules.sh       加载组件,辅助调用dsp用
root@omap3evm:~# ./app_remote.xv5T   起动算法调用程序
ii. 这时程序应该可以运行了,只不过我们的算法现在还没有加入进去,他只是实现了一个视频文件的复制功能,程序运行后会在本目录下生成一个与in.dat一样大小的文件 out.dat,只不过这个复制过程是在dsp端运行的,而文件的读写过程是在arm端进行的。
 关闭【Davinci-超级终端】窗口;
 关闭【终端】窗口;
 退出Ubuntu开发环境;
 关闭ICETEK-OMAP3530-EVM系统电源开关;
 卸除ICETEK-OMAP3530-EVM与PC机连接的串口电缆;
 卸除ICETEK-OMAP3530-EVM与PC机连接的以太网电缆。