freebsd下作x86/arm linux的交叉编译器

2009-05-13 01:40:08来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

以纯粹的源码编译交叉编译器,还是头一遭。以往都是利用目标主机上的头文件和库文件作交叉编译,比较省力。但是这次尝试编译linux的交叉编译器,着实遇到了一些麻烦。
1. 源码准备,需要下载:
    bison
    m4
    gnu make
    binutils
    gcc
    linux-kernel
    newlib
    uclibc

2. 由于编译gcc时,需要bison,m4,gnu make,所以首先要将其编译。
    随便编译到某个目录,或者/usr/local
    # set path=(somdir/bin $path)
3. 编译binutils:
    mkdir b; cd b;../binutils/configure
--prefix=/usr/cross/arm-linux --target=arm-elf --disable-nls; make all
install
    编译并安装到/usr/cross/arm-linux,目标文件格式为arm-elf,只使用缺省语言提示
    # set path=(/usr/cross/arm-linux/bin $path)
4. 编译gcc:
    mkdir c; cd c;../gcc/configure
--prefix=/usr/cross/arm-linux --target=arm-elf --disable-nls
--without-headers; make all install
    这一步是为了能够编译相应的库,也就是uclibc。
    # rehash
   
5. 编译uclibc:
    这步非常关键
    make menuconfig
    * 选择cpu类型,
    * 设置linux头文件位置,也就是linux-kernel的顶级目录
    * 去掉PIC选项
    * 安装目录设置为“/arm-elf/”
    make CROSS=arm-elf-
注意不要漏掉后面的“-”
    在编译过程中,include目录中的asm和linux会链接到linux-kernel目录中相应的目录上
    在这个过程中如果出现什么错误,优先检查这几个目录链接是否正确
    make PREFIX=/usr/cross/arm-linux install
6. 再次编译gcc
    cd /usr/cross/arm-linux/arm-elf/; ln -s include sys-include
    在sys-include和lib目录中创建COPIED,内容分别为文件的所在目录,如:
    /usr/cross/arm-lnx/arm-elf/sys-include
    /usr/cross/arm-lnx/arm-elf/lib
    # cd -
    cd c; rm -rf *; ../gcc/configure
--prefix=/usr/cross/arm-linux --target=arm-elf --disable-nls
--with-headers=/usr/cross/arm-lnx/arm-elf/sys-include
--with-libs=/usr/cross/arm-lnx/arm-elf/lib
    make all install
7. 创建crt0.o
   从newlib中相应的目录中找到crt0.*,arm对应为crt0.S,i386对应为crt0.c,
   用arm-elf-gcc 编译成crt0.o文件,然后将crt0.o拷贝到/usr/cross/arm-lnx/lib/gcc/arm-elf/3.4.4/
8. 完成
   可以用交叉编译器编译相应的程序了。
   


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/132/showart_53131.html

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:[原创]我的fvwm配置文件

下一篇:尝试了一下arm指令集的执行程序