QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2786|回复: 7

构建Gcc-3.2+glibc-2.2.5交叉编译环境

[复制链接]
发表于 2005-10-24 20:36:07 | 显示全部楼层 |阅读模式
一、准备
        binutils-2.13.2.1.tar.bz2                        二进制工具包
        gcc-3.2.tar.gz                                                gcc编译器
        glibc-2.2.5.tar.gz                                        C库
        glibc-linuxthreads-2.2.5.tar.gz                线程库
        linux-2.4.18.tar.bz2                                2.4.18内核源文件
        patch-2.4.18-rmk7.bz2                                rmk7的补丁
        errlist-arm.patch                                        errlist的Patch
        unwind-arm.patch                                        unwind的Patch
       
        注意,实际发现用binutils-2.13.tar.bz2是有问题。
       
二、环境
        1. 目录结构
        /home/zhaolei/arm9/                                                :arm9工程目录
        /home/zhaolei/arm9/build-tools/3.2                :用于构建gcc3.2工具链
        /home/zhaolei/arm9/tools/3.2/bin                :工具链工具所在目录
        /home/zhaolei/arm9/tools/3.2/arm-linux        :目标板软件所在目录
        /home/zhaolei/arm9/kernel                                :内核所在目录
       
        2. 主要路径
        内核头文件: /home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include
        交叉编译器: /home/zhaolei/arm9/tools/3.2/bin
       
        3. Redhat 9.0
       
        4. 普通用户权限编译安装
                使用root用户安装是非常危险的!如果配置错误,很有可能会覆盖本地的文件破坏系统。

三、步骤

        安装前,可以先把交叉编译器的路径加入当前console的PATH中。当然你可以在安装完binutils之后加入。
        export PATH=$PATH:/home/zhaolei/arm9/tools/3.2/bin/
       
        将binutils-2.13.2.1.tar.bz2,gcc-3.2.tar.gz,
        glibc-2.2.5.tar.gz,
        glibc-linuxthreads-2.2.5.tar.gz,
        errlist-arm.patch,
        unwind-arm.patch
        拷贝到/home/zhaolei/arm9/build-tools/3.2目录下。
       
        将linux-2.4.18.tar.bz2和patch-2.4.18-rmk7.bz2拷贝到/home/zhaolei/arm9/kernel目录下。
       
        好了,开始安装工具链了。
               
        1. 安装内核源文件
                目录: /home/zhaolei/arm9/kernel
               
                a) 解压 linux-2.4.18内核
                        tar xfvj linux-2.4.18.tar.bz2
               
                b) 打rmk7的补丁
                        bzcat patch-2.4.18-rmk7.bz2 | (cd linux; patch -p1)
               
                c) 改名成 linux-2.4.18-rmk7
                        mv linux linux-2.4.18-rmk7
                       
                c) 修改arch
                        修改Makefile中的ARCH := arm
               
                d) make menuconfig
                        指定一下系统用SA1100吧,保存退出
               
                e) 修改include/asm/下的arch和proc链接
                        将arch链接到arch-sa1100,proc链接到proc-armv       
       
        2. 安装binutils
                目录:/home/zhaolei/arm9/build-tools/3.2
               
                a) 解压缩
                        tar xfvj binutils-2.13.tar.bz2
               
                b) 配置
                        ./configure --target=arm-linux --prefix=/home/zhaolei/arm9/tools/3.2 --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include
               
                c) 编译
                        make
               
                d) 安装
                        make install
               
                e) 检查
                        arm-linux-ld --version
                       
        3. 安装启动编译器boot-gcc
                目录:/home/zhaolei/arm9/build-tools/3.2
               
                a) 解压缩
                        tar xfvz gcc-3.2.tar.gz
               
                b) 修改
                        文件:gcc-3.2/gcc/config/arm/t-linux
                        源:
                        TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC
                        目的:
                        TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h
                        在文件末尾新建行添加:
                        T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h
               
                c) 拷贝一份,名为boot-gcc-3.2
                        cp gcc-3.2 boot-gcc-3.2 -r
               
                d) 配置
                        配置boot-gcc,进入boot-gcc-3.2目录
                        ./configure --target=arm-linux --prefix=/home/zhaolei/arm9/tools/3.2 --enable-languages=c --disable-threads --disable-shared --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include
               
                e) 编译
                        make
               
                f) 安装
                        make install
                       
                g) 检查
                        arm-linux-gcc --version
                       
        4. 安装glibc
                目录:/home/zhaolei/arm9/build-tools/3.2
               
                a) 解压缩
                        tar xfvz glibc-2.2.5.tar.gz
                        tar xfvz glibc-linuxthreads-2.2.5.tar.gz -C glibc-2.2.5
               
                b) 补丁
                        cat errlist-arm.patch | (cd glibc-2.2.5 ; patch -p1)
                        cat unwind-arm.patch | (cd glibc-2.2.5 ; patch -p1)
               
                c) 配置
                        CC=arm-linux-gcc ./configure arm-linux --build=i686-pc-linux-gnu --prefix=/home/zhaolei/arm9/tools/3.2/arm-linux --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include --enable-add-ons=linuxthreads --program-prefix=arm-linux-
               
                d) 编译
                        make
               
                e) 安装
                        make install

       
        5. 安装c,c++编译器
                目录:/home/zhaolei/arm9/build-tools/3.2/gcc-3.2
               
                a) 配置
                        ./configure --target=arm-linux --prefix=/home/zhaolei/arm9/tools/3.2 --enable-languages=c,c++ --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include
               
                b) 编译
                        make
               
                c) 安装
                        make install
                       
                d) 检查
                        arm-linux-g++ --version
               
        6. 为目标板重新编译glibc,取得ld.so
                因为第4步编译的glibc指定了--prefix=/home/zhaolei/...,所以到了目标板会出现ld.so向目标板的/home/zhaolei/...的目录下寻找库文件。
                通常库文件存放在目标板的/lib目录下,当然ld.so是找不到了。
                这一步的目的,为目标板再编译一个ld.so,让他去/lib下找动态链接库文件。
       
                a) 进入glibc-2.2.5目录
               
                b) make clean
               
                c) 配置
                        CC=arm-linux-gcc ./configure arm-linux --build=i686-pc-linux-gnu --prefix=/usr --with-headers=/home/zhaolei/arm9/kernel/linux-2.4.18-rmk7/include --enable-add-ons=linuxthreads --program-prefix=arm-linux-

                d) make
               
                e) 将ld.so拷贝出来,放到rootfs中/lib下。

               
                注意,千万不要make install,否则,你的本地glibc就有可能会被交叉编译的glibc给覆盖了。               
               
        好了,收工啦!
 楼主| 发表于 2005-10-24 20:38:06 | 显示全部楼层
