⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buildarmlinuxcrosstools.txt

📁 建立arm-linux的gnu开发工具链的详细步骤
💻 TXT
📖 第 1 页 / 共 2 页
字号:
Arm linux 交叉开发工具链安装步骤


    经过无数次的失败之后,终于搞定了Arm linux的交叉编译工具链的安装。下面把成功的步骤罗列如下:
    主要是参考了http://frank.harvard.edu/~coldwell/toolchain/中的步骤。
    
主机环境:
    联想旭日150笔记本,i386结构(i686?)
    windows2000 安装vmware 5.5.1
    vmware中安装有 Redhat linux 9.0 内核为:
    
    
一、准备工作
1、规划创建所需要的目录
  为了不影响系统原有的工具链,决定将交叉工具链安装在一个特定的路径中
  
  #mkdir /usr/src/armgcc         //用于存放下载的源代码包
  
  #mkdir /usr/local/arm          //准备用来安装交叉工具链的路径
  
  
2、建立相应的环境变量,以方便后面使用

  export TARGET=arm-linux
  export PREFIX=/usr/local/arm
  export SYSROOT=${PREFIX}/sysroot
  export ARCH=arm
  export CROSS_COMPILE=${TARGET}-
  export SRC=/usr/src/armgcc 
  export PATH=$PATH:${PREFIX}/bin
  
  为了方便,把他们放在用户目录中的.bash_profile文件中,这样不用每次启动计算机都要重新设置了,我是放在/root/.bash_profile中
 
3、下载相应的源代码包
   将所需要的源代码包下载到${SRC}目录中,和参考资料中的不同,我采用了不同的版本
   
     linux-2.4.26.tar.bz2     patch-2.4.26-vrs1.gz
          gcc-3.4.4.tar.gz  
                  glibc-2.3.4.tar.bz2     glibc-linuxthreads-2.3.4.tar.bz2
          binutils-2.14.tar.gz
   
   
     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" 
     http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff 
   
二、开始安装
1、安装Binutils
    这个步骤是最顺利的,在历次失败的安装过程中,这个步骤也都没有出现过什么问题。

    #cd ${SRC}
    #tar xvfz binutils-2.14.tar.gz
    #mkdir -p bdbin
    #cd bdbin
    #../binutils-2.14/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT}
    #make
    #make install
    
    完成之后,在${PREFIX}/bin目录和${PREFIX}/{TARGET}/bin目录中,会有相应的工具程序。

2、linux内核头文件的安装

    #cd ${SRC}
    #tar xvfj linux-2.4.26.tar.bz2       #gzip -d patch-2.4.26-vrs1.gz 
    #cd linux-2.4.26
    #cp ../patch-2.4.26-vrs1 ./    #patch -p1 < patch-2.4.26-vrs1    #make ARCH=arm menuconfig    #make
    
    //最后一步make,有点怀疑,那是华恒的资料中的步骤,感觉不应该整体进行编译啊,以前的参考资料,包括上面harvard的参考资料中,都是只针对特定头文件进行编译的。
    //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
    
    //上面复制都文件到相应的目录中时,华恒的有误,把asm-i386复制了。估计是,参考LFS内核升级的资料,直接抄过来了。
    
3、glibc头文件安装

    #cd ${SRC}
    #tar xvfj glibc-2.3.4.tar.bz2
    #cd glibc-2.3.4
    #tar xvfj ../glibc-linuxthreads-2.3.4.tar.bz2
    #vi sysdeps/unix/sysv/linux/arm/ioperm.c  
    
    修改 第103、104两行中的BUS_ISA 为CTL_BUS_ISA。(注意,这两行中有多个BUS_ISA,要修改的只是其中不与其它符号相连的那两个BUS_ISA)
    
    #cd ..
    #mkdir bdlib
    #cd bdlib
    #../glibc-2.3.4/configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads  \
     --with-headers=${SYSROOT}/usr/include
    #make cross-compiling=yes install_root=${SYSROOT} install-headers
    #touch ${SYSROOT}/usr/include/gnu/stubs.h
    #touch ${SYSROOT}/usr/include/bits/stdio_lim.h
    
    //需要注意,上面配置的时候,--prefix=/usr的确是这样的,可能glibc和gcc、binutils中prefix选项的含义不一样
    
4、第一次安装gcc

    #cd ${SRC}
    #tar xzvf gcc-3.4.4.tar.gz
    #patch -d gcc-3.4.4 -p1 < flow.c.diff
    #patch -d gcc-3.4.4 -p1 < t-linux.diff
    #mkdir bdgcc
    #../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c \
     --with-sysroot=${SYSROOT}
    
    注意:不能加上"--disable-shared"选项。(华恒的注释,不知道为什么,有什么考虑)。

    #make all-gcc
    #make install-gcc
    
5、安装完整的glibc
  很耗时间啊,整个过程中,这个步骤是消耗时间最长的。
  
  #cd ${SRC}/bdlib
  #rm * -rf
  #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.4/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
  
6、安装完整的gcc
  #cd ${SRC}/bdgcc
  #rm * -rf
  
  #../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c \
   --with-sysroot=${SYSROOT}
  #make
  #make install
  
  
  好啦,交叉编译工具链,到此就建立成功啦。
  
7、试验
  
  harvard的参考资料上,还有一个步骤是,用刚建立的工具链编译内核,呵呵,应该是可行的了。
  
  #cd ${SRC}/linux-2.4.26
  #make zImage
  #make modules
  #make INSTALL_MOD_PATH=${SYSROOT} modules_install   
  
  编译出来的内核在 arch/arm/boot/zImage 
  相应的可载入模块将被安装在/usr/arm/sysroot/lib/modules/[kernel-version]
  
  后面那据话,不知道是什么意思,是不是说编译之后就在那个位置,还是说将来使用的时候应该放的位置?
  
  另外:the directory /usr/arm/sysroot has been set that it is suitable for NFS export as a root filesystem for the target system.
  
参考资料:
1、http://frank.harvard.edu/~coldwell/toolchain/
2、linux_移植指南.pdf






    






































































    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
另外,在下面的资料中看到了对一些配置选项的介绍:

GNU toolchain for ARM 编译笔记 
交叉编译GNU工具链真是折磨人的差事阿……以后再也不做了。

以下是编译笔记

______________________________________________

构建自己的arm-linux toolchain:
生成工具链目录结构:
 /usr/armtools
  `----arm-linux   目标平台相关内容
  | `----bin   gcc内部使用的编译/连接工具
  | `----lib   gcc的内部库/c++ 库
  | | `----ldscripts  ld的连接脚本
  | `----target-root  目标平台根目录

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -