好久没有做关于嵌入式的学习了,以前的照抄照搬,需要进一步的学习。从现在开始作一些嵌入式的学习,从最底层的学习,从交叉编译环境搭建开始。**把自己学习的东西记录下来。 我的系统是Fedora14,比较好的系统,内核版本在2.6.35.搭建的环境主要是支持EABI的交叉编译环境。EABI要求内核也要支持EABI,这在后期的内核编译中有体现。 不多说了,开始吧。我之前的学习板是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、参看手册,官方提供了大量的手册,可以从官网上面下载。至少知道下面操作的所以然。也就是5、6十页左右吧,英文的,这个是必须的。搞开发不懂英文搞个屁。 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 (xxx是gcc、gcc-4.5.2、g++) #第一句是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 红色的就是我的路径配置。保存以后重启电脑就完成了配置。 **就是胜利!! |