首先我要先吐槽一下这本《嵌入式Linux应用开发》蛋疼无比的书。尼玛。里面的东西也太旧了把。都能成古董了!!!!所以书里面教的交叉编译工具链的建立方法已经早已不适应(当然你直接用书上建好的请忽略本文)。因此花了四天时间研究了一下交叉编译工具链搭建。
本次基于Ubuntu12.04.4(32位的也就是i386)+croostool-ng-1.9.3
已S3C2440为例。该处理器属于ARMv4t版本。ARM920T系列。
话不多说进入正题。
作者:强势控局
时间:2014.03.26
croostool-ng下载地址
#第一步
由于Linux的软件有很大的相关性。因此需要装一些相关软件
sudo apt-get install
注意 ! 在CVSD的安装下会提示输入路径。按照提示上的/usr………………填写就OK了。
#第二步
# 建立安装目录,所有的文件都在这个下面
mkdir
# 切换目录
cd /work/crosstool
# 下载 crosstool-ng-1.9.3 到 crosstool 目录
http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.9.3.tar.bz2
# 解压到当前目录
tar xjf crosstool-ng-1.9.3.tar.bz2
# 建立一些待会儿会用到的相关目录,到时到这个目录下面去 build
mkdir crosstool-build
# crosstool-ng-1.9.3 安装到这个下面,
mkdir crosstool-install
# 下载的交叉编译器等软件包都放在这个下面,crosstool-ng-1.9.3 build 的时候,所需要的包的路径指向这个文件夹
mkdir src
# 交叉编译工具安装到这个目录下,最后要把它加入 PATH
mkdir tools
# 进入到解压的目录
cd crosstool-ng-1.9.3
# 这里要用绝对路径!
./configure
make
make install
export PATH="${PATH}:/work/crosstool/crosstool-install/bin"
# 之后就可以用 ct-ng 命令了
第三步
#
#
# ct-ng show-arm-unknown-linux-gnueabi #显示具体的一个 sample 所要求的包,显示如下
#
#
#
#
#
#
然后下载 这些文件直接到官网下载时间比较长,网络资源比较散我把它们打包放到百度网盘里了,分享链接为
http://pan.baidu.com/s/1nItbC
解压的时候需要安装7zip解压包。具体指令问度娘~。
文件如下图
也可以自己去下载,下载链接如下速度较慢:(下载到 src 目录下!)
# linux-2.6.33.7
https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.7.tar.bz2
# gmp-4.3.2
http://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2
# mpfr-2.4.2
http://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.bz2
# libelf-0.8.13
http://www.mr511.de/software/libelf-0.8.13.tar.gz
# binutils-2.19.1
http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2
# gcc-4.3.2
http://ftp.gnu.org/gnu/gcc/gcc-4.3.2/gcc-4.3.2.tar.bz2
# glibc-2.9
http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.bz2
# dmalloc-5.5.2
ftp://ftp.uwsg.indiana.edu/linux/gentoo/distfiles/dmalloc-5.5.2.tgz
# duma-2_5_15
http://gnome-build-stage-5.googlecode.com/files/duma_2_5_15.tar.gz
# gdb-6.8
http://mirrors.usc.edu/pub/gnu/gdb/gdb-6.8.tar.bz2
# ltrace-0.5.3
http://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.5.3.orig.tar.gz
#
# 除了上面的文件如果不安装以下文件建立的时候还是会提示要下载。所以一并下载了。
# expat-2.0.1.tar.gz
http://downloads.sourceforge.net/expat/expat-2.0.1.tar.gz
# glibc-ports-2.9.tar.bz2
http://ftp.gnu.org/gnu/libc/glibc-ports-2.9.tar.bz2
# ncurses-5.7.tar.gz
http://ftp.gnu.org/gnu/ncurses/ncurses-5.7.tar.gz
#http://wenku.baidu.com/view/89e98ec45fbfc77da269b10e
# ecj-latest.jar
http://www.mirrorservice.org/sites/sourceware.org/pub/java/ecj-latest.jar
# sstrip.c
https://dev.openwrt.org/export/20154/trunk/tools/sstrip/src/sstrip.c
第四步
# 切换目录
cd crosstool-build/
# 拷贝配置文件到 crosstool-build 目录
cp ../crosstool-ng-1.9.3/samples/arm-unknown-linux-gnueabi/* .
# 修改文件名
mv crosstool.config
# 运行命令
ct-ng menuconfig
# 出现一个对话框, (后面有图有真相)
# Paths and misc options ---> 选择
# ××× Paths *** 选择 刚刚下载的包的存放路径
# (/work/crosstool/src)
# 选择要把工具安装在哪个目录下
# (/work/crosstool/tools) Prefix directory
# *** BUild hehavior *** 设置并行数目为 2 个,提高软件编译的速度。
# (2) Number of parralle jobs
# Target Options --->
这里根据具体CPU型号所属关系设置。芯片手册都有的。
# (armv4t) Architecture level
# (arm9tdmi) Emit assembly for CPU
# (arm920t) Tune for CPU
# C compiler --->
# *** Additional supported lanuages: *** 取消 Fortran 和 Java
# [*] C++
# [] Fortran
# [] Java
# 最后保存 Save and Alternate Configuration File
# 保存文件名仍为 .config
# 退出
各设置如下面的图:
# 编译前,要将刚刚下载好的包放在 刚刚指定的 src 目录下
# 可以用 cat .config
# 然后 在当前目录输入 ct-ng build
# ct-ng build
#耗时有点多。刚才忘记把信息导出来了。不能截图了。凑合看看吧。
可以去泡个咖啡。打个LOL之后在来看看编译完了没有。我编译时花了一个多小时。
# 编译结果如下 只剩这一段尾巴了。不要介意啊。
[EXTRA]
[EXTRA]
[INFO ]
[INFO ]
[INFO ]
[INFO ]
[EXTRA]
[EXTRA]
[EXTRA]
[EXTRA]
[INFO ]
[INFO ]
[INFO ]
[INFO ]
# 编译完后,添加环境变量
vim /etc/envirnment 在第一句末尾添加。:/work/crosstool/tools/bin 保存退出。
#执行一下命令。
export PATH="${PATH}:/work/crosstool/tools/bin"
第五步
在 tools/bin 目录下 创建符号链接,就可以用 arm-linux-gcc 等命令了
sudo ln -s arm-unknown-linux-gnueabi-g++
sudo ln -s arm-unknown-linux-gnueabi-objcopy
sudo ln -s arm-unknown-linux-gnueabi-gcc
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
sudo ln -s
最后# 测试刚刚安装的编译链,编写一个 Hello world 程序,存为 hello.c
arm-linux-gcc
# 编译好后,使用 file test 查看文件信息。!!!注意,该文件不能在linux上运行!!!
file hello
至此。交叉编译环境已经完成了。