Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1761037
  • 博文数量: 100
  • 博客积分: 10122
  • 博客等级: 上将
  • 技术积分: 4092
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-04 20:28
文章分类

全部博文(100)

文章存档

2010年(2)

2009年(28)

2008年(70)

我的朋友

分类: LINUX

2008-09-30 06:12:43

对于建立交叉编译器,crosstool() 以及 crosstool-NG() 通常可以满足你所有需求。 我建立的这个工具相对简单,只是为了追踪较新的gcc/glibc版本和满足我能测试到的平台。

下载地址
Git Repository:
WebGit:

$ git-clone

编译方法
1. 确定你系统安装有 gmp 的开发包, 如 Fedora 下称作: gmp-devel。 这个包在编译完整的 gcc 时将用1到。

2. 添加配置文件到ycross软件的 etc 子目录下,比如:
$ cat etc/linux-2.4.config
BUILD_ROOT=~/tmp
KERNEL_TYPE=2.4
KERNEL_DIR=~/mydoc/prog/linux/sources/linux-2.4
GCC_LANGS=c,c++

$ cat etc/linux-2.6.config
BUILD_ROOT=~/tmp
KERNEL_TYPE=2.6
KERNEL_DIR=~/mydoc/prog/linux/sources/linux-2.6
GCC_LANGS=c,c++

3. 下载源代码
运行:
$ tools/ycross-download-src
即开始下载所有缺少的源代码

4. 选择rc, 开始编译
所有rc:
$ ls rc/*.rc
rc/arm-elf_freestanding.rc
rc/arm-linux-gnueabi_glibc_nptl_softfloat.rc
rc/arm-linux-gnueabi_glibc_nptl_softfp-vfp.rc
rc/mipsel-elf_freestanding.rc
rc/mipsel-linux-gnu_glibc_linuxthreads_softfloat.rc
rc/mipsel-linux-gnu_glibc_nptl_softfloat.rc
rc/powerpc-elf_freestanding.rc
rc/powerpc-linux-gnu_glibc_nptl_hardfloat.rc
rc/powerpc-linux-gnu_glibc_nptl_softfloat.rc

这些 rc 分为两类:
一种是 ARCH-elf_freestanding.rc, 这种只编译 gcc 和 libgcc, 没有 C 库和软件 float 支持。通常用于编译 bootloader,不运行在操作系统下的程序以及编译器等。
另一种是 ARCH-OS_glibc_THREADING-MODEL_FLOAT-TYPE, 这种编译完整的 gcc 和 glibc。 可以选择线程模型和浮点类型。

比如运行:
$ tools/ycross-build-toolchain arm-linux-gnueabi_glibc_nptl_softfloat linux-2.6
+ start_build arm-linux-gnueabi_glibc_nptl_softfloat linux-2.6
++ build_checkrc
+- build_checkrc
++ type build_all
build_all is a function
build_all ()
{
    dodo build_cleanup_all;
    dodo build_prepare_sources;
    dodo build_binutils;
    dodo build_install_kernel_headers;
    dodo build_install_glibc_headers;
    dodo build_stage1_gcc;
    dodo build_glibc;
    dodo build_gcc;
    dodo build_install_gcclibs;
    dodo build_cleanup
}
+- type build_all
- start_build arm-linux-gnueabi_glibc_nptl_softfloat linux-2.6

build_* 是所有可以运行的命令, 如果没有指定命令则打印 build_all 命令。

所以:
$ tools/ycross-build-toolchain arm-linux-gnueabi_glibc_nptl_softfloat linux-2.6 all

就可以开始编译 arm 平台, gnueabi 的 nptl glibc, 并且编译器默认使用软件浮点库。

编译后
编译后,所有编译器都在 targets 目录下:

$ ls targets/
arm-elf_freestanding
arm-linux-gnueabi_glibc_nptl_softfloat
arm-linux-gnueabi_glibc_nptl_softfp-vfp
mipsel-elf_freestanding
mipsel-linux-gnu_glibc_linuxthreads_softfloat
mipsel-linux-gnu_glibc_nptl_softfloat
powerpc-elf_freestanding
powerpc-linux-gnu_glibc_nptl_hardfloat

如果编译了 glibc, 目标平台的glibc则在对应target的 sysroot 下,比如:
$ ls targets/arm-linux-gnueabi_glibc_nptl_softfp-vfp/sysroot/
etc  lib  sbin  usr

编译器和binutils支持 --sysroot 选项,如果你想拷贝整个 sysroot 并且编译一个基于这个glibc的新的 linux,可以拷贝整个sysroot目录然后用--sysroot 指定路径编译和链接。


阅读(1264) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~