文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>从零开始建设交叉编译工具

从零开始建设交叉编译工具

时间:2007-06-10  来源:cdy_0

Building a GNU/Linux ARM Toolchain (from scratch)
建设 GNU/Linux arm 交叉编译工具(从零开始)

一 下载源文件(www.chinaunix.net 或其它网站)
  1.http://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz 
  2.http://ftp.gnu.org/gnu/gcc/gcc-3.4.4/gcc-3.4.4.tar.bz2
  3.http://ftp.gnu.org/gnu/glibc/glibc-2.3.5.tar.gz
  4.http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.5.tar.gz
  5.http://frank.harvard.edu/~coldwell/toolchain/ioperm.c.diff
  6.http://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.gz
  7.http://maxim.org.za/AT91RM9200/2.6/2.6.10-at91.patch.gz
  8.http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff  9.http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3

二  设置环境变量及工作目录
      环境变量
  TARGET=arm-unknown-linux-gnu  生成的  arm-linux 工具的安装目录
  PREFIX=/usr/arm       顶级目录
  SYSROOT=${PREFIX}/sysroot
  export ARCH=arm       cpu系列(arm类)
  export CROSS_COMPILE=${TARGET}-
  export PATH=$PATH:${PREFIX}/bin   命令路径

      源文件目录
  mkdir -p $PREFIX/src

三  创建二进制工具
  binutils是一些二进制工具的集合,其中包含了我们常用到的as和ld。
  cd ${PREFIX}/src
  tar xvfz binutils-2.16.tar.gz
  mkdir -p BUILD/binutils-2.16
  cd BUILD/binutils-2.16
  ../../binutils-2.16/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT} && make && make install && echo ok (如果最后一行显示 ok 则表示安装成功)

四  建立内核头文件
     在这一步,内核头被安装在sysroot目录. 为处理器AT91RM9200配置内核,安装补丁。
  cd ${PREFIX}/src
  tar zxvf linux-2.6.10.tar.gz
  ln -s linux-2.6.10 linux
  zcat 2.6.10-at91.patch.gz | patch -d linux -p1
  cd linux
  make at91rm9200dk_defconfig
  make include/linux/version.h
  mkdir -p ${SYSROOT}/usr/include
  cp -a ${PREFIX}/src/linux/include/linux ${SYSROOT}/usr/include/linux
  cp -a ${PREFIX}/src/linux/include/asm-arm ${SYSROOT}/usr/include/asm
  cp -a ${PREFIX}/src/linux/include/asm-generic ${SYSROOT}/usr/include/asm-generic

五  安装glibc头文件
  cd ${PREFIX}/src
  tar zxvf glibc-2.3.5.tar.gz
  patch -d glibc-2.3.5 -p1 <ioperm.c.diff
  cd glibc-2.3.5
  tar xvfz ../glibc-linuxthreads-2.3.5.tar.gz
  cd ..
  mkdir -p BUILD/glibc-2.3.5-headers
  cd BUILD/glibc-2.3.5-headers
  ../../glibc-2.3.5/configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include && make cross-compiling=yes install_root=${SYSROOT}
  install-headers && echo ok
  touch ${SYSROOT}/usr/include/gnu/stubs.h
  touch ${SYSROOT}/usr/include/bits/stdio_lim.h

六  第一阶段编译器GCC
    打2个补丁,用于生成所需的C运行时文件crti.o,crtn.o,及修正错误(避免内部编译器错误)。
  cd ${PREFIX}/src
  tar jxvf gcc-3.4.4.tar.bz2
  patch -d gcc-3.4.4 -p1 < flow.c.diff
  patch -d gcc-3.4.4 -p1 < t-linux.diff
  mkdir -p BUILD/gcc-3.4.4-stage1
  cd BUILD/gcc-3.4.4-stage1
  ../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT} && make && make install && echo ok

七 建立GNU C 库
  cd ${PREFIX}/src
  mkdir -p BUILD/glibc-2.3.5
  cd BUILD/glibc-2.3.5
  BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ../../glibc-2.3.5/configure --prefix=/usr --build=i386-redhat-linux --host=arm-unknown-linux-gnu --target=arm-unknown-linux-gnu --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include && make && make install_root=${SYSROOT} install && echo ok

 八   第二阶段重建GCC
    利用建好的GNU C库重建编译器GCC
  cd ${PREFIX}/src
  mkdir -p BUILD/gcc-3.4.4
  cd BUILD/gcc-3.4.4
  ../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --with-sysroot=${SYSROOT} && make && make install && echo ok

九    测试
  1)编写一个 HelloWorld 程序,然后 arm-unknown-linux-gnu-gcc helloworld.c -o helloworld
  2)file helloworld
aa: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.0.0, dynamically linked (usesshared libs), not stripped
如果显示出上面的输出,说明你编译了一个能在 arm 体系结构下运行的 helloworld,证明你的编译工具做成功了。

(the end)

Resources

    * GNU Binutils http://www.gnu.org/software/binutils/
    * GNU Compiler Collection (GCC) http://gcc.gnu.org/
    * GNU C Library (glibc) http://www.gnu.org/software/libc/libc.html
    * Linux kernel sources http://www.kernel.org
    * ARM Linux http://www.arm.linux.org.uk/
    * Atmel AT91RM9200 patches for Linux 2.6 http://maxim.org.za/AT91RM9200/2.6/
    * Atmel AT91 processors http://www.atmel.com/products/AT91/
    * Software floating point in GCC http://gcc.gnu.org/wiki/Software%20floating%20point
 

相关阅读 更多 +
排行榜 更多 +
创造世界游戏

创造世界游戏

冒险解谜 下载
终极躲避球

终极躲避球

休闲益智 下载
趣味跑酷竞赛

趣味跑酷竞赛

休闲益智 下载