原创 交叉编译环境安装小节

2010-11-9 16:53 4016 9 9 分类: MCU/ 嵌入式

这两天,自己编译了下linux下交叉编译环境。出现了很多问题。虽然现在有些问题还不是很明白,现在还是先把出现的问题和解决的方法总结一下:


安装步骤:


1.安装gcc


 如果gcc版本高于4.1版本,首先卸载掉gcc,


使用命令如下:sudo apt-get remove gcc


因为过高的gcc版本会导致编译的时候出现这样的错误提示:


configure:error:


 


      ***These critical programs are missing or too old: gccY


 


      *** Check the INSTALL file for required versions.


  再下载新的gcc版本


使用命令:


sudo apt-get install gcc-4.1 g++ libgcc1 make gdb bison flex


然后使用:ln -s /usr/bin/gcc-4.1 /usr/bin/gcc 建立连接


否则下载的gcc版本不能在使用gcc命令时候使用。


2.下载crosstool


l        在/home/xp(我的机器名,不同的用户不同)下面建立创建crosstool和downloads两个文件夹


  mkdir crosstool


  mkdir downloads


 修改文件夹权限:


  chown xp home/xp/crosstool


  chown xp home/xp/downloads


 因为下面的编译操作是在当前用户下操作的,如果不修改文件夹权限,那么编译的时候会出现权限不够的错误提示


l        下载crosstool.tar.gz的最新版本到/home/xp/,


   解压:         tar -zxvf crosstool.tar.gz


      进入该目录:   cd crosstool.0.43


 


3.配置文件(在在crosstool.0.43目录中操作)


(1)修改demo-arm.sh文件为:  


#!/bin/sh


# This script has one line for each known working toolchain


# for this architecture. Uncomment the one you want.


# Generated by generate-demo.pl from buildlogs/all.dats.txt


set -ex


TARBALLS_DIR=$HOME/downloads


RESULT_TOP=$HOME/crosstool


export TARBALLS_DIR RESULT_TOP


GCC_LANGUAGES="c,c++"


export GCC_LANGUAGES


 


# Really, you should do the mkdir before running this,


# and chown /opt/crosstool to yourself so you don't need to run as root.


mkdir -p $RESULT_TOP


 


#eval `cat arm9tdmi.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest


#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest


eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest


 


echo Done.



(2)修改arm.dat文件


修改 TARGET="arm-unknown-linux-gnu"


为:TARGET=arm-linux


(3)  进入crosstool 目录执行 demo-arm.sh


在终端中输入 ./demo-arm.sh(注意不是在特权用户下)


这个过程需要长时间,首先要下载文件,然后才开始编译,我的机器编译了大约70分钟。当然,也可以把相关的文件下载到downloads目录下,然后再执行 ./demo-arm.sh


(4)  编译完成,修改环境变量


系统用户下:


cd /etc


gedit environment


添加下面的路径:/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/bin


注销,退出,再重新登录,使用下面命令:


arm-linux-gcc -v


提示如下:


Using built-in specs.


 


Target: arm-linux


 


Configured with: /home/xp/crosstool-0.43/build/arm-linux/gcc-4.1.1-glibc-2.3.2/gcc-4.1.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux --with-headers=/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/arm-linux/include --with-local-prefix=/home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long


 


Thread model: posix


 


gcc version 4.1.1


 


如果出现这样的提示,那么就安装成功了!可以使用arm-linux-gcc进行编译,但是在x86架构上不能直接执行,例如执行:


arm-linux-gcc -o test test.c


file test


提示如下:test: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped


 


 


错误提示:


在编译的过程中,经常出现错误,常见的错误有:


1.   )make[2]: *** [/home/xp/crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.6/build-glibc/csu/version.o] 错误 1


make[2]: Leaving directory `/home/xp/crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.2/glibc-2.3.6/csu'


make[1]: *** [csu/subdir_lib] 错误 2


make[1]: Leaving directory `/home/xp/crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.2/glibc-2.3.6'


make: *** [lib] 错误 2


l        这是由version.h文件错误导致的,找到./crosstool/build/arm-linux/gcc-4.1.1-glibc-2.3.2/build-glibc/csu下面的version.h文件,


修改如下:


"Compiled on a Linux >>2.6.22-14-generic<< system on 2008-04-12."


         "Available extensions:"


         " GNU libio by Per Bothner\n"


        " crypt add-on version 2.1 by Michael Glad and others\n"


        " linuxthreads-0.10 by Xavier Leroy\n"


        " BIND-8.2.3-T5B\n"


        " libthread_db work sponsored by Alpha Processor Inc\n"


        " NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk\n"


l        version-info.h 是由 downloads目录下的glibc-2.3.2 源文件 glibc-2.3.2/csu/ 目录下的Makefile 执行后生成,故错误可能发生在Makefile中。


           修改方法:


            解压 glibc-2.3.2.tar.bz2 找到glibc-2.3.2/csu 目录下的Makefile 按如下修改


           文件末尾有2处echo


           echo "\"Compiled on a $$os $$version system" \


          "on `date +%Y-%m-%d`.\\n\"" ;; \


         改为:


         echo "\"Compiled on a $$os $$version system" \


         "on `date +%Y-%m-%d`.\\\\n\"" ;; \


 


         echo "\"Available extensions:\\n\"";


        改为:


      echo "\"Available extensions:\\\\n\"" \


     保存并重新压缩为glibc-2.3.2.tar.bz2 覆盖原来downloads 目录下的  ,在做这部分之前最好保存一个 glibc-2.3.2.tar.bz2的版本,防止误操作损坏。


     打包命令如下:


    tar –cjf glibc-2.3.2.tar.bz2  glibc-2.3.2.


l        重新编译


 


     如果要编译内核时,因为之前卸载了gcc-4.3,可能随之卸载的有g++、build-essential等,需要重新再安装安装build-essential的时候,又要求要装回gcc-4.2,无奈只好同意。还好的是,对于已经完成的交叉编译不再有影响


 


 


很奇怪的一点是,居然没有安装好gdb工具,只好手动安装。安装步骤如下:


l        解压包


tar -jxvf gdb*.bz2


         cd gdb*


l        配置


mkdir temp


cd temp


../configure –target=arm-linux --prefix= /home/xp/crosstool/gcc-4.1.1-glibc-2.3.2/arm-linux


l        编译安装


make


make install


完成


 



文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条