嵌入式linux交叉编译工具链搭建

时间:2022-01-11 12:43:47

首先我要先吐槽一下这本《嵌入式Linux应用开发》蛋疼无比的书。尼玛。里面的东西也太旧了把。都能成古董了!!!!所以书里面教的交叉编译工具链的建立方法已经早已不适应(当然你直接用书上建好的请忽略本文)。因此花了四天时间研究了一下交叉编译工具链搭建。
本次基于Ubuntu12.04.4(32位的也就是i386)+croostool-ng-1.9.3
已S3C2440为例。该处理器属于ARMv4t版本。ARM920T系列。
话不多说进入正题。

 

 

作者:强势控局
时间:2014.03.26 

croostool-ng下载地址 http://crosstool-ng.org/

#第一步

由于Linux的软件有很大的相关性。因此需要装一些相关软件

sudo apt-get install  g++  libncurses5-dev  bison  flex  texinfo automake  libtool  patch  cvs  cvsd  gawk aria2 curl subversion gawk
注意 ! 在CVSD的安装下会提示输入路径。按照提示上的/usr………………填写就OK了。


#第二步

# 建立安装目录,所有的文件都在这个下面

mkdir  /work/crosstool


# 切换目录

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  --prefix=/work/crosstool/crosstool-instal   这里填的是安装路径了。l


make

make install


export PATH="${PATH}:/work/crosstool/crosstool-install/bin"

# 之后就可以用 ct-ng 命令了

第三步

#   ct-ng help # 查看帮助

#   ct-ng list-samples # 看看支持那些 samples

# ct-ng show-arm-unknown-linux-gnueabi #显示具体的一个 sample 所要求的包,显示如下


#    OS             : linux-2.6.33.7

#    Companion libs : gmp-4.3.2 mpfr-2.4.2 libelf-0.8.13

#    binutils       : binutils-2.19.1

#    C compiler     : gcc-4.3.2 (C,C++,Fortran,Java)

#    C library      : glibc-2.9

#    Tools          : dmalloc-5.5.2 duma-2_5_15 gdb-6.8 ltrace-0.5.3 strace-4.5.19


然后下载 这些文件直接到官网下载时间比较长,网络资源比较散我把它们打包放到百度网盘里了,分享链接为

http://pan.baidu.com/s/1nItbC
解压的时候需要安装7zip解压包。具体指令问度娘~。 

文件如下图

 

嵌入式linux交叉编译工具链搭建

嵌入式linux交叉编译工具链搭建



嵌入式linux交叉编译工具链搭建

嵌入式linux交叉编译工具链搭建

嵌入式linux交叉编译工具链搭建

也可以自己去下载,下载链接如下速度较慢:(下载到 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


#  strace-4.5.19

http://pkgs.fedoraproject.org/repo/pkgs/strace/strace-4.5.19.tar.bz2/2415e435d61e40315a298c80aced0cda/strace-4.5.19.tar.bz2


# 除了上面的文件如果不安装以下文件建立的时候还是会提示要下载。所以一并下载了。


# 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.html 也列出了一些包,这里也装上


# 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  .config


# 运行命令

ct-ng menuconfig


# 出现一个对话框, (后面有图有真相)


# Paths and misc options ---> 选择

# ××× Paths *** 选择 刚刚下载的包的存放路径

# (/work/crosstool/src)  Local tarballs directory




# 选择要把工具安装在哪个目录下

# (/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]    Building strace

[EXTRA]    Installing strace

[INFO ]  Installing strace: done in 17.20s (at 54:43)

[INFO ]  =================================================================

[INFO ]  Cleaning-up the toolchain's directory

[INFO ]    Stripping all toolchain executables

[EXTRA]    Installing the populate helper

[EXTRA]    Installing a cross-ldd helper

[EXTRA]    Creating toolchain aliases

[EXTRA]    Removing access to the build system tools

[INFO ]  Cleaning-up the toolchain's directory: done in 2.47s (at 54:45)

[INFO ]  Build completed at 20130820.162558

[INFO ]  (elapsed: 54:45.35)

[INFO ]  Finishing installation (may take a few seconds)...


# 编译完后,添加环境变量



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++          arm-linux-g++    

sudo ln -s arm-unknown-linux-gnueabi-objcopy      arm-linux-objcopy                      

sudo ln -s arm-unknown-linux-gnueabi-gcc          arm-linux-gcc        

sudo ln -s  arm-unknown-linux-gnueabi-objdump     arm-linux-objdump                       

sudo ln -s  arm-unknown-linux-gnueabi-gcc-4.3.2   arm-linux-gcc-4.3.2

sudo ln -s  arm-unknown-linux-gnueabi-populate    arm-linux-populate

sudo ln -s  arm-unknown-linux-gnueabi-addr2line   arm-linux-addr2line

sudo ln -s  arm-unknown-linux-gnueabi-gccbug      arm-linux-gccbug

sudo ln -s  arm-unknown-linux-gnueabi-ranlib      arm-linux-ranlib

sudo ln -s  arm-unknown-linux-gnueabi-ar          arm-linux-ar     

sudo ln -s  arm-unknown-linux-gnueabi-gcov        arm-linux-gcov

sudo ln -s  arm-unknown-linux-gnueabi-readelf     arm-linux-readelf

sudo ln -s  arm-unknown-linux-gnueabi-as          arm-linux-as

sudo ln -s  arm-unknown-linux-gnueabi-gdb         arm-linux-gdb

sudo ln -s  arm-unknown-linux-gnueabi-run         arm-linux-run

sudo ln -s  arm-unknown-linux-gnueabi-c++         arm-linux-c++      

sudo ln -s  arm-unknown-linux-gnueabi-gdbtui      arm-linux-gdbtui 

sudo ln -s  arm-unknown-linux-gnueabi-size        arm-linux-size 

sudo ln -s  arm-unknown-linux-gnueabi-cc          arm-linux-cc       

sudo ln -s  arm-unknown-linux-gnueabi-gprof       arm-linux-gprof  

sudo ln -s  arm-unknown-linux-gnueabi-strings     arm-linux-strings

sudo ln -s  arm-unknown-linux-gnueabi-c++filt     arm-linux-c++filt

sudo ln -s  arm-unknown-linux-gnueabi-ld          arm-linux-ld

sudo ln -s  arm-unknown-linux-gnueabi-strip       arm-linux-strip

sudo ln -s  arm-unknown-linux-gnueabi-cpp         arm-linux-cpp

sudo ln -s  arm-unknown-linux-gnueabi-ldd         arm-linux-ldd

sudo ln -s  arm-unknown-linux-gnueabi-ct-ng.config arm-linux-ct-ng.config

sudo ln -s  arm-unknown-linux-gnueabi-nm          arm-linux-nm 


最后# 测试刚刚安装的编译链,编写一个 Hello world 程序,存为 hello.c


arm-linux-gcc -o hello hello.c


# 编译好后,使用 file test 查看文件信息。!!!注意,该文件不能在linux上运行!!!

file hello

嵌入式linux交叉编译工具链搭建


至此。交叉编译环境已经完成了。