2014年(42)
分类: 嵌入式
2014-12-04 15:32:29
在配置完(一)里面的信息之后,你是不是有种迫不及待的心情向在windows下编写一个程序。和windows不同的是在linux中不需要专门在装一个类似VC之类的应用软件了。在系统中已经有现成的了。
一、编写helloworld应用程序
Rainysky习惯,也是为了方便,在opt建立了几个文件夹,opt/zedboard/code,并且cd /opt/zedboard/code 里面将自己的代码放到里面,方便管理。
利用vim helloworld.c 编写文件,相信大家都比较熟悉吧,里面的内容如下:
图1
在linux下编译.c文件时采用gcc **.c –o *** ,使用./来执行程序,为了与之后的程序相区别,生成的可执行文件为helloworld_pc,代码以及运行结果如下
图2
二、交叉编译环境的建立
在PC机上运行了helloworld之后,肯定想在zedboard板卡上运行程序吧,rainysky也有这样一种期待,但pc的可执行程序不能直接在arm板卡上运行,原因可以大概解释如下吧:pc机上采用的是X86体系结构,而arm采用的就是arn结构的啦,两个可以执行的二进制代码不一样,所以可执行文件不能混着用了,要是使用还是有办法的,那就是交叉编译,交叉编译的目的就是在主机上生成目标机(zedboard)能执行的文件。啰嗦了这么多,是不是觉得很烦呢,也觉得交叉编译功能很强大,不好弄。其实zedboard已经将交叉编译的文件给我们了,只需要执行几个简单的指令就可以了。
在《嵌入式系统软硬件协同设计实战指南--基于Xilinx Zynq》这本书附带的光盘里,也将交叉编译的安装文件附在里面了,在目录Chapter 9\Src\9.3 Single Board Computer中,不知道你还记得在第一篇里设置了PC机和虚拟机的共享目录,这时候就可以显示出它方便的功能了,直接复制到目录(rainysky在/opt/zedboard/)下就行了,
图3
和执行上一小节的helloworld一样,用 ./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 安装文件,很坑爹的出现一个错误,如下:
图4
百度 google了一下,在终端里输入如下命令 dpkg-reconfigure dash,并且在弹出的对话框里选择 <否>,就可以啦(原因大概是:Ubuntu的 shell 默认安装的是 dash,而不是 bash,dash 比 bash 更轻,更快。但 bash 却更常用。如果一些命令、脚本等总不能正常执行,有可能是 dash 的原因。比如编译 Android 源代码的时候,如果使用 dash,则有可能编译出错,或者编译的系统不能启动。<网上粘贴的>),可以安装的时候,就一路默认下去吧,不过这个时候最好注意下文件安装到哪个地方了。
这个时候你就可以找到类似于gcc一样的交叉编译工具了,
图5
交叉工具是不是很多,但要是直接在终端里面输入arm-xilinx-linux-gnueabi-gcc会提示找不到。这个类似于windows,需要设置环境变量,在ubuntu中,环境变量的文件是 /etc/bash.bashrc,修改这个文件就行了(命令vim /etc/bash.bashrc),增加的内容是
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH
图6
此时保存文件,并且关闭终端,重新打开一个终端 输入arm-xilinx 按几下tab键是不是显示出来了可爱的交叉编译链。到此说明交叉编译链安装完成
图7
三、交叉编译helloworld
交叉编译链安装成功了,就可以交叉编译c文件了,进入到/opt/zedboard/code/文件夹下面,使用arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_zed,来生成在zed板卡上能执行的文件,并用file命令验证一下
图8
如上图可以看到helloworld_zed是在arm架构中运行的程序,helloworld_pc是在X86结构下可执行的。此后在板卡上运行下就OK啦。。。。。。。。。。