做嵌入式开发少不了跨平台操作。因此也少不了使用交叉编译器。我们能够自己动手制作属于我们自己的交叉编译器。当中能够定制一些东西,能够使之支持浮点运算等特殊要求。

下面以适合嵌入式开发最经常使用的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交叉编译器制作 原创的更多相关文章

  1. Ubuntu 12.04 64bit 配置完android 5.0编译环境后出现“could not write bytes: Broken pipe.”而无法进入输入帐号密码的登陆界面

    Ubuntu 12.04 64bit 配置完android 5.0编译环境后出现“could not write bytes: Broken pipe.”而无法进入输入帐号密码的登陆界面.上网问了问百 ...

  2. Ubuntu 18.04安装arm-linux-gcc交叉编译器

    Ubuntu 18.04安装arm-linux-gcc交叉编译器

  3. build linaro 4.8 on ubuntu 12.04 64bit

    安装必要的软件 sudo apt-get build-dep gcc binutils gdb sudo apt-get install curl gawk sudo apt-get install ...

  4. ubuntu 10.04 安装arm交叉编译器

    家里有一台cotext-A9(armv7-a) 的盒子,现在不用了, 一直想着废物利用.于是想怎么为这盒子编译程序. 目标机器: root@routon-h1:/# uname -a Linux ro ...

  5. Ubuntu 18.04安装arm-linux-gcc交叉编译器(超简单,附安装包下载地址)

    目前网上搜索发现,最多人安装的是4.4.3版本的: arm-linux-gcc-4.4.3.tar.gz下载地址:https://pan.baidu.com/s/1rAIBASIRZAXl-P1UOW ...

  6. Ubuntu 12.04 64bit 安装编译GCC 4.1.2 绝对原创

    1. 下载并解压源代码: wget http://mirrors.ustc.edu.cn/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 tar jxvf gcc-4.1.2. ...

  7. 在Ubuntu 12.04 - 64bit中安装CodeSourcery时提示错误

    安装时提示错误,Your 64-bit Linux host is missing the 32-bit libraries requied to install and use Sourcery C ...

  8. cpu-z for ubuntu 12.04 64bit : cpu-g

    wget https://launchpad.net/~phantomas/+archive/ppa/+files/cpu-g_0.9.0_amd64.deb sudo dpkg -i cpu-g*. ...

  9. ubuntu 12.04 install gcc 4.8

    http://askubuntu.com/questions/271388/how-to-install-gcc-4-8-in-ubuntu-12-04-from-the-terminal sudo ...

随机推荐

  1. JS实现分页效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. CodeForcesGym 100502K Train Passengers

    Train Passengers Time Limit: 1000ms Memory Limit: 524288KB This problem will be judged on CodeForces ...

  3. OR1200处理器中Wishbone总线接口模块WB_BIU介绍

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块.15.1节给出了WB_BIU模块的对外连接关系,并指出 ...

  4. Python命令行參数大全

      -b     :    当转换数组为字符串时提出警告.比方str(bytes_instance), str(bytearray_instance). -B     :    当导入.py[co]文 ...

  5. Node.js转化GBK编码 - iconv-lite

    node当使用node获取GBK编码的数据时,nodejs仅仅支持utf-8,node没有提供转换编码的原生支持,有倒是有一个模块iconv能干这个事,但须要本地方法,VC++库的支持.国外有个大牛写 ...

  6. Greenplum中定义数据库对象之创建与管理模式

    创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式. testdw=# ...

  7. RvmTranslator6.3 is released

    RvmTranslator6.3 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...

  8. android 图片特效处理之 图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  9. android 图片特效处理之光照效果

    这篇将讲到图片特效处理的光照效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:图片上面的像素点按照给定圆心,按照圆半径的变化,像素点的RGB值分别加上相应的值作为当前点的RGB值. 例: ...

  10. janos.io

    http://janos.io/ https://developer.mozilla.org/en-US/Firefox_OS/Developing_Firefox_OS/Porting