Chinaunix首页 | 论坛 | 博客
  • 博客访问: 362846
  • 博文数量: 53
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 1548
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-27 07:54
个人简介

IT民工一枚,为学弟学妹造福是我一直写博文的动力!为媳妇提供技术支持是我学习新技术的动力!为自己脱离贫困线,买到心仪的摩托车,有饭吃,有床睡,有妹把,笔耕不辍~~

文章分类

全部博文(53)

文章存档

2013年(54)

分类: LINUX

2013-04-14 14:44:01

从源码制作cross-tools

1, 参考文档:

  • 中的ARM部分工具链的制作.

2, 说明:

  1. 这个工具链包括: binutils, gcc, glibc; 如果要用uclibc, 请参考
  2. 手册中使用的binutils-2.18, 但是用2.18做出来的不管用, 一开始以为是gcc版本的问题, 后来换了binutils-2.17可以用.
  3. 下载制作工具链需要的代码包.
  4. ,建议安装不要用root用户.

3, 制作步骤:

  1. 准备好环境变量
  2. unset CFLAGS
    unset CXXFLAGS
    unset LDFLAGS export CLFS=/opt/arm-linux-4.2.1            #改成你希望按照的目录 export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")" export CLFS_TARGET="arm-linux" sudo mkdir $CLFS
    sudo chown -v :<group> $CLFS    #修改文件所属, 以便可以读写
  3. 安装内核头文件( 说明: 执行下列命令之前, 先解压相应的包, 然后进入解压后的目录. (后面的安装也是这样)).
  4. install -dv ${CLFS}/usr/include
    cp -av include/{asm-generic,linux,mtd,scsi,sound} ${CLFS}/usr/include
  5. 安装binutils-2.17
  6. patch -Np1 -i <path-to>/binutils-2.17-posix-1.patch
    mkdir -v ../binutils-build
    cd ../binutils-build
    AR=ar AS=as ../binutils-2.18/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} --disable-nls --enable-shared --disable-multilib
    make configure-host
    make
    make install
    cp -v ../binutils-2.18/include/libiberty.h ${CLFS}/usr/include 
  7. 安装glibc-headers(注意: 如果host是gcc-4.3以上版本, configure的时候, CC="gcc -fgnu89-inline")
  8. cp configure{,.orig} sed -e 's/3.4/3.[0-9]/g' configure.orig > configure
    tar -jxvf ../glibc-ports-2.6.1.tar.bz2
    mv -v glibc-ports-2.6.1 ports
    mkdir -v ../glibc-build
    cd ../glibc-build
    echo "libc_cv_forced_unwind=yes" > config.cache
    echo "libc_cv_c_cleanup=yes" >> config.cache
    echo "libc_cv_arm_tls=yes" >> config.cache
    echo "install_root=${CLFS}" > configparms
    CC=gcc ../glibc-2.6.1/configure --prefix=/usr --host=${CLFS_TARGET} --build=${CLFS_HOST} --with-headers=${CLFS}/usr/include --cache-file=config.cache
    make install-headers
    cp -v bits/stdio_lim.h ${CLFS}/usr/include/bits
    touch ${CLFS}/usr/include/gnu/stubs.h
    cp -v ../glibc-2.6.1/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h ${CLFS}/usr/include/bits
  9. 安装 gcc-4.2.1
  10. patch -Np1 -i ../gcc-4.2.1-posix-1.patch patch -Np1 -i ../gcc-4.2.1-cross_search_paths-1.patch mkdir -v ../gcc-build
    cd ../gcc-build ./gcc-4.2.1/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --disable-shared --enable-languages=c
    make all-gcc
  11. 安装 glibc-2.6.1(注意: 如果host是gcc-4.3以上版本, configure的时候, BUILD_CC="gcc -fgnu89-inline")
  12. tar -jxvf ../glibc-ports-2.6.1.tar.bz2
    mv -v glibc-ports-2.6.1 ports
    patch -Np1 -i ../glibc-2.6.1-libgcc_eh-1.patch patch -Np1 -i ../glibc-2.6.1-localedef_segfault-1.patch patch -Np1 -i ../glibc-2.6.1-cross_hacks-1.patch patch -Np1 -i ../glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch mkdir -v ../glibc-build
    cd ../glibc-build
    echo "libc_cv_forced_unwind=yes" > config.cache
    echo "libc_cv_c_cleanup=yes" >> config.cache
    echo "install_root=${CLFS}" > configparms
    BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" AR="${CLFS_TARGET}-ar "RANLIB="${CLFS_TARGET}-ranlib" ../glibc-2.6.1/configure --prefix=/usr --libexecdir=/usr/lib/glibc --host=${CLFS_TARGET} --build=${CLFS_HOST} --disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.0 --with-__thread --with-binutils=${CLFS}/cross-tools/bin --with-headers=${CLFS}/usr/include --cache-file=config.cache
    make
    make install
    cp -v locale/localedef-native $CLFS/cross-tools/bin
  13. 安装gcc-4.2.1
  14. patch -Np1 -i ../gcc-4.2.1-posix-1.patch patch -Np1 -i ../gcc-4.2.1-cross_search_paths-1.patch mkdir -v ../gcc-build
    cd ../gcc-build ../gcc-4.2.1/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --enable-c99 --enable-long-long --enable-threads=posix
    make
    make install

4, 结束

  • 如果还需要安装file, shadow 等按照手册安装就可以了.
  • $CLFS/cross-tools/bin/arm-linux-; 这些就是工具链的可执行程序., 这些程序能是host上运行, 不能在arm上运行
  • $CLFS/{,usr/}lib/ 这些文件在制作rootfs的时候会用到.
  • $CLFS/{,usr/}{,s}bin/ 这些文件是在arm上运行的程序, 不能在host上运行
  • 建立一个rc文件, 把这个文件存放到$CLFS/cross-tools/bashrc下面,
  • unset CFLAGS
    unset CXXFLAGS
    unset LDFLAGS
    unset LD_LIBRARY_PATH
    unset PKG_CONFIG_PATH
    CC=arm-linux-gcc
    CXX=arm-linux-g++ LD=arm-linux-ld
    LC_ALL=POSIX if ! echo $PATH | grep "\/opt\/arm\-linux\-4.2.1\/cross-tools\/bin" > /dev/null then PATH="/opt/arm-linux-4.2.1/cross-tools/bin:$PATH" fi PS1="\\[\\e[1;31m\\]ARM-CROSS|\\t \\[\\e[1;32m\\]\\u\\n[ \\[\\e[0m\\]\\w\\[\\e[1;32m\\] ]# \\[\\e[0m\\]" export CC CXX LD LC_ALL PATH PS1
  • 在使用工具链之前先要设置环境变量, 可以用
  • source /opt/arm-linux-4.2.1/bashrc
阅读(1602) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~