附Patch

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2005-10-24 20:38:41 | 显示全部楼层
附patch

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2005-10-26 22:15:03 | 显示全部楼层
Cool,感谢楼主的辛勤劳动
回复

使用道具 举报

发表于 2005-10-27 20:54:33 | 显示全部楼层
ding !
太好了,写得很详细!
回复

使用道具 举报

发表于 2005-10-28 20:37:07 | 显示全部楼层
我编译GCC出错
哪位兄弟帮我看看
/root/linux1/tools/gcc-3.4.4/gcc/xgcc -B/root/linux1/tools/gcc-3.4.4/gcc/ -B/root/linux1/tools/temp/build/arm-linux/bin/ -B/root/linux1/tools/temp/build/arm-linux/lib/ -isystem /root/linux1/tools/temp/build/arm-linux/include -isystem /root/linux1/tools/temp/build/arm-linux/sys-include -O2 -DIN_GCC -DCROSS_COMPILE   -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include  -I. -I. -I. -I./. -I./../include   -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-unit-at-a-time  \
   -c ./crtstuff.c -DCRT_BEGIN \
  -o crtbegin.o
In file included from ./crtstuff.c:62:
./tsystem.h:79:19: stdio.h: 没有那个文件或目录
./tsystem.h:82:23: sys/types.h: 没有那个文件或目录
./tsystem.h:85:19: errno.h: 没有那个文件或目录
./tsystem.h:92:20: string.h: 没有那个文件或目录
./tsystem.h:93:20: stdlib.h: 没有那个文件或目录
./tsystem.h:94:20: unistd.h: 没有那个文件或目录
./tsystem.h:100:18: time.h: 没有那个文件或目录
make[1]: *** [crtbegin.o] 错误 1
make[1]: Leaving directory `/root/linux1/tools/gcc-3.4.4/gcc'
make: *** [all-gcc] 错误 2
[www@Co-Create gcc-3.4.4]
回复

使用道具 举报

发表于 2005-11-2 12:43:41 | 显示全部楼层
楼主辛苦,支持
回复

使用道具 举报

发表于 2005-11-29 18:02:04 | 显示全部楼层
在编译glibc的时候,要新建一个目录,在新建的目录里运行./configure
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:38 , Processed in 0.038998 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表