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

2019-07-12 15:58发布

首先我要先吐槽一下这本《嵌入式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
然后下载 这些文件直接到官网下载时间比较长,网络资源比较散我把它们打包放到百度 {MOD}里了,分享链接为 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交叉编译工具链搭建


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