做嵌入式开发少不了跨平台操作,因此也少不了使用交叉编译器,我们可以自己动手制作属于我们自己的交叉编译器,其中可以定制一些东西,可以使之支持浮点运算等特殊要求。以下以适合嵌入式开发最常用的ARM平台的ARMGCC交叉编译器为例进行讲解:其他平台步骤和方法一样,只需在平台选择的时候作相应更改即可。 准备工作:
1.下载制作交叉编译环境的工具:crosstool(crosstool-0.43.tar.gz) 使用命令行下载
wget
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.5ok交叉编译环境创建成功!
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
注意:
无论身处何处,只要有一颗放松而美好的心态,生活便是美好!