32位机器上面交叉编译器aarch64-linux-gcc的制作过程

因为最近遇到了一个交叉编译器和平台之间的矛盾,所以自己动手做了一个交叉编译器。目前有一个arm-linu-gcc,但是运行在64位的Ubuntu上面的,而我的PC是32位的,所以自己动手制作一个基于32Ubuntu系统的交叉编译器。

主要参考内容:

http://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/


第一步:

下载:binutils-2.24.tar.gz,gcc-4.9.2.tar.gz、glibc-2.20.tar.xz,这三个文件是主要用到的文件,另外还要自己配套的内核源代码(可以是最新的内核源代码),还有另外三个链接文件(mpfr-3.1.2.tar.xz、gmp-6.0.0a.tar.xz、mpc-1.0.2.tar.gz。

$ wget http://ftpmirror.gnu.org/binutils/binutils-2.24.tar.gz
$ wget http://ftpmirror.gnu.org/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz
$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.17.2.tar.xz
$ wget http://ftpmirror.gnu.org/glibc/glibc-2.20.tar.xz
$ wget http://ftpmirror.gnu.org/mpfr/mpfr-3.1.2.tar.xz
$ wget http://ftpmirror.gnu.org/gmp/gmp-6.0.0a.tar.xz
$ wget http://ftpmirror.gnu.org/mpc/mpc-1.0.2.tar.gz
$ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.12.2.tar.bz2
$ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-0.18.1.tar.gz
下载完之后分别解压,放在一个例如toolchains目录下面,进入gcc-4.9.2的目录建立三个链接文件

$ cd gcc-4.9.2
$ ln -s ../mpfr-3.1.2 mpfr
$ ln -s ../gmp-6.0.0 gmp
$ ln -s ../mpc-1.0.2 mpc
第二步:

创建一个编译和安装目标文件的目录,例如/opt/corss,这个目录会存放编译好的交叉编译器和库文件,和头文件

 sudo mkdir -p /opt/cross
$ export PATH=/opt/cross/bin:$PATH
第三步:

编译和安装Binutils,工作目录在toolchains目录下面

$ mkdir build-binutils
$ cd build-binutils
$ ../binutils-2.24/configure --prefix=/opt/cross --target=aarch64-linux --disable-multilib
$ make -j4
$ make install
$ cd .
第四步:
将内核的头文件安装到编译器里面去,工作目录在内核的源代码的目录下面;Linux Kernel Headers
$ cd linux-4.5
$ make ARCH=arm64 INSTALL_HDR_PATH=/opt/cross/aarch64-linux headers_install
$ cd ..
第五步,编译安装生成交叉编译工具 ,工作目录在toolchains下面, C/C++ Compilers

$ mkdir -p build-gcc
$ cd build-gcc
$ ../gcc-4.9.2/configure --prefix=/opt/cross --target=aarch64-linux --enable-languages=c,c++ --disable-multilib
$ make -j4 all-gcc
$ make install-gcc
$ cd ..
第六步:制作标准库所用的头文件,工作目录在toolchains目录下面,Standard C Library Headers and Startup Files
$ mkdir -p build-glibc
$ cd build-glibc
$ ../glibc-2.20/configure --prefix=/opt/cross/aarch64-linux --build=$MACHTYPE --host=aarch64-linux --target=aarch64-linux --with-headers=/opt/cross/aarch64-linux/include --disable-multilib libc_cv_forced_unwind=yes
$ make install-bootstrap-headers=yes install-headers
$ make -j4 csu/subdir_lib
$ install csu/crt1.o csu/crti.o csu/crtn.o /opt/cross/aarch64-linux/lib
$ aarch64-linux-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /opt/cross/aarch64-linux/lib/libc.so
$ touch /opt/cross/aarch64-linux/include/gnu/stubs.h
$ cd ..
第七步:Compiler Support Library,工作目录在toolchains目录
 
   
$ cd build-gcc
$ make -j4 all-target-libgcc
$ make install-target-libgcc
$ cd ..
第八步: Standard C Library,工作目录在toolchains目录下面。
$ cd build-glibc
$ make -j4
$ make install
$ cd ..
第九步: Standard C++ Library
$ cd build-gcc
$ make -j4
$ make install
$ cd ..
完成上面的步骤就可以制作好交叉编译器工具了,然后可以通过编译kernel,uboot,尝试一下运行。
交叉编译器第一次制作,不是很熟悉编译器的工作原理,这里只是记录工作内容,防止以后遗忘。
 
    
  

你可能感兴趣的:(32位机器上面交叉编译器aarch64-linux-gcc的制作过程)