进行嵌入式Linux开发过程中,第一步通常就是选择交叉编译工具链(toolchain)。toolchain也许来自于开发板提供商,但有时候我们需要自定义某些功能,比如选择某一个特定版本的C library,或者让gcc的编译针对某一个特定平台进行优化,这时候厂商提供的toolchain也许就不能满足我们的需求,这时候就需要自行做成toolchain。
自定义toolchain的部件中最重要有3个组成部分:c library, gcc , 附带加一个gdb。
c library是以后需要搭建的系统的基础,几乎所有的软件都基于这个C library,因此创建toolchain过程中编译好的c library也会拷贝到目标系统中。
c library通常有 newlib, eglibc, glibc, uclibc 四种选择,各自对应不同的需求,前面3个通常用于有MMU的系统,最后一个用于没有MMU的系统。传统的linux发行版通常采用glibc,这是gnu的c library,大而全。eglibc针对嵌入式进行优化,并且二进制兼容glibc,目前的debian和ubuntu已经从glibc转移到eglibc。
编译器的选择几乎就只有gcc了,只是选择哪一个版本的问题。linaro 项目针对arm平台优化kernel,编译工具,部分软件,因此可以采用linaro项目优化过的gcc从中获益性能的提升。
gdb可以参考linaro项目优化过的gdb版本,并且采用高版本的gdb可以更好的和kgdb配合调试linux内核。
做成toolchain的过程很无趣,如果想要手工做成,体验这个过程的话,可以参考linuxfromscratch项目的clfs部分。其中的重点就是需要多次编译gcc。当然我们也可以采用自动化工具自行编译toolchain,crosstool-ng项目就是做这个事情的。它采用和编译内核一样的配置菜单进行配置,可以选择c library,gcc,gdb等等,并自动下载,编译生成toolchain。
需要注意的是,crosstool-ng 最好采用开发板本,这样才能支持linaro项目中的新近gcc或者gdb。当然 crosstool-ng 的开发版本需要自行编译了,不过很简单,configure ,make,make install 就ok的。
假定 crosstool-ng 已经编译到系统中,toolchain编译到/opt/gcc47-eglibc216-cortexa8-hardfloat目录,crosstool-ng 的工作目录是/root/CT-NG, 登录用户是 root。
!! crosstool-ng 不建议使用 root 用户编译toolchain,你可以为 /opt/gcc47-eglibc216-cortexa8-hardfloat 设定某一个普通用户可写权限的话,就可以用普通用户编译了。
在/root/CT-NG目录下,运行 #ct-ng menuconfig 进行配置,配置的结果会保存在 /root/CT-NG/.config 文件中,因此你也可以直接编辑 .config 这个文件。
需要注意的是:
如果想要编译 linaro 项目的gcc和gdb,就需要选择 CT_EXPERIMENTAL。
如果编译到某一步失败,希望修改好以后继续从这一步开始的话,就需要让 crosstool-ng 记录进行到哪一步了,这个需要选择 CT_DEBUG_CT 和 CT_DEBUG_CT_SAVE_STEPS。
通过 #ct-ng -j 4 build 重新全部编译整个toolchain。-j 4 是 make 过程中, 4路并发同时编译,这在多核系统中能加快编译速度。
当整个toolchain编译完成后,/opt/gcc47-eglibc216-cortexa8-hardfloat/arm-unknown-linux-gnueabi/sysroot 目录就是以后目标系统的根文件系统的基础部分。
通过 #ct-ng list-steps 显示一共都有哪些步骤。
------------------------------------------------------------------------------------
root@Seagate:/root/CT-NG# ct-ng list-steps
Available build steps, in order:
- libc_check_config
- companion_libs_for_build
- binutils_for_build
- companion_libs_for_host
- binutils_for_host
- cc_core_pass_1
- kernel_headers
- libc_start_files
- cc_core_pass_2
- libc
- cc_for_build
- cc_for_host
- libc_finish
- libelf_for_target
- binutils_for_target
- debug
- test_suite
- finish
Use "<step>" as action to execute only that step.
Use "+<step>" as action to execute up to that step.
Use "<step>+" as action to execute from that step onward.
------------------------------------------------------------------------------------
我的开发板是 Tiny210v2 ,ARM cortex-a8 平台,因此在crosstool-ng的配置菜单中,选择 eglibc,gcc-linaro, gdb-linaro 3个最重要的部件,并且针对 armv7 指令集和 cortex-a8 以及硬件浮点运算(hardfloat) neon进行优化。下面是.config 配置文件的内容:
你也可以将这个 .config 拷贝到 /root/CT-NG 目录中,然后通过 #ct-ng menuconfig 查看图形化的配置情况。
------------------------------------------------------------------------------------
#
# Automatically generated make config: don't edit
# crosstool-NG hg+unknown-20130103.094521 Configuration
# Thu Jan 3 14:20:07 2013
#
CT_CONFIGURE_has_xz=y
CT_CONFIGURE_has_svn=y
CT_MODULES=y
#
# Paths and misc options
#
#
# crosstool-NG behavior
#
# CT_OBSOLETE is not set
CT_EXPERIMENTAL=y
CT_DEBUG_CT=y
# CT_DEBUG_PAUSE_STEPS is not set
CT_DEBUG_CT_SAVE_STEPS=y
CT_DEBUG_CT_SAVE_STEPS_GZIP=y
# CT_NO_OVERIDE_LC_MESSAGES is not set
# CT_DEBUG_INTERACTIVE is not set
#
# Paths
#
CT_LOCAL_TARBALLS_DIR="/opt/S5PV210/source/toolchain/crosstool-ng"
CT_SAVE_TARBALLS=y
CT_CUSTOM_LOCATION_ROOT_DIR=""
CT_WORK_DIR="${CT_TOP_DIR}/.build"
CT_PREFIX_DIR="/opt/gcc47-eglibc216-cortexa8-hardfloat"
CT_INSTALL_DIR="${CT_PREFIX_DIR}"
CT_RM_RF_PREFIX_DIR=y
CT_REMOVE_DOCS=y
CT_INSTALL_DIR_RO=y
CT_STRIP_ALL_TOOLCHAIN_EXECUTABLES=y
#
# Downloading
#
# CT_FORBID_DOWNLOAD is not set
# CT_FORCE_DOWNLOAD is not set
CT_CONNECT_TIMEOUT=10
# CT_ONLY_DOWNLOAD is not set
# CT_USE_MIRROR is not set
#
# Extracting
#
# CT_FORCE_EXTRACT is not set
CT_OVERIDE_CONFIG_GUESS_SUB=y
# CT_ONLY_EXTRACT is not set
CT_PATCH_BUNDLED=y
# CT_PATCH_LOCAL is not set
# CT_PATCH_BUNDLED_LOCAL is not set
# CT_PATCH_LOCAL_BUNDLED is not set
# CT_PATCH_BUNDLED_FALLBACK_LOCAL is not set
# CT_PATCH_LOCAL_FALLBACK_BUNDLED is not set
# CT_PATCH_NONE is not set
CT_PATCH_ORDER="bundled"
#
# Build behavior
#
CT_PARALLEL_JOBS=4
CT_LOAD=0
CT_USE_PIPES=y
CT_EXTRA_CFLAGS_FOR_BUILD=""
CT_EXTRA_LDFLAGS_FOR_BUILD=""
CT_EXTRA_CFLAGS_FOR_HOST=""
CT_EXTRA_LDFLAGS_FOR_HOST=""
# CT_CONFIG_SHELL_SH is not set
# CT_CONFIG_SHELL_ASH is not set
CT_CONFIG_SHELL_BASH=y
# CT_CONFIG_SHELL_CUSTOM is not set
CT_CONFIG_SHELL="${bash}"
#
# Logging
#
# CT_LOG_ERROR is not set
# CT_LOG_WARN is not set
# CT_LOG_INFO is not set
CT_LOG_EXTRA=y
# CT_LOG_ALL is not set
# CT_LOG_DEBUG is not set
CT_LOG_LEVEL_MAX="EXTRA"
# CT_LOG_SEE_TOOLS_WARN is not set
CT_LOG_PROGRESS_BAR=y
CT_LOG_TO_FILE=y
CT_LOG_FILE_COMPRESS=y
#
# Target options
#
CT_ARCH="arm"
CT_ARCH_SUPPORTS_BOTH_MMU=y
CT_ARCH_SUPPORTS_BOTH_ENDIAN=y
CT_ARCH_SUPPORTS_32=y
CT_ARCH_SUPPORTS_WITH_ARCH=y
CT_ARCH_SUPPORTS_WITH_CPU=y
CT_ARCH_SUPPORTS_WITH_TUNE=y
CT_ARCH_SUPPORTS_WITH_FLOAT=y
CT_ARCH_SUPPORTS_WITH_FPU=y
CT_ARCH_SUPPORTS_SOFTFP=y
CT_ARCH_DEFAULT_HAS_MMU=y
CT_ARCH_DEFAULT_LE=y
CT_ARCH_DEFAULT_32=y
CT_ARCH_ARCH="armv7-a"
CT_ARCH_CPU="cortex-a8"
CT_ARCH_TUNE="cortex-a8"
CT_ARCH_FPU="neon"
# CT_ARCH_BE is not set
CT_ARCH_LE=y
CT_ARCH_32=y
CT_ARCH_BITNESS=32
CT_ARCH_FLOAT_HW=y
# CT_ARCH_FLOAT_SW is not set
CT_TARGET_CFLAGS=""
CT_TARGET_LDFLAGS=""
# CT_ARCH_alpha is not set
CT_ARCH_arm=y
# CT_ARCH_avr32 is not set
# CT_ARCH_blackfin is not set
# CT_ARCH_m68k is not set
# CT_ARCH_microblaze is not set
# CT_ARCH_mips is not set
# CT_ARCH_powerpc is not set
# CT_ARCH_s390 is not set
# CT_ARCH_sh is not set
# CT_ARCH_sparc is not set
# CT_ARCH_x86 is not set
CT_ARCH_alpha_AVAILABLE=y
CT_ARCH_arm_AVAILABLE=y
CT_ARCH_avr32_AVAILABLE=y
CT_ARCH_blackfin_AVAILABLE=y
CT_ARCH_m68k_AVAILABLE=y
CT_ARCH_microblaze_AVAILABLE=y
CT_ARCH_mips_AVAILABLE=y
CT_ARCH_powerpc_AVAILABLE=y
CT_ARCH_s390_AVAILABLE=y
CT_ARCH_sh_AVAILABLE=y
CT_ARCH_sparc_AVAILABLE=y
CT_ARCH_x86_AVAILABLE=y
#
# Generic target options
#
# CT_MULTILIB is not set
CT_ARCH_USE_MMU=y
CT_ARCH_ENDIAN="little"
#
# Target optimisations
#
# CT_ARCH_FLOAT_SOFTFP is not set
CT_ARCH_FLOAT="hard"
#
# arm other options
#
CT_ARCH_ARM_MODE="arm"
CT_ARCH_ARM_MODE_ARM=y
# CT_ARCH_ARM_MODE_THUMB is not set
# CT_ARCH_ARM_INTERWORKING is not set
CT_ARCH_ARM_EABI=y
#
# Toolchain options
#
#
# General toolchain options
#
CT_FORCE_SYSROOT=y
CT_USE_SYSROOT=y
CT_SYSROOT_NAME="sysroot"
CT_SYSROOT_DIR_PREFIX=""
CT_WANTS_STATIC_LINK=y
# CT_STATIC_TOOLCHAIN is not set
CT_TOOLCHAIN_PKGVERSION="S5PV210"
CT_TOOLCHAIN_BUGURL=""
#
# Tuple completion and aliasing
#
CT_TARGET_VENDOR="unknown"
CT_TARGET_ALIAS_SED_EXPR=""
CT_TARGET_ALIAS="arm-linux"
#
# Toolchain type
#
# CT_NATIVE is not set
CT_CROSS=y
# CT_CROSS_NATIVE is not set
# CT_CANADIAN is not set
CT_TOOLCHAIN_TYPE="cross"
#
# Build system
#
CT_BUILD=""
CT_BUILD_PREFIX=""
CT_BUILD_SUFFIX=""
#
# Misc options
#
CT_TOOLCHAIN_ENABLE_NLS=y
#
# Operating System
#
CT_KERNEL_SUPPORTS_SHARED_LIBS=y
CT_KERNEL="linux"
CT_KERNEL_VERSION="2.6.36.4"
# CT_KERNEL_bare_metal is not set
CT_KERNEL_linux=y
CT_KERNEL_bare_metal_AVAILABLE=y
CT_KERNEL_linux_AVAILABLE=y
# CT_KERNEL_V_3_7 is not set
# CT_KERNEL_V_3_6_10 is not set
# CT_KERNEL_V_3_5_7 is not set
# CT_KERNEL_V_3_4_23 is not set
# CT_KERNEL_V_3_3_8 is not set
# CT_KERNEL_V_3_2_35 is not set
# CT_KERNEL_V_3_1_10 is not set
# CT_KERNEL_V_3_0_56 is not set
# CT_KERNEL_V_2_6_39_4 is not set
# CT_KERNEL_V_2_6_38_8 is not set
# CT_KERNEL_V_2_6_37_6 is not set
CT_KERNEL_V_2_6_36_4=y
# CT_KERNEL_V_2_6_33_20 is not set
# CT_KERNEL_V_2_6_32_60 is not set
# CT_KERNEL_V_2_6_31_14 is not set
# CT_KERNEL_V_2_6_27_62 is not set
# CT_KERNEL_LINUX_CUSTOM is not set
CT_KERNEL_windows_AVAILABLE=y
#
# Common kernel options
#
CT_SHARED_LIBS=y
#
# linux other options
#
CT_KERNEL_LINUX_VERBOSITY_0=y
# CT_KERNEL_LINUX_VERBOSITY_1 is not set
# CT_KERNEL_LINUX_VERBOSITY_2 is not set
CT_KERNEL_LINUX_VERBOSE_LEVEL=0
CT_KERNEL_LINUX_INSTALL_CHECK=y
#
# Binary utilities
#
CT_ARCH_BINFMT_ELF=y
CT_BINUTILS="binutils"
CT_BINUTILS_binutils=y
#
# GNU binutils
#
CT_BINUTILS_V_2_22=y
# CT_BINUTILS_V_2_21_53 is not set
# CT_BINUTILS_V_2_21_1a is not set
# CT_BINUTILS_V_2_20_1a is not set
# CT_BINUTILS_V_2_19_1a is not set
# CT_BINUTILS_V_2_18a is not set
# CT_BINUTILS_CUSTOM is not set
CT_BINUTILS_VERSION="2.22"
CT_BINUTILS_2_22_or_later=y
CT_BINUTILS_2_21_or_later=y
CT_BINUTILS_2_20_or_later=y
CT_BINUTILS_2_19_or_later=y
CT_BINUTILS_2_18_or_later=y
CT_BINUTILS_HAS_HASH_STYLE=y
CT_BINUTILS_HAS_GOLD=y
CT_BINUTILS_GOLD_SUPPORTS_ARCH=y
CT_BINUTILS_HAS_PLUGINS=y
CT_BINUTILS_HAS_PKGVERSION_BUGURL=y
CT_BINUTILS_FORCE_LD_BFD=y
CT_BINUTILS_LINKER_LD=y
# CT_BINUTILS_LINKER_LD_GOLD is not set
# CT_BINUTILS_LINKER_GOLD_LD is not set
CT_BINUTILS_LINKERS_LIST="ld"
CT_BINUTILS_LINKER_DEFAULT="bfd"
# CT_BINUTILS_PLUGINS is not set
CT_BINUTILS_EXTRA_CONFIG_ARRAY=""
CT_BINUTILS_FOR_TARGET=y
CT_BINUTILS_FOR_TARGET_IBERTY=y
CT_BINUTILS_FOR_TARGET_BFD=y
#
# binutils other options
#
#
# C compiler
#
CT_CC="gcc"
CT_CC_VERSION="linaro-4.7-2012.12"
CT_CC_CORE_PASSES_NEEDED=y
CT_CC_gcc=y
CT_CC_GCC_SHOW_LINARO=y
CT_CC_V_linaro_4_7_2012_12=y
# CT_CC_V_4_7_2 is not set
# CT_CC_V_4_7_1 is not set
# CT_CC_V_4_7_0 is not set
# CT_CC_V_linaro_4_6_2012_12 is not set
# CT_CC_V_4_6_3 is not set
# CT_CC_V_4_6_2 is not set
# CT_CC_V_4_6_1 is not set
# CT_CC_V_4_6_0 is not set
# CT_CC_V_linaro_4_5_2012_03 is not set
# CT_CC_V_4_5_3 is not set
# CT_CC_V_4_5_2 is not set
# CT_CC_V_4_5_1 is not set
# CT_CC_V_4_5_0 is not set
# CT_CC_V_linaro_4_4_2011_02_0 is not set
# CT_CC_V_4_4_7 is not set
# CT_CC_V_4_4_6 is not set
# CT_CC_V_4_4_5 is not set
# CT_CC_V_4_4_4 is not set
# CT_CC_V_4_4_3 is not set
# CT_CC_V_4_4_2 is not set
# CT_CC_V_4_4_1 is not set
# CT_CC_V_4_4_0 is not set
# CT_CC_V_4_3_6 is not set
# CT_CC_V_4_3_5 is not set
# CT_CC_V_4_3_4 is not set
# CT_CC_V_4_3_3 is not set
# CT_CC_V_4_3_2 is not set
# CT_CC_V_4_3_1 is not set
# CT_CC_V_4_2_4 is not set
# CT_CC_V_4_2_2 is not set
# CT_CC_CUSTOM is not set
CT_CC_GCC_4_2_or_later=y
CT_CC_GCC_4_3_or_later=y
CT_CC_GCC_4_4_or_later=y
CT_CC_GCC_4_5_or_later=y
CT_CC_GCC_4_6_or_later=y
CT_CC_GCC_4_7=y
CT_CC_GCC_4_7_or_later=y
CT_CC_GCC_HAS_GRAPHITE=y
CT_CC_GCC_HAS_LTO=y
CT_CC_GCC_HAS_PKGVERSION_BUGURL=y
CT_CC_GCC_HAS_BUILD_ID=y
CT_CC_GCC_HAS_LNK_HASH_STYLE=y
CT_CC_GCC_USE_GMP_MPFR=y
CT_CC_GCC_USE_PPL_CLOOG=y
CT_CC_GCC_USE_MPC=y
CT_CC_GCC_HAS_LIBQUADMATH=y
# CT_CC_LANG_FORTRAN is not set
CT_CC_SUPPORT_CXX=y
CT_CC_SUPPORT_FORTRAN=y
CT_CC_SUPPORT_JAVA=y
CT_CC_SUPPORT_ADA=y
CT_CC_SUPPORT_OBJC=y
CT_CC_SUPPORT_OBJCXX=y
#
# Additional supported languages:
#
CT_CC_LANG_CXX=y
# CT_CC_LANG_JAVA is not set
# CT_CC_LANG_ADA is not set
# CT_CC_LANG_OBJC is not set
# CT_CC_LANG_OBJCXX is not set
CT_CC_LANG_OTHERS=""
#
# gcc other options
#
CT_CC_ENABLE_CXX_FLAGS=""
CT_CC_CORE_EXTRA_CONFIG_ARRAY=""
CT_CC_EXTRA_CONFIG_ARRAY=""
CT_CC_STATIC_LIBSTDCXX=y
# CT_CC_GCC_SYSTEM_ZLIB is not set
#
# Optimisation features
#
CT_CC_GCC_USE_GRAPHITE=y
CT_CC_GCC_USE_LTO=y
#
# Settings for libraries running on target
#
CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y
# CT_CC_GCC_LIBMUDFLAP is not set
# CT_CC_GCC_LIBGOMP is not set
# CT_CC_GCC_LIBSSP is not set
# CT_CC_GCC_LIBQUADMATH is not set
#
# Misc. obscure options.
#
CT_CC_CXA_ATEXIT=y
# CT_CC_GCC_DISABLE_PCH is not set
# CT_CC_GCC_SJLJ_EXCEPTIONS is not set
# CT_CC_GCC_LDBL_128 is not set
# CT_CC_GCC_BUILD_ID is not set
CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y
# CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set
# CT_CC_GCC_LNK_HASH_STYLE_GNU is not set
# CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set
CT_CC_GCC_LNK_HASH_STYLE=""
#
# C-library
#
CT_LIBC="eglibc"
CT_LIBC_VERSION="2_16"
CT_LIBC_eglibc=y
# CT_LIBC_glibc is not set
# CT_LIBC_uClibc is not set
CT_LIBC_eglibc_AVAILABLE=y
CT_LIBC_EGLIBC_V_2_16=y
# CT_LIBC_EGLIBC_V_2_15 is not set
# CT_LIBC_EGLIBC_V_2_14 is not set
# CT_LIBC_EGLIBC_V_2_13 is not set
# CT_LIBC_EGLIBC_V_2_12 is not set
# CT_LIBC_EGLIBC_V_2_11 is not set
# CT_LIBC_EGLIBC_V_2_10 is not set
# CT_LIBC_EGLIBC_V_2_9 is not set
# CT_LIBC_EGLIBC_V_TRUNK is not set
CT_LIBC_EGLIBC_2_16_or_later=y
CT_LIBC_EGLIBC_2_15_or_later=y
CT_LIBC_EGLIBC_2_14_or_later=y
CT_LIBC_EGLIBC_2_13_or_later=y
CT_LIBC_EGLIBC_2_12_or_later=y
CT_LIBC_EGLIBC_2_11_or_later=y
CT_LIBC_EGLIBC_2_10_or_later=y
CT_LIBC_EGLIBC_2_9_or_later=y
CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL=y
CT_EGLIBC_REVISION="HEAD"
# CT_EGLIBC_HTTP is not set
# CT_EGLIBC_CHECKOUT is not set
# CT_EGLIBC_OPT_SIZE is not set
# CT_EGLIBC_CUSTOM_CONFIG is not set
CT_LIBC_glibc_AVAILABLE=y
CT_LIBC_mingw_AVAILABLE=y
CT_LIBC_newlib_AVAILABLE=y
CT_LIBC_none_AVAILABLE=y
CT_LIBC_uClibc_AVAILABLE=y
CT_LIBC_SUPPORT_THREADS_ANY=y
CT_LIBC_SUPPORT_NPTL=y
CT_LIBC_SUPPORT_LINUXTHREADS=y
CT_THREADS="nptl"
#
# Common C library options
#
CT_THREADS_NPTL=y
# CT_THREADS_LINUXTHREADS is not set
CT_LIBC_XLDD=y
#
# eglibc other options
#
CT_LIBC_GLIBC_MAY_FORCE_PORTS=y
CT_LIBC_glibc_familly=y
CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY=""
CT_LIBC_GLIBC_CONFIGPARMS=""
CT_LIBC_GLIBC_EXTRA_CFLAGS=""
CT_LIBC_EXTRA_CC_ARGS=""
# CT_LIBC_ENABLE_FORTIFIED_BUILD is not set
# CT_LIBC_DISABLE_VERSIONING is not set
CT_LIBC_OLDEST_ABI=""
CT_LIBC_GLIBC_FORCE_UNWIND=y
CT_LIBC_GLIBC_USE_PORTS=y
CT_LIBC_ADDONS_LIST=""
#
# WARNING !!!
#
#
# For glibc >= 2.8, it can happen that the tarballs
#
#
# for the addons are not available for download.
#
#
# If that happens, bad luck... Try a previous version
#
#
# or try again later... :-(
#
CT_LIBC_LOCALES=y
# CT_LIBC_GLIBC_KERNEL_VERSION_NONE is not set
# CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS is not set
CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN=y
CT_LIBC_GLIBC_MIN_KERNEL_VERSION="2.6.12"
CT_LIBC_GLIBC_MIN_KERNEL="2.6.12"
#
# Debug facilities
#
CT_DEBUG_dmalloc=y
CT_DMALLOC_V_5_5_2=y
CT_DMALLOC_VERSION="5.5.2"
CT_DEBUG_duma=y
CT_DUMA_A=y
CT_DUMA_SO=y
CT_DUMA_V_2_5_15=y
CT_DUMA_VERSION="2_5_15"
CT_DEBUG_gdb=y
CT_GDB_CROSS=y
# CT_GDB_CROSS_STATIC is not set
# CT_GDB_CROSS_SIM is not set
CT_GDB_CROSS_PYTHON=y
CT_GDB_CROSS_EXTRA_CONFIG_ARRAY=""
CT_GDB_NATIVE=y
# CT_GDB_NATIVE_STATIC is not set
CT_GDB_GDBSERVER=y
CT_GDB_GDBSERVER_HAS_IPA_LIB=y
CT_GDB_GDBSERVER_STATIC=y
#
# gdb version
#
CT_DEBUG_GDB_SHOW_LINARO=y
CT_GDB_V_linaro_7_5_2012_12_1=y
# CT_GDB_V_linaro_7_4_2012_06 is not set
# CT_GDB_V_7_4_1 is not set
# CT_GDB_V_7_4 is not set
# CT_GDB_V_linaro_7_3_2011_12 is not set
# CT_GDB_V_7_3_1 is not set
# CT_GDB_V_7_3a is not set
# CT_GDB_V_linaro_7_2_2011_05_0 is not set
# CT_GDB_V_7_2a is not set
# CT_GDB_V_7_1a is not set
# CT_GDB_V_7_0_1a is not set
# CT_GDB_V_7_0a is not set
# CT_GDB_V_6_8a is not set
# CT_GDB_CUSTOM is not set
CT_GDB_7_2_or_later=y
CT_GDB_7_0_or_later=y
CT_GDB_HAS_PKGVERSION_BUGURL=y
CT_GDB_INSTALL_GDBINIT=y
CT_GDB_VERSION="linaro-7.5-2012.12-1"
CT_DEBUG_ltrace=y
CT_LTRACE_V_0_5_3=y
# CT_LTRACE_V_0_5_2 is not set
CT_LTRACE_VERSION="0.5.3"
CT_LTRACE_0_5_3_or_later=y
CT_DEBUG_strace=y
# CT_STRACE_V_4_6 is not set
# CT_STRACE_V_4_5_20 is not set
CT_STRACE_V_4_5_19=y
# CT_STRACE_V_4_5_18 is not set
CT_STRACE_VERSION="4.5.19"
#
# Companion libraries
#
CT_COMPLIBS_NEEDED=y
CT_GMP_NEEDED=y
CT_MPFR_NEEDED=y
CT_PPL_NEEDED=y
CT_CLOOG_NEEDED=y
CT_MPC_NEEDED=y
CT_COMPLIBS=y
CT_GMP=y
CT_MPFR=y
CT_PPL=y
CT_CLOOG=y
CT_MPC=y
CT_LIBELF_TARGET=y
CT_GMP_V_5_0_2=y
# CT_GMP_V_5_0_1 is not set
# CT_GMP_V_4_3_2 is not set
# CT_GMP_V_4_3_1 is not set
# CT_GMP_V_4_3_0 is not set
CT_GMP_VERSION="5.0.2"
CT_MPFR_V_3_1_0=y
# CT_MPFR_V_3_0_1 is not set
# CT_MPFR_V_3_0_0 is not set
# CT_MPFR_V_2_4_2 is not set
# CT_MPFR_V_2_4_1 is not set
# CT_MPFR_V_2_4_0 is not set
CT_MPFR_VERSION="3.1.0"
CT_PPL_V_0_11_2=y
# CT_PPL_V_0_11_1 is not set
# CT_PPL_V_0_11 is not set
# CT_PPL_V_0_10_2 is not set
CT_PPL_VERSION="0.11.2"
CT_PPL_0_11=y
CT_PPL_NEEDS_LIBPWL=y
CT_CLOOG_V_0_15_11=y
# CT_CLOOG_V_0_15_10 is not set
# CT_CLOOG_V_0_15_9 is not set
# CT_CLOOG_V_0_15_8 is not set
# CT_CLOOG_V_0_15_7 is not set
# CT_CLOOG_V_0_15_6 is not set
CT_CLOOG_VERSION="0.15.11"
CT_CLOOG_0_15_1x=y
CT_CLOOG_NEEDS_AUTORECONF=y
CT_MPC_V_0_9=y
# CT_MPC_V_0_8_2 is not set
# CT_MPC_V_0_8_1 is not set
# CT_MPC_V_0_7 is not set
CT_MPC_VERSION="0.9"
#
# libelf version needed to build for target
#
CT_LIBELF_V_0_8_13=y
# CT_LIBELF_V_0_8_12 is not set
CT_LIBELF_VERSION="0.8.13"
#
# Companion libraries common options
#
# CT_COMPLIBS_CHECK is not set
#
# Companion tools
#
#
# READ HELP before you say 'Y' below !!!
#
# CT_COMP_TOOLS is not set
#
# Test suite
#
# CT_TEST_SUITE_GCC is not set
------------------------------------------------------------------------------------
编译的过程很顺利,下面是整个编译过程的log:
------------------------------------------------------------------------------------
root@Seagate:/root/CT-NG# ct-ng -j 4 build
[INFO ] Performing some trivial sanity checks
[INFO ] Build started 20130104.093325
[INFO ] Building environment variables
[EXTRA] Preparing working directories
[EXTRA] Installing user-supplied crosstool-NG configuration
[EXTRA] =================================================================
[EXTRA] Dumping internal crosstool-NG configuration
[EXTRA] Building a toolchain for:
[EXTRA] build = i686-pc-linux-gnu
[EXTRA] host = i686-pc-linux-gnu
[EXTRA] target = arm-unknown-linux-gnueabi
[EXTRA] Dumping internal crosstool-NG configuration: done in 0.08s (at 00:02)
[INFO ] =================================================================
[INFO ] Retrieving needed toolchain components' tarballs
[INFO ] Retrieving needed toolchain components' tarballs: done in 0.38s (at 00:02)
[INFO ] =================================================================
[INFO ] Extracting and patching toolchain components
[EXTRA] Extracting 'linux-2.6.36.4'
[EXTRA] Patching 'linux-2.6.36.4'
[EXTRA] Extracting 'gmp-5.0.2'
[EXTRA] Patching 'gmp-5.0.2'
[EXTRA] Extracting 'mpfr-3.1.0'
[EXTRA] Patching 'mpfr-3.1.0'
[EXTRA] Extracting 'ppl-0.11.2'
[EXTRA] Patching 'ppl-0.11.2'
[EXTRA] Extracting 'cloog-ppl-0.15.11'
[EXTRA] Patching 'cloog-ppl-0.15.11'
[EXTRA] Extracting 'mpc-0.9'
[EXTRA] Patching 'mpc-0.9'
[EXTRA] Extracting 'libelf-0.8.13'
[EXTRA] Patching 'libelf-0.8.13'
[EXTRA] Extracting 'binutils-2.22'
[EXTRA] Patching 'binutils-2.22'
[EXTRA] Extracting 'gcc-linaro-4.7-2012.12'
[EXTRA] Patching 'gcc-linaro-4.7-2012.12'
[EXTRA] Extracting 'eglibc-2_16'
[EXTRA] Patching 'eglibc-2_16'
[EXTRA] Extracting 'eglibc-ports-2_16'
[EXTRA] Patching 'eglibc-ports-2_16'
[EXTRA] Extracting 'eglibc-localedef-2_16'
[EXTRA] Patching 'eglibc-localedef-2_16'
[EXTRA] Extracting 'dmalloc-5.5.2'
[EXTRA] Patching 'dmalloc-5.5.2'
[EXTRA] Extracting 'duma_2_5_15'
[EXTRA] Patching 'duma-2_5_15'
[EXTRA] Extracting 'gdb-linaro-7.5-2012.12-1'
[EXTRA] Patching 'gdb-linaro-7.5-2012.12-1'
[EXTRA] Extracting 'ncurses-5.9'
[EXTRA] Patching 'ncurses-5.9'
[EXTRA] Extracting 'expat-2.1.0'
[EXTRA] Patching 'expat-2.1.0'
[EXTRA] Extracting 'ltrace-0.5.3'
[EXTRA] Patching 'ltrace-0.5.3'
[EXTRA] Extracting 'strace-4.5.19'
[EXTRA] Patching 'strace-4.5.19'
[INFO ] Extracting and patching toolchain components: done in 287.49s (at 04:50)
[EXTRA] Saving state to restart at step 'libc_check_config'...
[EXTRA] Saving state to restart at step 'companion_libs_for_build'...
[EXTRA] Saving state to restart at step 'binutils_for_build'...
[EXTRA] Saving state to restart at step 'companion_libs_for_host'...
[INFO ] =================================================================
[INFO ] Installing GMP for host
[EXTRA] Configuring GMP
[EXTRA] Building GMP
[EXTRA] Installing GMP
[INFO ] Installing GMP for host: done in 45.46s (at 05:37)
[INFO ] =================================================================
[INFO ] Installing MPFR for host
[EXTRA] Configuring MPFR
[EXTRA] Building MPFR
[EXTRA] Installing MPFR
[INFO ] Installing MPFR for host: done in 17.13s (at 05:54)
[INFO ] =================================================================
[INFO ] Installing PPL for host
[EXTRA] Configuring PPL
[EXTRA] Building PPL
[EXTRA] Installing PPL
[INFO ] Installing PPL for host: done in 167.13s (at 08:41)
[INFO ] =================================================================
[INFO ] Installing CLooG/PPL for host
[EXTRA] Configuring CLooG/ppl
[EXTRA] Building CLooG/ppl
[EXTRA] Installing CLooG/ppl
[INFO ] Installing CLooG/PPL for host: done in 11.30s (at 08:53)
[INFO ] =================================================================
[INFO ] Installing MPC for host
[EXTRA] Configuring MPC
[EXTRA] Building MPC
[EXTRA] Installing MPC
[INFO ] Installing MPC for host: done in 8.14s (at 09:01)
[EXTRA] Saving state to restart at step 'binutils_for_host'...
[INFO ] =================================================================
[INFO ] Installing binutils for host
[EXTRA] Configuring binutils
[EXTRA] Building binutils
[EXTRA] Installing binutils
[INFO ] Installing binutils for host: done in 58.25s (at 10:04)
[EXTRA] Saving state to restart at step 'cc_core_pass_1'...
[INFO ] =================================================================
[INFO ] Installing pass-1 core C compiler
[EXTRA] Configuring gcc
[EXTRA] Building gcc
[EXTRA] Installing gcc
[INFO ] Installing pass-1 core C compiler: done in 279.08s (at 14:47)
[EXTRA] Saving state to restart at step 'kernel_headers'...
[INFO ] =================================================================
[INFO ] Installing kernel headers
[EXTRA] Installing kernel headers
[EXTRA] Checking installed headers
[INFO ] Installing kernel headers: done in 7.87s (at 15:05)
[EXTRA] Saving state to restart at step 'libc_start_files'...
[INFO ] =================================================================
[INFO ] Installing C library headers & start files
[EXTRA] Configuring C library
[EXTRA] Installing C library headers
[EXTRA] Installing C library start files
[INFO ] Installing C library headers & start files: done in 31.14s (at 15:46)
[EXTRA] Saving state to restart at step 'cc_core_pass_2'...
[INFO ] =================================================================
[INFO ] Installing pass-2 core C compiler
[EXTRA] Configuring gcc
[EXTRA] Building gcc
[EXTRA] Installing gcc
[INFO ] Installing pass-2 core C compiler: done in 341.97s (at 21:39)
[EXTRA] Saving state to restart at step 'libc'...
[INFO ] =================================================================
[INFO ] Installing C library
[EXTRA] Configuring C library
[EXTRA] Building C library
[EXTRA] Installing C library
[EXTRA] Configuring C library localedef
[EXTRA] Building C library localedef
[EXTRA] Installing C library locales
[INFO ] Installing C library: done in 416.22s (at 28:51)
[EXTRA] Saving state to restart at step 'cc_for_build'...
[EXTRA] Saving state to restart at step 'cc_for_host'...
[INFO ] =================================================================
[INFO ] Installing final compiler
[EXTRA] Configuring gcc
[EXTRA] Building gcc
[EXTRA] Installing gcc
[INFO ] Installing final compiler: done in 465.04s (at 37:15)
[EXTRA] Saving state to restart at step 'libc_finish'...
[EXTRA] Saving state to restart at step 'libelf_for_target'...
[INFO ] =================================================================
[INFO ] Installing libelf for the target
[EXTRA] Configuring libelf
[EXTRA] Building libelf
[EXTRA] Installing libelf
[INFO ] Installing libelf for the target: done in 6.03s (at 38:59)
[EXTRA] Saving state to restart at step 'binutils_for_target'...
[INFO ] =================================================================
[INFO ] Installing binutils for target
[EXTRA] Configuring binutils for target
[EXTRA] Building binutils' libraries (libiberty bfd) for target
[EXTRA] Installing binutils' libraries (libiberty bfd) for target
[INFO ] Installing binutils for target: done in 47.82s (at 40:29)
[EXTRA] Saving state to restart at step 'debug'...
[INFO ] =================================================================
[INFO ] Installing dmalloc
[EXTRA] Configuring dmalloc
[EXTRA] Building dmalloc
[EXTRA] Installing dmalloc
[INFO ] Installing dmalloc: done in 9.60s (at 41:16)
[INFO ] =================================================================
[INFO ] Installing D.U.M.A.
[EXTRA] Copying sources
[EXTRA] Building libraries 'libduma.a libduma.so.0.0.0'
[EXTRA] Installing libraries 'libduma.a libduma.so.0.0.0'
[EXTRA] Installing shared library link
[EXTRA] Installing wrapper script
[INFO ] Installing D.U.M.A.: done in 2.76s (at 41:19)
[INFO ] =================================================================
[INFO ] Installing cross-gdb
[EXTRA] Configuring cross-gdb
[EXTRA] Building cross-gdb
[EXTRA] Installing cross-gdb
[EXTRA] Install '.gdbinit' template
[INFO ] Installing cross-gdb: done in 111.67s (at 43:11)
[INFO ] =================================================================
[INFO ] Installing native gdb
[EXTRA] Building static target ncurses
[EXTRA] Building static target expat
[EXTRA] Configuring native gdb
[EXTRA] Building native gdb
[EXTRA] Installing native gdb
[INFO ] Installing native gdb: done in 170.47s (at 46:01)
[INFO ] =================================================================
[INFO ] Installing gdbserver
[EXTRA] Configuring gdbserver
[EXTRA] Building gdbserver
[EXTRA] Installing gdbserver
[INFO ] Installing gdbserver: done in 19.98s (at 46:21)
[INFO ] =================================================================
[INFO ] Installing ltrace
[EXTRA] Copying sources to build dir
[EXTRA] Configuring ltrace
[EXTRA] Building ltrace
[EXTRA] Installing ltrace
[INFO ] Installing ltrace: done in 3.66s (at 46:25)
[INFO ] =================================================================
[INFO ] Installing strace
[EXTRA] Configuring strace
[EXTRA] Building strace
[EXTRA] Installing strace
[INFO ] Installing strace: done in 12.82s (at 46:38)
[EXTRA] Saving state to restart at step 'test_suite'...
[EXTRA] Saving state to restart at step 'finish'...
[INFO ] =================================================================
[INFO ] Cleaning-up the toolchain's directory
[INFO ] Stripping all toolchain executables
[EXTRA] Installing the populate helper
[EXTRA] Installing a cross-ldd helper
[EXTRA] Creating toolchain aliases
[EXTRA] Removing access to the build system tools
[EXTRA] Removing installed documentation
[INFO ] Cleaning-up the toolchain's directory: done in 2.96s (at 48:21)
[INFO ] Build completed at 20130104.102145
[INFO ] (elapsed: 48:20.23)
[INFO ] Finishing installation (may take a few seconds)...[48:21]
------------------------------------------------------------------------------------