OMAPL138的多核软件开发组件MCSDK开发入门.docx
- 文档编号:26144031
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:51
- 大小:2.65MB
OMAPL138的多核软件开发组件MCSDK开发入门.docx
《OMAPL138的多核软件开发组件MCSDK开发入门.docx》由会员分享,可在线阅读,更多相关《OMAPL138的多核软件开发组件MCSDK开发入门.docx(51页珍藏版)》请在冰豆网上搜索。
OMAPL138的多核软件开发组件MCSDK开发入门
目录
1MCSDK介绍3
2MCSDK相关软件安装3
2.1在Ubuntu虚拟机中安装CCS4
2.2安装MCSDK9
3设置MCSDK开发环境参数12
4syslink配置、编译、安装18
4.1.配置syslink18
4.2.编译syslink源码21
4.3.编译syslink示例程序25
5syslink示例程序演示25
5.1.安装syslink驱动和示例程序到文件系统25
5.2.运行syslink示例程序27
5.2.1设置U-Boot参数27
5.2.2安装syslink驱动27
5.2.3运行syslink示例程序28
5.3.syslink示例程序解析29
5.3.1ex01_helloworld30
5.3.2ex02_messageq31
5.3.3ex03_notify34
5.3.4ex04_sharedregion37
5.3.5ex05_heapbufmp40
5.3.6ex06_listmp41
5.3.7ex07_gatemp44
5.3.8ex08_ringio47
5.3.9ex09_readwrite50
5.3.10ex33_umsg52
5.3.11ex34_radar53
1MCSDK介绍
德州仪器(TI)2013年11月推出基于低功耗OMAP-L138DSP+ARM9™处理器的多核软件开发组件——MCSDK(MulticoreSoftwareDevelopmentKits),帮助开发人员缩短开发时间,实现针对TITMS320C6000™高性能数字信号处理器(DSP)的扩展。
为工业、通信、电信以及医疗市场开发各种应用的客户现在无需转移其它软件平台,便可升级至高性能器件。
TIMCSDK提供高度优化的特定平台基础驱动器捆绑包,可实现基于TI器件的开发。
此外,MCSDK还可为实现便捷编程提供定义明确的应用编程接口,支持未来向更高性能的TI多核平台的移植,因此开发人员无需从头设计通用层。
MCSDK不仅可帮助开发人员评估特定器件开发平台的软硬件功能,而且还可帮助他们快速开发多核应用。
此外,它还有助于应用在统一平台上使用SYS/BIOS或Linux。
MCSDK的各内核通常还可指定运行Linux应用,作为控制平台,而其它内核则可同时分配高性能信号处理工作。
借助这种异构配置的高灵活性,软件开发人员可在TI多核处理器上实施全面解决方案。
在TIOMAP-L138应用实例中,内部ARM9处理器可分配嵌入式Linux等高级操作系统执行复杂的IO协议栈处理,而TMS320C647xDSP则可运行TIRTOS(上述SYS/BIOS)实时处理任务。
TIDSP业务经理RameshKumar指出:
“能为OMAP-L138处理器提供MCSDK我们深感振奋。
新老客户都将受益,包括在整个TIC6000™DSP中可使用相同的软件、支持编程高效率、加速产品上市进程以及更高的投资回报等。
”
MCSDK包含的库兼容于TIC647xDSP以及基于KeyStone™的DSP,其中包括C665x、C667x、66AK2Hx以及66AK2Ex处理器。
有了MCSDK,开发人员可获得各种优化型DSP库,包括数学库、数字信号处理库、影像视频处理库、电信库以及语音视频编解码器等,并可从中获益。
此外,TIOMAP-L138处理器还具有应用优化型特性与外设的独特组合,包括以太网、USB、SATA、视频端口接口(VPIF)以及uPP等。
2MCSDK相关软件安装
2.1在Ubuntu虚拟机中安装CCS
此处安装的是Linux下的CCS,版本号是:
CCS5.5.0。
在光盘资料tools目录下可以找到文件CCS5.5.0.00077_linux.tar.gz,将其拷贝到共享目录,解压到ti目录下,命令如下:
Host#mkdir-p/home/tl/ti
Host#cd/home/tl/ti
Host#tar-xvzf/mnt/hgfs/shareVM/CCS5.5.0.00077_linux.tar.gz-C./
图1
Host#cdCCS5.5.0.00077_linux/
图2
执行以下命令安装安装CCS:
Host#sudo./ccs_setup_5.5.0.00077.bin
图3
弹出以下界面,点击
,然后点击Next。
图4
弹出以下界面,路径选择:
/home/tl/ti,然后点击Next。
图5
弹出以下界面,选择“CompleteFeatureSet”,然后点击Next(安装过程中需要下载组件,请保证虚拟机网络畅通)。
图6
弹出以下界面,点击Next。
图7
弹出以下界面,点击Next。
图8
弹出以下界面,点击Next。
图9
弹出以下界面,说明CCS正在安装。
图10
安装完成后,点击finish退出。
2.2安装MCSDK
在光盘资料tools目录中找到mcsdk_1_01_00_02_setuplinux.bin安装文件,先将其复制到共享目录,然后执行如下命令:
Host#cp-a/mnt/hgfs/shareVM/mcsdk_1_01_00_02_setuplinux.bin/home/tl/ti/
Host#cd/home/tl/ti
Host#./mcsdk_1_01_00_02_setuplinux.bin
图11
弹出如下界面,点击Next。
图12
弹出如下界面,点击Next。
图13
安装路经选择默认,即/home/tl/ti,点击Next。
图14
弹出如下界面,点击Next。
图15
弹出如下界面,开始安装MCSDK。
图16
等待如下界面出现,点击Finish完成安装。
图17
3设置MCSDK开发环境参数
进入mcsdk_1_01_00_02目录下,启动MCSDK设置脚本,根据不同主机设置,进行tftp、nfs、U-Boot等配置。
在设置之前,务必保证虚拟机网络畅通。
Host#cd/home/tl/ti/mcsdk_1_01_00_02/
Host#sudo./setup.sh
图18
图19
按Enter将MCSDK的文件系统安装到默认路经,出现如下界面:
图20
按Enter,出现如下界面:
图21
按Enter将MCSDK的Linux内核镜像安装到默认路径,出现如下界面:
图22
按Enter设置可以进行nfs访问,出现如下界面:
图23
按Enter设置tftp服务器下载目录为默认路径(/tftpboot),出现如下界面:
图24
按Enter,出现如下界面:
图25
按Enter设置串口为默认设置,出现如下界面:
图26
按Enter设置U-Bootnfs网络变量,出现如下界面:
图27
按Enter变量中设置为默认的tftp启动方式,出现如下界面:
图28
按Enter设置为默认的nfs文件系统启动方式,出现如下界面:
图29
按Enter设置启动时tftp下载的为默认内核镜像,出现如下界面:
图30
输入:
n,按Enter,出现如下界面:
图31
输入:
Y,按Enter,现如下界面:
图32
最后看到“TISDKsetupcompleted!
”,说明设置已经完成。
备注:
由于之后不使用MCSDK的U-Boot、内核、文件系统,因此以上部分相关设置可以忽视。
4syslink配置、编译、安装
安装MCSDK时,会将自动将syslink安装在相同的目录下,下文将介绍Syslink配置、编译和示例演示。
在开始syslink编译之前,请确保以下几点:
(1)已安装arm-none-linux-gnueabi-gcc-4.3.3交叉编译工具链。
(2)内核源码正确编译。
(3)文件系统正确解压在Ubuntu虚拟机。
配置syslink
进入/home/tl/ti/syslink_2_21_01_05,打开配置文件products.mak。
Host#cd/home/tl/ti/syslink_2_21_01_05
Host#geditproducts.mak
图33
修改如下地方:
备注:
由于配置容易出错,已将配置文件product.mak放在光盘shell目录下,可以将此文件覆盖/home/tl/ti/syslink_2_21_01_05/products.mak,然后再根据个人的实际情况小修改即可。
(1)DEVICE=_your_device_
改为DEVICE=OMAPL1XX//表示编译OMAPL138
图34
(2)SDK=_your_sdk_
改为SDK=NONE//SDK类型为NONE
图35
(3)EXEC_DIR=_your_filesys_
改为EXEC_DIR=/home/tl/omapl138/demo-rootfs//syslink驱动和演示程序安装路劲,一般设置为nfs或者SD卡的文件系统
图36
(4)DEPOT=_your_depot_folder_
改为DEPOT=/home/tl/ti//MCSDK的安装路径
图37
(5)
########ForOMAPL1XXdevice########
elseifeq("$(DEVICE)","OMAPL1XX")
LINUXKERNEL=$(DEPOT)/_your_linux_kernel_install_
CGT_ARM_INSTALL_DIR=$(DEPOT)/_your_arm_code_gen_install_
CGT_ARM_PREFIX=$(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
IPC_INSTALL_DIR=$(DEPOT)/_your_ipc_install_
BIOS_INSTALL_DIR=$(DEPOT)/_your_bios_install_
XDC_INSTALL_DIR=$(DEPOT)/_your_xdctools_install_
#IfLOADER=ELFthenbelowelftoolspathisrequiredelsesetC674path
ifeq("$(LOADER)","ELF")
CGT_C674_ELF_INSTALL_DIR=$(DEPOT)/_your_c674elf_code_gen_install_
else
CGT_C674_INSTALL_DIR=$(DEPOT)/_your_c674_code_gen_install_
endif
改为
########ForOMAPL1XXdevice########
elseifeq("$(DEVICE)","OMAPL1XX")
LINUXKERNEL=/home/tl/omapl138/linux-3.3//内核源码路径
CGT_ARM_INSTALL_DIR=/home/tl/arm-2009q1//交叉编译工具链安装路径
CGT_ARM_PREFIX=$(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
IPC_INSTALL_DIR=$(DEPOT)/ipc_1_25_03_15//ipc安装路径
BIOS_INSTALL_DIR=$(DEPOT)/bios_6_35_04_50//bios安装路径
XDC_INSTALL_DIR=$(DEPOT)/xdctools_3_25_03_72//xdc安装路径
#IfLOADER=ELFthenbelowelftoolspathisrequiredelsesetC674path
ifeq("$(LOADER)","ELF")
CGT_C674_ELF_INSTALL_DIR=$(DEPOT)/ccsv5/tools/compiler/c6000_7.4.4//dsp编译器路径
else
CGT_C674_INSTALL_DIR=$(DEPOT)/_your_c674_code_gen_install_
endif
图38
配置完成后,保存退出。
编译syslink源码
编译syslink之前,先将以下两个宏定义添加到syslink中的Omapl1xxIpcInt.c、omapl1xx_phy_shmem.c、omapl1xxpwr.c文件开头,否则编译会出错。
#undef__ASM_ARCH_HARDWARE_H
#include
以上三个文件的路径是:
(1)/home/tl/ti/syslink_2_21_01_05/packages/ti/syslink/ipc/hlos/knl/notifyDrivers/arch/omapl1xx/Omapl1xxIpcInt.c
(2)/home/tl/ti/syslink_2_21_01_05/packages/ti/syslink/family/hlos/knl/omapl1xx/omapl1xxdsp/Linux/omapl1xx_phy_shmem.c
(3)/home/tl/ti/syslink_2_21_01_05/packages/ti/syslink/family/hlos/knl/omapl1xx/omapl1xxdsp/omapl1xxpwr.c
Ø修改Omapl1xxIpcInt.c
执行以下命令修改:
Host#cd/home/tl/ti/syslink_2_21_01_05/packages/ti/syslink
Host#geditipc/hlos/knl/notifyDrivers/arch/omapl1xx/Omapl1xxIpcInt.c
图39
图40
添加内容后,保存退出。
Ø修改omapl1xx_phy_shmem.c
在当前路径下,执行以下命令:
Host#geditfamily/hlos/knl/omapl1xx/omapl1xxdsp/Linux/omapl1xx_phy_shmem.c
图41
图42
添加内容后,保存退出。
Ø修改omapl1xxpwr.c
在当前路径下,执行以下命令:
Host#geditfamily/hlos/knl/omapl1xx/omapl1xxdsp/omapl1xxpwr.c
图43
图44
添加内容后,保存退出。
接下来开始编译syslink,执行以下命令:
Host#cd/home/tl/ti/syslink_2_21_01_05
Host#makesyslink
图45
编译成功如下图所示:
图46
编译syslink示例程序
在当前目录,执行以下命令:
Host#makesamples
图47
编译成功如下图所示:
图48
至此,整个syslink已经编译完成。
5syslink示例程序演示
5.1.安装syslink驱动和示例程序到文件系统
在当前目录,执行以下命令将syslink驱动和示例程序安装到文件系统:
Host#sudomakeinstall
图49
安装成功如下图所示:
图50
执行以下命令查看是否已经安装了syslink驱动和示例程序。
Host#cd/home/tl/omapl138/demo-rootfs/
Host#ls
Host#lslib/modules/3.3.0/kernel/drivers/dsp/
图51
可以看到在文件系统lib/modules/3.3.0/kernel/drivers/dsp/目录下有syslink驱动程序syslink.ko文件和文件系统根目录下有“ex**_##”的示例程序。
5.2.运行syslink示例程序
可以通过sd卡或者nfs的方式启动此文件系统。
下面以SD卡启动方式为例讲解syslink示例程序的运行方法。
5.2.1设置U-Boot参数
将以上文件系统拷贝到SD启动卡的EXT3格式root分区,然后将SD启动卡插到开发板上,拨码开关打到SD卡启动方式,上电启动后在U-Boot命令行执行以下命令:
Target#setenvbootargsconsole=ttyS2,115200n8root=/dev/mmcblk0p2rwrootfstype=ext3mem=32M@0xc0000000mem=64M@0xc4000000
Target#saveenv
Target#boot
备注:
通过nfs方式只需要修改参数mem=128M为mem=32M@0xc0000000mem=64M@0xc4000000。
5.2.2安装syslink驱动
进入开发板后,执行以下命令安装syslink驱动:
Target#insmod/lib/modules/3.3.0/kernel/drivers/dsp/syslink.koTRACE=1TRACEFAILURE=1
图52
5.2.3运行syslink示例程序
Target#cd/
Target#./runall.sh
成功运行如下图所示:
图53
图54
5.3.syslink示例程序解析
每个示例目录中有readme.txt和run.sh文件说明如何使用示例,而在开发板中运行/runall.sh是运行了所有的syslink示例程。
备注:
以下内容摘录于
Slaveloader
在OMAPL138的ARMLinux操作系统中,syslink提供了“slaveloader”组件去加载、启动、停止DSP处理器,实现了对DSP核的管理,同时也是使用“slaveloader”组件去运行syslink示例程序。
运行“slaveloader”组件有四个参数:
参数1:
startup|shutdown|all|powerup|load|start|stop|unload|powerdown|list
参数2:
Corename//远程处理器名称,一般是DSP
参数3:
Filepath//可执行文件路径,当参数2为startup/load/all/时必填
参数4:
map-file//map文件,当远程处理器MMU功能开启时必填
运行命令格式如下图所示:
图55
可以通过各个syslink示例目录下的run.sh脚本查看使用slaveloader运行示例程序的具体方法。
下图是各个示例的功能简介:
图56
备注:
在单独运行各个示例程序前,务必先安装syslink驱动,安装命令:
Target#insmod/lib/modules/3.3.0/kernel/drivers/dsp/syslink.koTRACE=1TRACEFAILURE=1
下面将针对每个示例进行解析。
5.3.1ex01_helloworld
示例名字:
helloworld
功能说明:
GPP(ARM)端注册一个来自DSP端的简单一次性通知事件。
参考英文资料:
图57
运行命令:
Target#cd/ex01_helloworld/debug
Target#ls
Target#./run.sh
成功运行提示如下图:
图58
5.3.2ex02_messageq
示例名字:
MessageQ
功能说明:
基于队列的消息传递,负责GPP与DSP端的可变长度的短消息交互。
图59
参考英文资料:
图60
运行命令:
Target#cd/ex02_messageq/debug/
Target#ls
Target#./run.sh
成功运行提示如下图:
图61
图62
特点:
(1)实现了处理期间变长消息的传递;
(2)消息的传递都是通过操作消息队列来实现的;
(3)每个消息队列可以有多个写者,但只能有一个读者;每个任务(task)可以对多个消息队列进行读写;
(4)一个宿主在准备接收消息时,必须先创建消息队列,而在发送消息前,需要打开预定的接收消息队列;
常用在以下场景中:
(1)在消息传递中有多个写者,但仅有一个读者;
(2)所需要传递的消息超过32bit,且长度可变;读写者的缓冲区大小相同;
(3)处理期间需要频繁传递消息,在这种情况下,消息被依次放入队列,能保证不会丢消息;
(4)消息队列为空时,调用MessageQ_get()获取消息时会被阻塞,直到消息队列被写入消息;
(5)支持处理器间移动消息队列,在这种情况下,调用MessageQ_open()来定位队列位置,而消息传递部分代码不需要改动;
提供的API接口:
(1)消息队列初始化:
MessageQ_Params_init()
(2)消息队列创建/销毁:
MessageQ_create()/MessageQ_delete(),create创建消息队列,并分配相应存储空间
(3)消息队列打开/关闭:
MessageQ_open()/MessageQ_close(),open时会返回远程处理器上的QueID的地址
(4)为消息队列分配堆内存:
MessageQ_alloc()/MessageQ_free()
(5)为消息队列注册/注销堆内存:
MessageQ_registerHeap()/MessageQ_unregisterHeap()
(6)向消息队列中放入/获取消息:
MessageQ_put()/MessageQ_get()
(7)获取消息队列ID:
MessageQ_getQueueId()
(8)获取消息队列中消息数:
MessageQ_count()
(9)在消息队列中嵌入消息:
MessageQ_setReplyQueue()
(10)为消息队列解阻塞:
MessageQ_unblock()
(11)为调试消息队列加入Trace:
MessageQ_setMsgTrace()
5.3.3ex03_notify
示例名字:
Notify
功能说明:
将硬件中断抽象成多组逻辑事件,是一种简单快捷的发送低于32bit信息的通信方式。
参考英文资料:
图63
运行命令:
Target#cd/ex03_notify/debug/
Target#ls
Target#./run.sh
成功运行提示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OMAPL138 多核 软件 开发 组件 MCSDK 入门