打印

交叉编译环境搭建

[复制链接]
4649|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sqcumt123|  楼主 | 2011-10-16 22:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
好久没有做关于嵌入式的学习了,以前的照抄照搬,需要进一步的学习。从现在开始作一些嵌入式的学习,从最底层的学习,从交叉编译环境搭建开始。**把自己学习的东西记录下来。
我的系统是Fedora14,比较好的系统,内核版本在2.6.35.搭建的环境主要是支持EABI的交叉编译环境。EABI要求内核也要支持EABI,这在后期的内核编译中有体现。
编译的软件包是从:http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite下载,是一个比较优秀的交叉编译环境,现在支持在windows下直接作嵌入式linux的开发。但是我主要还是在Linux环境下学习。
不多说了,开始吧。我之前的学习板是TQ2440,跟着官方提供的资料基本过了一遍,发现自己需要学习的东西太多了。但是做了一次发现存在很多疑惑。
现在我下载的版本是:arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
是最新版本的。存放的路劲是
/home/gong/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
有图形化安装的,但是图形安装隐藏了很多问题,因此我建议命令行安装,毕竟是linux,不敲代码没有技术含量。该环境的搭建不一定要求root用户,一般的用户也可以安装。但是有时候还是需要root用户的权限。
第一步:解压缩,我想将交叉编译环境安装在/opt/arm/下面
首先创建该文件夹:>mkdir
/opt/arm
解压缩:>tar
-jxvf
/home/gong/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
-C /opt/arm
然后进入刚才解压缩的文件夹:cd
/opt/arm
查看解压缩后的文件内容:>ls
-a
可以发现存在一个文件夹:>arm-2011.03
进入文件夹:>cd
arm-2011.03
查看内容:>ls
-a
.
.. arm-none-linux-gnueabi bin lib libexec share
第二步:环境的搭建
1、参看手册,官方提供了大量的手册,可以从官网上面下载。至少知道下面操作的所以然。也就是56十页左右吧,英文的,这个是必须的。搞开发不懂英文搞个屁。
2、根据上面的分析可知。交叉环境支持的CPU类型存在三种,每一种的指令不一样。应该是在关于库的配置中提出了该问题。
进入软件包的/bin目录下:>cd
bin
该 编 译 器 支 持 三
种 版 本 的 cpu ,
别 是 armv4t armv5t
armv7t。 认
支 持 的 是 armv5t
cpu。由于TQ2440是三星的S3C2440,是armv4t类型的CPU。但是环境默认的是armv5t
。根据手册可在在 编 译 的 时 候 需 要 设 置 相
应 的 参 数 。对 应的命令是 :
arm-none-linux-gnueabi-gcc -march=armv4t $* filename
如果你能记住这些命令,你只需要配置一下路劲,重启电脑,就可以执行。
但是在实际中记住这些命令很麻烦,通常简化命令,实质是创建一系列的执行文本文件。为一些麻烦的指令创建一些别名。
在这里面最主要的三个文件是于CPU密切相关的,分别是:
arm-none-linux-gnueabi-g++
arm-none-linux-gnueabi-gcc
arm-none-linux-gnueabi-gcc-4.5.2
因此必须采用上面的命令即:
arm-none-linux-gnueabi-gcc
-march=armv4t $* filename
arm-none-linux-gnueabi-g++
-march=armv4t $* filename
arm-none-linux-gnueabi-gcc-4.5.2
-march=armv4t $* filename
可以通过如下的方式创建别名:
vi
arm-linux-xxx
xxxgccgcc-4.5.2g++
#第一句是bash
shell
编程必须要求的
!#/bin/sh
exec
arm-none-linux-gnueabi-xxx -march=armv4t $*
比如:exec
arm-none-linux-gnueabi-gcc-march=armv4t $*
其中exec是不能缺少的。
保存
改变执行的属性:chmod
777 arm-linux-xxx

其他的文件都是与CPU无关的,因此可以直接采用创建链接的方式:
ln
-s arm-none-linux-gnueabi-xxx arm-linux-xxx
如:ln
-s arm-none-linux-gnueabi-ld arm-linux-ld
对所以的都执行这些操作,就完成了指令的简化操作。

最后一步是配置路劲:
基本方法存在三种:
1、直接export
PATH=$PATH:/opt/arm/arm-2011.03/bin
但是这个只能修改当前bash下面的路劲,关闭当前的bash就失效,因此不实用。通常只是检测是否安装成功时,采用该方法检测:
>export
PATH=$PATH:/opt/arm/arm-2011.03/bin
>arm-linux-gcc
-v
/opt/arm/arm-2011.03/bin/arm-linux-gcc:
line 1: !#/bin/sh:
没有那个文件或目录
Using
built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm/arm-2011.03/bin/../libexec/gcc/arm-none-linux-gnueabi/4.5.2/lto-wrapper
Target:
arm-none-linux-gnueabi
Configured
with: /scratch/janisjo/arm-linux-lite/src/gcc-4.5-2011.03/configure
--build=i686-pc-linux-gnu --host=i686-pc-linux-gnu
--target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap
--disable-libssp --disable-libstdcxx-pch
--enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as
--with-gnu-ld --with-specs='%{save-temps: -fverbose-asm}
%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}
-D__CS_SOURCERYGXX_MAJ__=2011 -D__CS_SOURCERYGXX_MIN__=3
-D__CS_SOURCERYGXX_REV__=41 %{O2:%{!fno-remove-local-statics:
-fremove-local-statics}}
%{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics:
-fremove-local-statics}}}' --enable-languages=c,c++ --enable-shared
--enable-lto --enable-symvers=gnu --enable-__cxa_atexit
--with-pkgversion='Sourcery G++ Lite 2011.03-41'
--with-bugurl=https://support.codesourcery.com/GNUToolchain/
--disable-nls --prefix=/opt/codesourcery
--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc
--with-build-sysroot=/scratch/janisjo/arm-linux-lite/install/arm-none-linux-gnueabi/libc
--with-gmp=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
--with-mpfr=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
--with-mpc=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
--with-ppl=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic
-lm'
--with-cloog=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
--with-libelf=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr
--disable-libgomp --enable-poison-system-directories
--with-build-time-tools=/scratch/janisjo/arm-linux-lite/install/arm-none-linux-gnueabi/bin
--with-build-time-tools=/scratch/janisjo/arm-linux-lite/install/arm-none-linux-gnueabi/bin
Thread
model: posix
gcc
version 4.5.2 (Sourcery G++ Lite 2011.03-41)
出现了上面的显示说明配置没有问题了,可以将bin文件添加到路劲中,选择后两种的一种即可。
2、修改当前用户的:~/.bash_profile,这个只是对本用户有用。
3、全局的修改,影响所有用户。直接修改/etc/profile文件,需要root用户的权限
后两种的基本方法都是采用vi
export PATH=所在行添加内容:
export
PATH=/opt/arm/arm-2011.03/bin
$PATH
通常第二种和第三种较常用。我选择了第三种。
export
QTDIR=/usr/local/Trolltech/Qt-4.7.3
export
PATH=/opt/arm/arm-2011.03/bin:$QTDIR/bin:$PATH
export
MANPATH=$QTDIR/man:$MANPATH
export
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
红色的就是我的路径配置。保存以后重启电脑就完成了配置。
**就是胜利!!

相关帖子

沙发
FVJFIFE| | 2011-10-30 15:03 | 只看该作者
按照这个一步步来能行吗?!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

2107

帖子

1

粉丝