DSP+ARM多核异构开发环境搭建OMAPL138
注意: 环境为Ubuntu 12.04 只能是这个环境。我甚至在Ubuntu16.04上面安装了VMware,然后,在装了一个Ubuntu 12.04 x86版本。
导语与感想
OMAPL138属于多核异构平台(DSP+ARM),多核通信是多核异构平台的精髓部分,目前市面上流行的还有ZYNQ平台(FPGA+ARM),同样通信机理复杂。德州仪器OMAPL138和Davinci使用一样的多核通信机理。
这个机制相当复杂,又要懂Linux,又要会调试DSP,又要熟练掌握ARM的嵌入式Linux,又要抓住多核通信机制,实在让人抓狂。DSP端使用CCS,用JTAG口进行仿真,ARM端使用终端GDB命令进行动态调试配合调试输出完成多核通信的开发。
好吧,步入正题了,准备好以下的素材(不要被吓到)
一定要对于文件、编译器有个很好的管理,杜绝东一块西一块,左一个文件,又一个文件,否则到时候自己蒙了。本人习惯在自己用户的文件夹创建opt文件夹(用于安装非root权限运行的软件),script文件夹(用于处理一些脚本文件)、work(待交叉编译的源代码文件)、setup(安装、压缩包文件)、workspace(编程工程文件路径)、lib(第三方库文件夹)
搭建前准备素材
- CGT_组件:ti_cgt_c6000_7.3.0.tar.gz
- 多核通信组件:mcsdk_1_01_00_02_setuplinux.bin
- C6000的Starterware库:OMAPL138_StarterWare_1_10_04_01-Linux-x86-Install
- Qt图形界面库:qwt-6.1.0.tar.bz2
- DSP BIOS组件:bios_5_41_10_36.tar.gz
- dsplink组件:dsplink_linux_1_65_00_03.tar.gz
- Qt源文件:qt-everywhere-opensource-src-4.8.3.tar.gz
- DSP编译工具链:xdctools_3_22_01_21.tar.gz
- CCS的Linux版本:ccs 5.5 for Linux
- 内核源文件:linux-3.3.tar.bz2
- arm-linux交叉编译工具链:arm-2009q1-161-arm-none-eabi.bin
以上这些文件,全部存在~/setup文件下
环境前提
- Ubuntu版本为12.04,(不要尝试新版,OMAPL停更了,组件最新支持到ubuntu12.04)
- 配置好交叉编译环境
- Linux3.3内核编译正确
- Qte编译正确
- CCS的Linux版本安装好
编译Linux3.3内核
编译正确Qt
Qt版本使用的是Qt4,Qt5还没有实验,等着实验完Qt5会过来更新。
最后我之前设定的Qt make install的路径室/opt/qt-arm-4.8.3 (后面会用到)
编译QWT组件
qwt 全称是"Qt Widgets for Technical Applications",是一个基于 LGPL 版权协议的开源
项目,可生成各种统计图。QWT的编译需要基于上一章节编译QT,编译出的qmake编译器
解压qwt
准备qwt-6.1.0.tar.bz2文件,解压到~/work
路径下:tar -xvf qwt-6.1.0.tar.bz2 -C ~/work
配置QWT编译环境(使用创龙公司)
需要修改两个地方:
- 在"qwt-6.1.0/qwtconfig.pri"文件第 100 行 QwtOpenGL 和 119 行 QwtDesigner 前面增加。符号"#",表示注释掉此两行,因为此例程没有使用 QwtOpenGL 和 QwtDesigner。如下图所示:
- 修改 QWT_INSTALL_PREFIX 最后QWT输出路径。
在 qwt 目录下执行以下命令产生 Makefile 编译文件:/opt/qt-arm-4.8.3/bin/qmake
ls
如果有Makefile文件则表示配置成功。
编译QWT和安装
在 qwt 根目录下执行以下命令编译 qwt 组件源码:make -j4
启动4个线程编译
编译完成后:
在 qwt 根目录下执行以下命令安装 qwt 组件:sudo make install
该组件会解压到QWT_INSTALL_PREFIX指定的路径中:/opt/qwt-6.1.0
将库发送到开发板(HOST)端
将"/opt/qwt-6.1.0/lib"下的所有文件拷贝到开发板文件系统"/usr/lib"目录下,用SD卡也可以,用scp命令也可以。
安装CCS
安装过程请参考我发在贴吧上的教程:我这里用的是CCS5.5版本,大同小异 (在LINUX(ubuntu)系统下装CCSv6方法)[https://tieba.baidu.com/p/3698761357]
注意路径安装到 /opt/ti下
安装StarterWare库
执行:sudo ./OMAPL138_StarterWare_1_10_04_01-Linux-x86-Install
安装路径为: /opt/ti下
安装配置MCSDK
MCSDK是多核通信组件。
安装MCSDK
准备好mcsdk_1_01_00_02_setuplinux.bin,注意路径安装到/opt/ti下,完全安装就好。
sudo ./mcsdk_1_01_00_02_setuplinux.bin
配置MCSDK
进入"mcsdk_1_01_00_02"目录下,启动 MCSDK 设置脚本,根据不同主机设置,进行tftp、nfs、U-Boot 等配置。在设置之前,务必保证虚拟机网络畅通。
cd /opt/ti/mcsdk_1_01_00_02/
sudo ./setup.sh
- 问你NFS目标地址安装在哪里,直接回车
- 问你是否是root权限启动的配置,直接回车
- 创建EXEC_DIR等等环境变量,回车
- 问tftp路径直接回车
- 串口部分,我们用的室CH340所以是/dev/ttyUSB0
- 问ip,输入omapl138板子的ip地址
- 问你Linux Kernal位置,我的在SD卡
- 问你root file system的位置,我的在SD卡
- 问nfs文件系统启动方式启动方式,直接回车
- 启动tftp下载内核镜像,n
- installing linux devkit Y
- 最后看到TI SDK SETUP COMPLETED配置已经完成。
SYSLINK的配置和安装
cd /opt/ti/syslink_2_21_01_05
进入该路径下,打开配置文件:sudo vim products.mak
要改的内容在下面
DEVICE = OMAPL1XX
SDK = NONE
EXEC_DIR = /media/delvis/rootfs // host root文件系统路径 可以在SD卡上(需要挂载),也可以暂时存储到你电脑临时文件夹上,到时候拷贝到SD卡上
DEPOT = /opt/ti // MCSDK 安装路径
接下来配置的如图所示:
配置完成后保存退出。
编译syslink源代码
编译 syslink 之前,先将以下两个宏定义添加到 syslink 中的 Omapl1xxIpcInt.c、omapl1xx_phy_shmem.c、omapl1xxpwr.c 文件开头,否则编译会出错。
(1) /opt/ti/syslink_2_21_01_05/packages/ti/syslink/ipc/hlos/knl/notifyDrivers/arch/omapl1xx/Omapl1xxIpcInt.c
(2) /opt/ti/syslink_2_21_01_05/packages/ti/syslink/family/hlos/knl/omapl1xx/omapl1xxdsp/Linux/omapl1xx_phy_shmem.c
(3) /opt/ti/syslink_2_21_01_05/packages/ti/syslink/family/hlos/knl/omapl1xx/omapl1xxdsp/omapl1xxpwr.c
- Omapl1xxIpcInt.c 文件,修改在头处添加文件
#undef __ASM_ARCH_HARDWARE_H
#include <mach/hardware.h>
- omapl1xx_phy_shmem.c文件,修改在头文件处添加
#undef __ASM_ARCH_HARDWARE_H
#include <mach/hardware.h>
- omapl1xxpwr.c 文件,修改在头文件处添加
#undef __ASM_ARCH_HARDWARE_H
#include <mach/hardware.h>
编译syslink
cd /opt/ti/syslink_2_21_01_05
make syslink
编译syslink示例
make samples
安装syslink驱动程序
sudo make install
返回到在setup.sh配置syslink的时候指定的rootfs目录,ls lib/modules/3.3.0/kernel/drivers/dsp/
可以看到在文件系统"lib/modules/3.3.0/kernel/drivers/dsp/"目录下有 syslink 驱动程序syslink.ko 文件和文件系统根目录下有"ex**_##"的示例程序。
就配合环境成功了。
参考文献
[1]创龙公司,基于 OMAPL138 的多核软件开发组件 MCSDK 开发入门
[2]创龙公司,OMAPL138基于SYSLINK的双核例程