码迷,mamicode.com
首页 > 系统相关 > 详细

Ubuntu 12.04 64bit GCC交叉编译器制作 原创

时间:2015-03-18 18:14:24      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:


                                                                                                                            
        做嵌入式开发少不了跨平台操作,因此也少不了使用交叉编译器,我们可以自己动手制作属于我们自己的交叉编译器,其中可以定制一些东西,可以使之支持浮点运算等特殊要求。以下以适合嵌入式开发最常用的ARM平台的ARMGCC交叉编译器为例进行讲解:其他平台步骤和方法一样,只需在平台选择的时候作相应更改即可。 准备工作: 
     1.下载制作交叉编译环境的工具:crosstool(crosstool-0.43.tar.gz)       使用命令行下载 

     wget  http://www.kegel.com/crosstool/crosstool-0.43.tar.gz      

   2.下载编译过程需要用到的源代码:         

           binutils-2.15.tar.bz2        

         gcc-3.4.5.tar.bz2         

         glibc-2.3.6.tar.bz2 

         glibc-linuxthreads-2.3.6.tar.bz2      

          linux-2.6.8.tar.bz2 

         linux-libc-headers-2.6.12.0.tar.bz2 
     说明:具体版本号可以有一些不同,后面说讲如何设置。 
         以上七个软件建议放在同一目录下,如~/linux/downloads 目录下。 
     3.编译过程需要用到以下几个软件,系统本身没有安装,可以运行安装命令提前做好,因为编译一次至少要花半个小时,如果因为依赖软件没有安装中途会报错退出,只有从头再来,那样很浪费时间的。 

     sudo apt-get install bison flex build-essential patch libncurses5-dev 

      具体工作步骤:    

      1、修改系统配置 

      1.1 将GCC版本设置为4.1 

      Ubuntu 12.04  64bit 默认安装的 gcc 版本为4.6,这个版本对于语法要求较高,编译会出错,目前不宜选用,于是选择了gcc-4.1,但并不需要卸载gcc-4.6。 

           sudo apt-get install gcc-4.1 (目前新的都无法直接安装,需要自己下载gcc-4.1 手动安装,请参见Ubuntu 12.04 64bit 下安装编译GCC 4.1.2 绝对原创)

         sudo rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.6的软链接文件)   

         sudo ln -s /usr/bin/gcc-4.1  /usr/bin/gcc (建立GCC到gcc-4.1的软链接)      

     1.2 修改sh版本      

      如果运行       ls -la /bin/sh 
      看到链接的是 dash ,则请运行以下命令     

      sudo dpkg-reconfigure dash      

      选择 no 以删除 dash  此处如果不改好的话,编译时会出现错误

 2.解压软件包,并进入该目录,查看重要的脚本文件。

     $cd downloads  
     $tar –zxvf crosstool-0.43.tar.gz 

     $cd crosstool-0.43 
    在此目录下可以看到有很多.sh脚本和.dat配置文件,每一个支持的处理器都有它所相应的脚本。假如选用demo-arm- softfloat.sh 就是建立目标为支持软浮点的arm交叉编译工具链。  


3.修改demo-arm-softfloat.sh $vim demo-arm-softfloat.sh 

修改下面两句 
TARBALLS_DIR=$HOME/downloads //表示下载的源码的存放目录 

RESULT_TOP=/opt/crosstools //表示生成的工具链的存放目录 

为: 
TARBALLS_DIR=/home/linux/downloads(源码存放目录) 

 RESULT_TOP=/home/linux/crosstools(生成工具链目录) 
4.修改 gcc-3.4.5-glibc-2.3.6.dat $ vim gcc-3.4.5-glibc-2.3.6.dat 修改内容为: 
    BINUTILS_DIR=binutils-2.15 

   GCC_DIR=gcc-3.4.5 

   GLIBC_DIR=glibc-2.3.6 

   LINUX_DIR=linux-2.6.8 

  LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

  GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6

 5 $ ./ demo-arm-softfloat.sh  这个过程较长(半个小时左右)

6. 修改环境变量 
    直接修改/home/linux/.bashrc cd /home/linux

     vim .bashrc 在最后面添加如下内容: 

     PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin

     然后 source .bashrc 

 7.执行如下命令 
$ arm-softfloat-linux-gnu-gcc -v 

   显示 
Reading specs from /home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/lib/gcc/arm-softfloat-linux-gnu/3.4.5/specs  
Configured with: /home/david/downloads/crosstool-0.43/build/arm-softfloat-linux-gnu/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-softfloat-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu --with-float=soft --with-headers=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu/include --with-local-prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long 
  hread model: posix gcc version 3.4.5 
 ok交叉编译环境创建成功!


8.恢复我们修改的系统配置:

 恢复gcc为4.6

  sudo rm /usr/bin/gcc  

 sudo ln -s /usr/bin/gcc-4.6  /usr/bin/gcc

 重新安装dash 

 sudo dpkg-reconfigure dash 

 选择 yes 以重新安装 dash

注意:

 1.UBUNTU12.04 上工具链的编译执行./demo-arm-softflaot.sh过程中会出现下面的错误:编译过程中会出现:
*** "These critical programs are missing or too old" as ld
解决方法如下:


修改下面的文件:
vi ./build/arm-softfloat-linux-gnu/gcc-3.4.5-glibc-2.3.6/glibc-2.3.6/configure   (就是把4425行的{ (exit 1); exit 1; };屏蔽掉,因为binuilts版本过低会造成异常退出

4419 test -n "$critic_missing" && { { echo "$as_me:$LINENO: error:
4420 *** These critical programs are missing or too old:$critic_missing
4421 *** Check the INSTALL file for required versions." >&5
4422 echo "$as_me: error:
i

4423 *** These critical programs are missing or too old:$critic_missing
4424 *** Check the INSTALL file for required versions." >&2;}
{ (exit 1); exit 1; };}
改为:
4419 test -n "$critic_missing" && { { echo "$as_me:$LINENO: error:
4420 *** These critical programs are missing or too old:$critic_missing
4421 *** Check the INSTALL file for required versions." >&5
4422 echo "$as_me: error:
4423 *** These critical programs are missing or too old:$critic_missing
4424 *** Check the INSTALL file for required versions." >&2;}
#{ (exit 1); exit 1; };
}
在再次执行./demo-arm-softfloat.sh前,请在eval `cat arm-softfloat.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest  末尾处加--nounpack表示不重新解压安装包,目的是让安装过程继续进行,而不覆盖掉该configure问题以及以前的编译结果
再次执行:
./demo-arm-softfloat.sh









































Ubuntu 12.04 64bit GCC交叉编译器制作 原创

标签:

原文地址:http://blog.csdn.net/cao527121128/article/details/44410077

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!