对于建立交叉编译器,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 指定路径编译和链接。
阅读(1273) | 评论(0) | 转发(0) |