- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
交叉编译环境完全通.doc
交叉编译环境完全通
当我们开发嵌入式Linux软件时,一般都要经过交叉编译这一步。如果是开发PC机上的软件,我们只要用Linux本身提供的强大的编译器(如gcc)直接编译就可以了。而一般的嵌入式设备所用的CPU和PC机上的CPU有着不同的架构,这样就要求我们在PC机上编译出适用于嵌入式设备CPU架构的软件,这就是我们所说的交叉编译。下面我们用一个例子来详细说明交叉编译是如何工作的。
所用平台
Redhat 9.0
建立交叉编译环境
很显然,要交叉编译就得有一个特殊的“环境”作前提,这里的环境就是一个与PC机不同的一套库函数和编译器。用这样的库函数和编译器编译出来的应用程序就可以在嵌入式设备上跑了。Sitsang板提供的交叉编译工具链为:gnupro-bin-glibc2.2.4.tgz,xscale-arm-linux-toolchain.tgz:
cd / //回根目录
tar zxvf xscale-arm-linux-toolchain.tgz //解压,解压后文件在/usr/local/下面
echo “export PATH=/usr/local/arm-linux/bin:${PATH}” ~/.bashrc //设置环境变量
source ~/.bashrc
cd /usr //进入/usr文件夹,为了把glibc库安装在该目录下
tar zxvf /tmp/gnupro-bin-glibc2.2.4.tgz //解压
这样我们的交叉编译环境就建立好了,怎么样,是不是很简单。下面我们就来测试一个简单的例子。
/*Hello.c*/
#include stdio.h
main()
{
char *hello=”hello!\n”;
printf(“%s”,hello);
}
程序输好以后确认无误,保存。进入程序文件所在目录比如在/root/hello/下面:
cd /root/hello
arm-linux-gcc hello.c –o hello(-o 可以理解为“目标为生成”)
第一行改不用解释了吧,第二行中arm-linux-gcc是第一次出现,有人可能会问这个哪里来的,不妨打开刚才安装的交叉编译工具目录/usr/local/arm-linux/arm-linux/bin/可以发现里面有一个arm-linux-gcc文件,这个就是针对arm的CPU的gcc编译器了。以后用其它编译工具链式也可以通过这种方法看看其编译器是什么了。编译好了以后就可以下载到目标机进行测试了。当然也可以先在PC机上测试正误。用gcc hello.c –o hello就可以生成PC机上程序了,在运行./hello 就可以发现终端显示hello!字样。
提高篇
前面我们编译了一个小例子,当然这个例子只有一个hello!显示,没有任何其他的人机交互,所以当然也就不过瘾了。
开发嵌入式Linux的交互界面可以有许多开发环境。我们这里选用Qt/embedded作为界面开发平台。首先当然是编译Qt/embedded了。所用的软件包为:qt-embedded-2.3.2.tar.gz。不过我们的开发板带有一块触摸屏,为了让用Qr/embedded做出来的程序能够支持触摸屏,必须要把触摸屏的库进行同时编译,开发板提供的触摸屏库为tslib.tar,下面开始编译(设当前路径为/opt,两个软件包也放在这个路径下):
1.TSLIB
bzip2 -dc tslib.tar.bz2 | tar xv //解压,生成的文件夹名为tslib,具体bzip2的用法可以用man bzip2来查看
cd tslib //进入该文件夹
export CC=arm-linux-gcc
//用CC这个符号代替arm-linux-gcc,有了这一句后,我们前面编译时用arm-linux-gcc
就可以用CC来代替了
./autogen.sh --host=arm-linux
//这一句表示将编译适合arm架构cpu的库,其实打开autogen.sh这个文件,我们将发现这是一个批处理的shell文件其中—host=arm-linux是./configure的参数。其中内容如下:
#!/bin/sh
# $Id: autogen.sh,v 1.1.1.1 2001/12/22 21:12:06 rmk Exp $
libtoolize --force --copy
aclocal
autoheader
automake --add-missing --copy
autoconf
./configure $*
具体每条的含义是:
make //当然是编译啦,具体说是对前面
原创力文档


文档评论(0)