=====DEY应用程序开发(旧版)===== 本章节已经过时,适用于早期的DEY版本(DEY1.6.9 DEY2.0)。CC6UL和CC6/6+用户可以阅读[[digi:arm-embedded:linux:dey:dey_app_development|最新版本]]。 Digi Embedded Yocto应用程序开发包括利用到DEY的工具链来在开发电脑上编译能运行在Digi硬件平台的程序,以及将应用程序和客制化的脚本整合到文件系统镜像中。Digi提供能配合开发板使用的预编译好的C/C++交叉编译工具链。您可以直接使用该工具链配合Makefile来编译程序。 **1.下载并安装预编译工具链** 请在Linux电脑中,从Digi FTP官网下载并安装对应平台的工具链,这里以cc6ulsbc为例 # wget ftp://ftp1.digi.com/support/digiembeddedyocto/2.0/r5/sdk/40003031_A/ccimx6ulsbc/x11/dey-glibc-x86_64-dey-image-qt-x11-cortexa7hf-vfp-neon-toolchain-2.0-r5.sh # chmod +x dey-glibc-x86_64-core-image-base-cortexa7hf-vfp-neon-toolchain-2.0-r5.sh # ./dey-glibc-x86_64-core-image-base-cortexa7hf-vfp-neon-toolchain-2.0-r5.sh **2.使用Makefile和工具链编译C/C++程序** 在源码和Makefile所在目录先设置编译环境 # source /opt/dey/2.0-r5/environment-setup-cortexa7hf-vfp-neon-dey-linux-gnueabi 编译源码 # make 根据您的需求,您还可以选择基于Eclipse或QT Creator等IDE来开发图形界面应用程序 ====基于Eclipse进行DEY应用程序开发==== 您需要在Linux桌面环境来开发可运行于DEY的应用程序。一般来说,应用程序开发有两个阶段: * 开发和调试您的应用程序 * 在DEY中编译并集成到文件系统中 您可以使用Digi核心板的预编译镜像来运行和调试Yocto应用程序,但如果要在最终定制的DEY文件系统中包含有应用程序,您最后需要在DEY内核和文件系统开发环境中使用Yocto的Recipes来编译指定的应用程序。 ===在电脑上安装配置Eclipse开发环境=== 首先,您的电脑需要安装有一些必要的软件包和库,这一般在安装DEY内核和文件系统开发环境时就已经安装好,如果您不确定,可以再安装一下试试: sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm make xsltproc docbook-utils fop dblatex xmlto autoconf automake libtool libglib2.0-dev libarchive-dev python-git Yocto项目支持使用Luna和Kepler这两个Eclipse版本来进行应用程序开发。首次安装使用,推荐的Eclipse版本是Luna SR2 (4.4.2),如果您已经安装有Kepler 4.3.2,也可以不用升级,直接配置它来配合Yocto项目使用。 Eclipse Luna SR2官方下载地址:http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/lunasr2 ,请选择下载Linux 64bit的版本。\\ Yocto插件需要JDK支持,请到Oracle网站下载7u79版本的Linux X64用的JDK压缩包: http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz \\ 另外,还需要从Digi官方下载交叉开发工具链,请从ftp://ftp1.digi.com/support/digiembeddedyocto/下载合适的版本。 **安装Eclipse** Eclipse解压就可以,我们可以把Eclipse解压到/usr/local/eclipse中,不过需要设置一下JDK #sudo -H byobu #tar -zxvf eclipse-cpp-luna-SR2-linux-gtk-x86_64.tar.gz -C /usr/local #tar -zxvf jdk-7u79-linux-x64.tar.gz -C /usr/local/eclipse 上面两个解压命令把jdk1.7.0_79放到了ecipse目录下,我们还需要在普通用户权限下可执行 #chown -R robin:robin /uar/local/eclipse 这里robin换成您的用户名和用户组 #exit 退出root,回到普通用户 #nano ~/.bashrc 添加JDK位置信息到.bashrc export JAVA_HOME=/usr/local/eclipse/jdk1.7.0_79 export PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH 保存后,在/usr/bin中创建一个eclipse.sh的启动脚本 #sudo nano /usr/bin/eclipse.sh 它只有一行 UBUNTU_MENUPROXY=0 /usr/local/eclipse/eclipse 我们需要让普通用户有执行权限 sudo chmod +x /usr/bin/eclipse.sh sudo chown robin:robin /usr/bin/eclipse.sh 重新启动,如果不重启,也可以重新加载一下用户环境变量设置 #source ~/.bashrc 就可以了 **配置Eclipse** 在安装好Eclipse之后,准备安装Eclipse的Yocto插件之前,需先配置好Eclipse. * 从Help下拉菜单中,选择“Install New Software” * 从“work with”菜单中选择对应Eclipse版本的源,比如Luna-"http://download.eclipse.org/releases/luna" * 在“Linux Tools”类别中,选择下面选项(如果这些选项没出现,表明已经安装过了) \\ Linux Tools LTTng Tracer Control \\ Linux Tools LTTng Userspace Analysis \\ * 在“Mobile and Device Development”类别中,选择:\\ C/C++ Remote (over TCF/TE) Remote Launch (Requires RSE Remote System Explorer) \\ Remote System Explorer End-User Runtime \\ Remote System Explorer User Actions \\ Target Management Terminal (Core SDK) \\ TCF Remote System Explorer add-in \\ TCF Target Explorer \\ * 最后在“Programming Languages”类别中,选择: \\ C/C++ Autotools Support \\ C/C++ Development Tools \\ 完成安装配置后,退出并重新启动Eclipse。 **安装Eclipse Yocto插件** 您可以下载安装预编译的Yocto插件或是自行编译安装。一般采用第一种方法,从Yocto项目组的Eclipse更新站点下载安装。 * 从Help下拉菜单中,选择“Install New Software” * 在“work with”上,输入http://downloads.yoctoproject.org/releases/eclipse-plugin/XXX/luna,其中XXX是当前最新版本2.1.0,点击“Add...”添加Yocto Eclipse源 * 选择刚添加的Yocto Eclipse更新源,并选中下面这些安装选项 Yocto Project ADT Plug-in Yocto Project Bitbake Commander Plug-in Yocto Project Documentation plug-in * 完成Yocto插件安装 **安装RXTX插件** 如果您想使用Eclipse中集成的Terminal终端,还需要安装RXTX插件。 \\ 同样地, 从Help下拉菜单中,选择"Install New Software" ,在Work with中输入http://rxtx.qbang.org/eclipse,安装最新版的RXTX库 **配置Eclipse的Yocto插件** 本节内容包括设置交叉编译器和目标板选项等,它会成为所有项目的默认设置。您也可以在后面具体项目配置时更改相关设置。 从菜单Window>Preferences中,点击“Yocto Project ADT”打开Yocto插件配置界面。 * 配置使用独立安装的工具链作为默认的交叉编译器选项 包括设置工具链类型,路径,sysroot位置和目标架构和选项等。 \\ 工具链选项有两类,一种是使用独立安装的预编译的工具链,即从Digi官网下载安装这种方式,路径就是安装路径,要使用独立安装的预编译工具链,请到Digi服务器ftp://ftp1.digi.com/support/digiembeddedyocto/下载相关版本的SDK,然后运行安装。 chmod +x dey-glibc-x86_64-dey-image-xxx-toolchain-xxx.sh ./dey-glibc-x86_64-dey-image-xxx-toolchain-xxx.sh 我们可以按默认把工具链安装在/opt/dey/xxx下,也可以创建个/usr/local/deyxx_xx/sdk/yyy/ 目录,这里xx_xx为版本号和类型(x11或framebuffer),yyy为硬件平台,这样有多个不现硬件平台时,我们可以把工具链按平台类型安装在对应版本安装目录中。 另一种类型是使用在项目中编译出来的交叉工具链,它作为编译输出的一部分,对应的路径在编译输出Build目录。 \\ 在Eclipse的Yocto插件配置界面上,我们可以设置交叉编译器的默认选项,如果您按默认的安装方式把工具链安装在/opt/dey/2.0-r2上,那么对应的设置是 {{digi:arm-embedded:linux:dey:standalone-toolchain-dey-eclipse.png?600|}} sysroot是目标板根文件系统所在位置,在安装生成的sysroots下有两种,我们需要指定arm架构的根文件系统对应的目录。目标架构是指对应的硬件平台,从“Target Architecture”下拉菜单中选择“cortexa9hf-vfp-neon-dey-linux-gnueabi”即可。在目标选项中,我们一般选择“external HW”来在我们的硬件平台上运行镜像。 **配置使用内核和文件系统项目编译的工具链** 我们也可以使用项目bitbake出来的工具链来编译应用程序,只需在把独立安装配置中的地址改为我们项目中对应的编译出来的路径即可。 交叉工具链选项: {{digi:arm-embedded:linux:dey:dey-sys-derived-toolchains.png?600| }} {{digi:arm-embedded:linux:dey:eclipse-sys-derived-toolchains.png?600| }} 我们还需要在bitbake出工具链,在DEY项目中 bitbake meta-ide-support 如果我们需要在其它电脑上安装,就要生成SDK,在镜像名后面加"-c populate_sdk",比如在 DEY1.6.9中是 bitbake dey-image-minimal -c populate_sdk bitbake dey-image-graphical -c populate_sdk 另外,如果需要镜像能支持远程调试,镜像的文件系统需要跑一个tcf-agent进程,这可以在local.conf中添加下面Feature来实现 EXTRA_IMAGE_FEATURES = "tools-debug eclipse-debug" ===编译和测试DEY例程=== * 创建项目 要创建基于Yocto模板的项目,请按下面步骤:\\ 1. File->New->Project,在C/C++下选择“C Project” \\ 2. 在“Yocto Project ADT Autotools Project”下选择“Hello World ANSI C Autotools Project” \\ 3. 输入项目名称等相关项目信息 \\ 4. 点下一步,输入作者和版权信息等,按Finish生成项目。 \\ * 配置指定项目交叉工具链 当您电脑上安装有不同的工具链时,有时您需要更改特定项目的工具链设置。您可以用特定的配置来覆盖默认的交叉工具链选项,从指定项目右键菜单中选择Properties或是从Project>Change Yocto Project Settings勾选"Use projects specific settings来配置项目指定的工具链。更改配置后,从右键菜单中选择Reconfigure Project,以便重新运行项目初始化脚本,让变动生效。 * 编译DEY例程 DEY的各个例程作为meta-digi层的一部分,它的源码在github (https://github.com/digi-embedded/meta-digi/tree/jethro/meta-digi-dey/recipes-digi/dey-examples/files) 配置项目编译DEY例程,按以下步骤执行: 1. 创建一个基于"Hello World ANSI C Autotools Project"的项目 2. 拷贝例程源码到src下文件 3. 编译项目,如果编译成功,会在src目录下生成可执行文件。编译项目前,请参考下面DEY例程的一些特殊配置。 DEY例程的一些特殊配置 为了使编译顺利通过,一些例程需要配置特定的链接器标志来解决依赖性问题,或是makefile文件的小小修改。 要添加一个链接器标志,打开项目的properties,并在Autotools>Configure Setting下,通过改变"configure命令和autogen的选项,在"- sysroot=/YYY"声明前添加"-lXXXX",其中XXXX要链接的库名称。 dey-examples-bt 这个例程需要"-lbluetooth" 链接器标志,否则会给出str2ba和ba2str函数会未定义错误。 dey-examples-btconfig dey-examples-gpio-sysfs 这个例程需要改变Makefile.am文件中的"PROJECTNAME_SOURCES"变量来匹配三个gpio文件 \\ gpio_sysfs_test_SOURCES = gpio_sysfs_test.c sysfsgpio.c sysfsgpio.h dey-examples-alsa 这个例程需要"-lasound"链接器标志来解析Alsa相关的函数 dey-examples-can 这个例程需要"-lpthread"链接器标志来解析pthread参考。 dey-examples-v4l2 这个例程使用"linux/mxcfb.h"头文件,这不是一个普通的头文件,要编译该例程您需要手动添加指定的头文件。此外,还需要更改Makefile.am中的"PROJECTNAME_SOURCES"变量来匹配文件所需。这个例程有两个主要的用法 ,一个在v4l2_preview_test.c",另一个在"v4l2_still.c",您需要更改"PROJECTNAME_SOURCES"变量来包含上述两个当中您所要需的用法和 "v4l2_common.c","v4l2_defs.h"文件。 {{:digi:headsup.png?20|}} 当编译"Yocto Project ADT Autotools"项目时,有时Eclipse会显示错误提示Functions/Symbols/Types无法解析,即使是相关的头文件已经包含在项目中。这种情况建议添加一个新的链接文件夹到sysroot中,File>New>Folder>,在New Folder对话框中,选择"Link to alternate location(linked folder)",然后浏览选中sysroot中include文件夹,比如在sysroots下的cortexa9hf-vfp-neon-dey-linux-gnueabi/usr/include目录。 * 运行例程 编译生成例程后,我们可以配置一个远程session来从开发主机发起到目标板去运行例程,用ifconfig获取目标板的ip地址,然后在Run>Run Configurations对话框中,展开C/C++ Remote application,可以看到一个远程运行的启动器hello_world_gdb_arm-dey-linuxgnueabi已经创建好了,如果没有,从"C/C++ remote application with a TCF (Target Communication Framework)"创建一个。创建一个基于目标板IP的新连接,确保Remote Absolute File Path for C/C++ Application中填入例程所要复制到的目标板上的地址。运行程序时,当有弹出窗口,输入用户名和密码root/root,在Console窗口中可以看到程序的执行输出结果。 * 调试例程 在Run>Debug Configurations对话框中,展开C/C++ Remote application,可以看到一个远程调试的启动器已经创建好了,检查Debugger,GDB debugger是否正确指向配置好的Yocto工具链。按下Debug按钮,就可以调出调试界面的窗口。 ===开发GTK图形应用程序=== 在创建项目时,我们可以在“Yocto Project ADT Autotools Project”下选择“Hello World GTK C Autotools Project”,来开发基于GTK的图形化应用程序。 工具链等设置和一般的嵌入式Linux程序类似,大多已经默认设置好了,不过在Run Configurations中,“Commands to execute before application”要填入export DISPLAY:=0 ====基于QT的应用程序开发==== 首先,要安装QT,然后在Eclipse中安装QT插件或是安装QT Creator作为IDE。 **Eclipse QT开启QT支持 从Help下拉菜单中,选择“Install New Software” 从“work with”菜单中选择对应Eclipse版本的源,比如Luna-“http://download.eclipse.org/releases/luna” 在“Programming Languages”类别中,选择: “C/C++ Qt Support”,然后安装。 待续,请先参考官网的英文教程……