来自:http://www.usr.cc/thread-51735-1-1.html
-
前言以前都是用别人做好的工具链,现在想自己做个工具链。先是看看CLFS的文档,对交叉编译工具链的编译过程有个基本了解,然后下载codesource cs2008q3的源代码包,根据其提供的编译脚本,花了一天时间终于编译出了一个工具链,再将cs2008q3的编译过程写成多个shell脚本文件,这样编译工具链的时间会小于1小时。似乎,我这么做太麻烦了,有没有智能一点的方法呢,当然有,crosstool-ng就是其中的一个! 很多人可能听说过crosstool,但可能不知道crosstool-ng。crosstool-ng对Dan Kegel的crosstool进行了重写,支持最新的gcc、glibc等。我就利用这个工具成功制作了用于armv6的工具链。 环境 主机硬件: 奔腾双核T4400(2.2G Hz) 2.5G内存 操作系统: Scientific Linux 6.0 x86版 主要软件: GCC 4.4.4 Binutils 2.20 制作过程
改成:
在配置浮点时选中soft浮点并指定fpu即可。
二 用crosstool-NG-1.9.3构建ARM工具链 来自:http://busybox.is-programmer.com/posts/24549.html 在成功重装了两次系统之后之前的移植工作终于还是被我弄丢了,无奈只好一切重头再来了。
安装crosstool-NG
调整完成之后可以在工作目录下查看配置结果.config文件,然后确认无误就可以build了,哦,对了,如果不能正常下载需要的tar文件时最好自己手动下载,然后再build,build时会出现错误提示'Don't set LD_LIBRARY_PATH. It screws up the build.',按照提示unset LD_LIBRARY_PATH,这时程序自动创建了目录结构,接下来先停下来,手动下载所需要的安装文件,需要在配置时选择forbid download:
当所有的安装文件都下载、解压、patch之后,还差一个uClibc的配置文件'[ERROR] You did not provide a uClibc config file!',我们默认的配置文件在.config中的定义是"CT_LIBC_UCLIBC_CONFIG_FILE="${CT_LIB_DIR}/samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config",但是经过修改之后的CT_TARGET已经不存在了,所以直接把‘uClibc-0.9.30.2.config‘文件复制出来,放到刚才的工作目录的target下,然后再修改.config中的CT_LIBC_UCLIBC_CONFIG_FILE内容。 虽然一切都准备好了,但是在编译器生成的最后阶段(Installing final compiler)还是出问题了,所以只好把gcc的版本换成4.3.2再试一次,不过这次没有手动下载所需的安装文件,直接通过为wget设置代理来自动通过ct-ng下载。为wget设置代理也很简单,直接编辑/etc/wgetrc文件,加上这两行: http_proxy = http://58.248.245.225:80/ use_proxy = on 就行了,build的时候还是死掉了,原因是.../scripts/functions文件中的代码 #
OK, just look if we have them... _aria2c=$(CT_Which aria2c) _wget=$(CT_Which wget) #_curl=$(CT_Which curl) #
Wrapper function to call one of, in order of
preference: #
aria2 #
curl #
wget # Usage: CT_DoGetFile CT_DoGetFile() { #CT_DoLog EXTRA "1 ${_aria2c}" #CT_DoLog EXTRA "2 ${_curl}" #CT_DoLog EXTRA "3 ${_wget}" if [
-n "${_aria2c}" -a ${CT_DOWNLOAD_MAX_CHUNKS} -gt 1
]; then CT_DoGetFileAria2 "$1" elif [
-n "${_curl}" ]; then CT_DoGetFileCurl "$1" elif [
-n "${_wget}" ]; then CT_DoGetFileWget "$1" else CT_Abort "Could
find neither wget nor curl" fi
实际上CT_DoGetFile函数调用的是CT_DoGetFileCurl而非刚才设置的wget,把上面的那个_curl=$(CT_Which curl)注释掉就行了。 程序脚本中安装文件的下载地址有时不可用,需要修改以下。 下载完成之后重新开始安装,最后成功! .config的文件内容如下:
#
Automatically generated make config: don't edit #
crosstool-NG version: 1.9.3 #
Fri Feb 18 19:16:42 2011 # #
CT_BACKEND is not set CT_MODULES=y # # Paths and misc options # # # crosstool-NG behavior # # CT_OBSOLETE is not set CT_EXPERIMENTAL=y # CT_DEBUG_CT is not set # # Paths # CT_LOCAL_TARBALLS_DIR= "${HOME}/src" CT_SAVE_TARBALLS=y CT_WORK_DIR= "${CT_TOP_DIR}/targets" CT_PREFIX_DIR= "${HOME}/x-tool-2/${CT_TARGET}" CT_INSTALL_DIR= "${CT_PREFIX_DIR}" 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_USE_MIRROR=y # CT_PREFER_MIRROR is not set CT_MIRROR_BASE_URL= "http://ymorin.is-a-geek.org/mirrors/" CT_CONNECT_TIMEOUT=10 CT_DOWNLOAD_MAX_CHUNKS=1 # CT_ONLY_DOWNLOAD 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" # CT_PATCH_SINGLE is not set # CT_PATCH_USE_LOCAL is not set # # Build behavior # CT_PARALLEL_JOBS=1 CT_LOAD=0 CT_USE_PIPES=y # 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_64 is not set CT_ARCH_SUPPORT_ARCH=y # CT_ARCH_SUPPORT_ABI is not set CT_ARCH_SUPPORT_CPU=y CT_ARCH_SUPPORT_TUNE=y CT_ARCH_SUPPORT_FPU=y CT_ARCH_DEFAULT_HAS_MMU=y # CT_ARCH_DEFAULT_BE is not set CT_ARCH_DEFAULT_LE=y CT_ARCH_DEFAULT_32=y # CT_ARCH_DEFAULT_64 is not set CT_ARCH_ARCH= "armv4t" CT_ARCH_CPU= "" CT_ARCH_TUNE= "" CT_ARCH_FPU= "" # CT_ARCH_BE is not set CT_ARCH_LE=y CT_ARCH_32=y # CT_ARCH_64 is not set CT_ARCH_BITNESS=32 # CT_ARCH_FLOAT_HW is not set CT_ARCH_FLOAT_SW=y CT_TARGET_CFLAGS= "" CT_TARGET_LDFLAGS= "" # # General target options # CT_ARCH_arm=y # CT_ARCH_x86 is not set # CT_ARCH_sh is not set # CT_ARCH_avr32 is not set # CT_ARCH_ia64 is not set # CT_ARCH_mips is not set # CT_ARCH_powerpc is not set # CT_ARCH_s390 is not set # CT_ARCH_m68k is not set # CT_ARCH_alpha is not set # CT_ARCH_blackfin is not set CT_ARCH_arm_AVAILABLE=y CT_ARCH_x86_AVAILABLE=y CT_ARCH_sh_AVAILABLE=y CT_ARCH_avr32_AVAILABLE=y CT_ARCH_ia64_AVAILABLE=y CT_ARCH_mips_AVAILABLE=y CT_ARCH_powerpc_AVAILABLE=y CT_ARCH_s390_AVAILABLE=y CT_ARCH_m68k_AVAILABLE=y CT_ARCH_alpha_AVAILABLE=y CT_ARCH_blackfin_AVAILABLE=y CT_ARCH_USE_MMU=y # # 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 # # Target optimisations # # # Toolchain options # # # General toolchain options # CT_USE_SYSROOT=y CT_SYSROOT_DIR_PREFIX= "" # # Tuple completion and aliasing # CT_TARGET_VENDOR= "cool" CT_TARGET_ALIAS_SED_EXPR= "" CT_TARGET_ALIAS= "arm-cool-uClibc" # # 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= "" # # Operating System # # CT_BARE_METAL is not set # CT_MINGW32 is not set CT_KERNEL_SUPPORTS_SHARED_LIBS=y CT_KERNEL= "linux" CT_KERNEL_VERSION= "2.6.33.7" # CT_KERNEL_mingw32 is not set # CT_KERNEL_bare_metal is not set CT_KERNEL_linux=y CT_KERNEL_mingw32_AVAILABLE=y CT_KERNEL_bare_metal_AVAILABLE=y CT_KERNEL_linux_AVAILABLE=y CT_KERNEL_LINUX_INSTALL=y # CT_KERNEL_V_2_6_36 is not set # CT_KERNEL_V_2_6_35_8 is not set # CT_KERNEL_V_2_6_34_7 is not set CT_KERNEL_V_2_6_33_7=y # CT_KERNEL_V_2_6_32_25 is not set # CT_KERNEL_V_2_6_31_14 is not set # CT_KERNEL_V_2_6_27_55 is not set # CT_KERNEL_LINUX_CUSTOM is not set 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 # CT_KERNEL_LINUX_USE_CUSTOM_HEADERS is not
set # # Common kernel options # CT_SHARED_LIBS=y # # Binary utilities # CT_ARCH_BINFMT_ELF=y # CT_ARCH_BINFMT_FLAT is not set # CT_ARCH_BINFMT_FDPIC is not set # # GNU binutils # # CT_BINUTILS_V_2_20_1 is not set # CT_BINUTILS_V_2_20 is not set CT_BINUTILS_V_2_19_1=y # CT_BINUTILS_V_2_19 is not set # CT_BINUTILS_V_2_18 is not set # CT_BINUTILS_V_2_17 is not set # CT_BINUTILS_V_2_16_1 is not set CT_BINUTILS_VERSION= "2.19.1" CT_BINUTILS_EXTRA_CONFIG= "" CT_BINUTILS_FOR_TARGET=y CT_BINUTILS_FOR_TARGET_IBERTY=y CT_BINUTILS_FOR_TARGET_BFD=y # # C compiler # CT_CC= "gcc" CT_CC_VERSION= "4.3.2" CT_CC_gcc=y # CT_CC_V_4_5_1 is not set # CT_CC_V_4_5_0 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_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=y # CT_CC_V_4_3_1 is not set # CT_CC_V_4_2_4 is not set # CT_CC_V_4_2_3 is not set # CT_CC_V_4_2_2 is not set # CT_CC_V_4_2_1 is not set # CT_CC_V_4_2_0 is not set # CT_CC_V_4_1_2 is not set # CT_CC_V_4_0_4 is not set # CT_CC_V_3_4_6 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 is not set # CT_CC_GCC_4_5_or_later is not set # CT_CC_GCC_HAS_GRAPHITE is not set # CT_CC_GCC_HAS_LTO is not set CT_CC_GCC_USE_GMP_MPFR=y # CT_CC_GCC_USE_PPL_CLOOG is not set # CT_CC_GCC_USE_MPC is not set # CT_CC_GCC_USE_LIBELF is not set CT_CC_PKGVERSION= "crosstool-NG-${CT_VERSION}" CT_CC_BUGURL= "" CT_CC_ENABLE_CXX_FLAGS= "" CT_CC_CORE_EXTRA_CONFIG= "" CT_CC_EXTRA_CONFIG= "" 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_FORTRAN is not set # 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_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 # # Misc. obscure options. # CT_CC_CXA_ATEXIT=y # CT_CC_GCC_DISABLE_PCH is not set CT_CC_GCC_SJLJ_EXCEPTIONS=m CT_CC_GCC_LDBL_128=m # # C-library # CT_LIBC= "uClibc" CT_LIBC_VERSION= "0.9.30.2" # CT_LIBC_mingw is not set # CT_LIBC_glibc is not set # CT_LIBC_newlib is not set CT_LIBC_uClibc=y # CT_LIBC_none is not set # CT_LIBC_eglibc is not set CT_LIBC_mingw_AVAILABLE=y CT_LIBC_glibc_AVAILABLE=y CT_LIBC_newlib_AVAILABLE=y CT_LIBC_uClibc_AVAILABLE=y # CT_LIBC_UCLIBC_V_0_9_31 is not set # CT_LIBC_UCLIBC_V_0_9_30_3 is not set CT_LIBC_UCLIBC_V_0_9_30_2=y # CT_LIBC_V_0_9_30_1 is not set # CT_LIBC_V_0_9_30 is not set # CT_LIBC_V_0_9_29 is not set # CT_LIBC_V_0_9_28_3 is not set # CT_LIBC_V_snapshot is not set # CT_LIBC_V_specific_date is not set CT_LIBC_UCLIBC_0_9_30_or_later=y CT_LIBC_UCLIBC_PARALLEL=y CT_LIBC_UCLIBC_VERBOSITY_0=y # CT_LIBC_UCLIBC_VERBOSITY_1 is not
set # CT_LIBC_UCLIBC_VERBOSITY_2 is not
set CT_LIBC_UCLIBC_VERBOSITY= "" CT_LIBC_UCLIBC_DEBUG_LEVEL_0=y # CT_LIBC_UCLIBC_DEBUG_LEVEL_1 is not
set # CT_LIBC_UCLIBC_DEBUG_LEVEL_2 is not
set CT_LIBC_UCLIBC_DEBUG_LEVEL=0 CT_LIBC_UCLIBC_CONFIG_FILE= "${HOME}/scratch/toolchain-build/${CT_LIBC}-${CT_LIBC_VERSION}.config" CT_LIBC_none_AVAILABLE=y CT_LIBC_eglibc_AVAILABLE=y CT_LIBC_SUPPORT_THREADS_ANY=y # CT_LIBC_SUPPORT_NPTL is not set CT_LIBC_SUPPORT_LINUXTHREADS=y # CT_LIBC_SUPPORT_WIN32THREADS is not
set CT_THREADS= "linuxthreads" # # Common C library options # # CT_THREADS_NPTL is not set CT_THREADS_LINUXTHREADS=y # CT_THREADS_WIN32THREADS is not set # CT_THREADS_NONE is not set CT_LIBC_XLDD=y # # uClibc other options # CT_LIBC_UCLIBC_LNXTHRD_OLD=y # CT_LIBC_UCLIBC_LNXTHRD_NEW is not
set CT_LIBC_UCLIBC_LNXTHRD= "old" # CT_LIBC_UCLIBC_LOCALES is not set # CT_LIBC_UCLIBC_WCHAR is not set # # Debug facilities # CT_DEBUG_ltrace=y CT_LTRACE_V_0_5_3=y # CT_LTRACE_V_0_5_2 is not set # CT_LTRACE_V_0_5 is not set # CT_LTRACE_V_0_4 is not set CT_LTRACE_VERSION= "0.5.3" CT_LTRACE_0_5_3_or_later=y CT_DEBUG_gdb=y CT_GDB_CROSS=y # CT_GDB_CROSS_STATIC is not set # CT_GDB_NATIVE is not set CT_GDB_GDBSERVER=y CT_GDB_GDBSERVER_STATIC=y # CT_GDB_V_7_2 is not set # CT_GDB_V_7_1 is not set # CT_GDB_V_7_0_1 is not set # CT_GDB_V_7_0 is not set CT_GDB_V_6_8=y CT_GDB_VERSION= "6.8" CT_DEBUG_duma=y CT_DUMA_A=y CT_DUMA_SO=y CT_DUMA_V_2_5_15=y # CT_DUMA_V_2_5_14 is not set # CT_DUMA_V_2_5_12 is not set # CT_DUMA_V_2_5_8 is not set # CT_DUMA_V_2_5_1 is not set CT_DUMA_VERSION= "2_5_15" CT_DEBUG_dmalloc=y CT_DMALLOC_V_5_5_2=y CT_DMALLOC_VERSION= "5.5.2" CT_DEBUG_strace=y # 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_V_4_5_17 is not set # CT_STRACE_V_4_5_16 is not set # CT_STRACE_V_4_5_15 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 is not set # CT_CLOOG_NEEDED is not set # CT_MPC_NEEDED is not set # CT_LIBELF_NEEDED is not set CT_COMPLIBS=y # CT_WRAPPER_NEEDED is not set CT_GMP=y CT_MPFR=y CT_LIBELF_TARGET=y # CT_GMP_V_5_0_1 is not set CT_GMP_V_4_3_2=y # CT_GMP_V_4_3_1 is not set # CT_GMP_V_4_3_0 is not set # CT_GMP_V_4_2_4 is not set # CT_GMP_V_4_2_2 is not set CT_GMP_VERSION= "4.3.2" # CT_MPFR_V_3_0_0 is not set CT_MPFR_V_2_4_2=y # CT_MPFR_V_2_4_1 is not set # CT_MPFR_V_2_4_0 is not set # CT_MPFR_V_2_3_2 is not set # CT_MPFR_V_2_3_1 is not set CT_MPFR_VERSION= "2.4.2" # # 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_BACKUP=y # CT_COMPLIBS_CHECK is not set # CT_COMPLIBS_SHARED is not set # # Companion tools # # # READ HELP before you say 'Y' below
!!! # # CT_COMP_TOOLS is not set # # Test suite # # CT_TEST_SUITE is not set # CT_TEST_SUITE_GCC is not set 参考链接: http://ymorin.is-a-geek.org/projects/crosstool 三 用crosstool-ng在ubuntu下构建交叉编译环境 来自:http://home.eeworld.com.cn/my/space.php?uid=67366&do=blog&id=43600 这个整的比较郁闷,公司的电脑太菜了,虚拟机一开,电脑连QQ都不敢开。编译一次耗费大量时间,在虚拟机下,还容易出问题。搞了几天,后来在家里的电脑上,28分钟就弄好了。下面记录流程:
1.下载工具crosstool-ng
最新版本是1.93。主机环境为ubuntu
10.04.开始我以为编译过程与主机上的GCC版本和GDB版本以及BINUTILS版本有关。后来发现没有关系。
2.切换到root用户下,安装相关工具。为了省事,以下所有操作都在root用户下。
apt-get install bison
flex texinfo automake libtool cvs patch
apt-get install
libncurses5* 这里怕安装不全,直接用*
apt-get install aria2
curl gcj g++ subversion cvsd
gawk有几个软件系统中原本就有。
apt-get install
glibc*.我编译到native
gdb的时候出现了错误,我怀疑是这个地方有问题。当然有可能是其它原因,保险起见,还是安装这个东东,反正装好后,重新编译成功了,至于是不是这个原因,不去追究了。
下载:
expat-2.0.1.tar.gz linux-2.6.33.7.tar.bz2 //源码自己下载,一般只要是33.7版本以下都可以。我用的是26.32.17,补丁也下载下来。不过我觉得最好用26.32.25的版本,因为在ct-ng menuconfig的时候,发现上面多了一句话。Long-term 什么的。 一定要全部下载好,要不然以后的编译过程中,速度很慢还存在潜在的危险,说不定哪个包自动下载不下来,编译错误,那连原因也找不到 3.cd
/usr/bin
mv mawk
mawk.bak
ln -s gawk
mawk
4.cd /home
mkdir
crosstool-ng
cd
crosstool-ng
mkdir src
将上面下载的源码包全部复制到
src目录下。
解压crosstool-ng-1.9.3到当前目录下。
cd
crosstool-ng-1.9.3
./configure
--prefix=/opt/crosstool-ng 后面的参数是安装目录,不用自己建立,她自动会建立。
会有两个No,没关系。继续。
make
make
install
make clean
$ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc # 为后面调用ct-ng命令增加环境变量 $ source ~/.bashrc下班了,明天继续写。 5.接下来 cd /home/crosstool-ng mkdir crosstool-ng-1.9.3_build //编译时的输出目录 cd crosstool-ng-1.9.3_build/ cp /opt/crosstool-ng/lib/ct-ng-1.9.3/samples/arm-unknown-linux-gnueabi/crosstool.config .config 如果足够牛逼的话,直接编写这个配置文件。对于我而言,还是老老实实运行图形化配置工具。 ct-ng menuconfig //一定要在上面建立的crosstool-ng-1.9.3_build目录下运行。 改写下面的路径,按照上面的定义,最后的结果如下 Paths and misc options ---> (/home/crosstool-ng/src) Local tarballs directory 保存源码包路径 (/opt/crosstool-ng/${CT_TARGET}) Prefix directory 交叉编译器的安装路径 Target options ---> *** Target optimisations *** (armv4t) Architecture level (arm9tdmi) Emit assembly for CPU (arm920t) Tune for CPU C compiler ---> *** Additional supported languages:*** [*] C++ [ ] Fortran [ ] Java 取消下面两个语言的选择。这个应该取消选择,否则容易出错。 Paths and misc options ---> *** Build behavior *** (4) Number of parallel jobs 如果是双核的话,不是在虚拟机下运行的,就填4.在虚拟机下,开2就行了,开4也没用。弄不好整死机了。 保存退出。 6.如果你选择配置界面里面的LINUX版本整好为你下载的版本,例如2.6.32.25。则不需要执行以下操作。 否则,请修改内核,默认的内核版本为2.6.33.7。 vi .config 修改CT_KERNEL=“linux"我下载的内核源码 CT_KERNEL_VERSION=2.6.32.17 CT_KERNEL_V_2_6_32_17=y CT_LIBC_GLIBC_MIN_KERNEL=2.6.32.17 保存退出。 7.ct-ng build.4 bulid后面有个点,不要忘了。意思为4线程编译。一切正确配置的话。我的家里的电脑为酷睿双核E7200,金士顿8002G内存。所耗费时间为28分多种,编译成功。 8. $echo "PATH=$PATH:/opt/crosstool-ng/arm-unknown-linux-gnueabi/bin" >> ~/.bashrc。 //root家目录下的.bashrc source ~/.bashrc 立即生效 9.arm-unknown-linux-gnueabi -v 会看到出来一大堆的东西。最后一行是 gcc version 4.3.2 (crosstool-NG-1.9.3-unknown) 10.其中arm-unknown-linux-gnueabi。中的UNKNOWN可以改为你想要的任何文字,这个步骤在上面的图形配置里面,不过没有什么意义,就不写了。 来自:http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94369 用crosstool-ng建立Linux交叉编译环境(以S3C2440(armv4t)为例)
最近准备针对Linux内核和驱动做实验,但是当我用从前的制作的gcc-4.1.1编译最新的Linux内核的时候发现因为编译器太旧了无法编译,所以决定在做一个新的可以使用的。早就知道crosstool-ng这个工具了,但是去年使用了以后发现编译出的库文件不对(我要编译armv4的,结果编译出了v5的),所以只留下了记录,没有写文档。这次编译成功了,经过编译u-boot、Linux
kernel、busybox,并制作了根文件系统做测试,都没有问题,这才决定写一份文档放到博客来。好的,闲话不多说,现在就是见证制作过程的时刻。 用crosstool-ng建立arm-linux交叉工具链的介绍,最好手动安装一下termcap。 二、解压、打补丁(如果有)并建立工作目录。
make
install #安装crosstool-ng
下面我只说说针对armv4t需要修改的地方,别的构架等有了板子测试再说:
3、关闭JAVA编译器,避免错误。 [N]
Check installed headers
开了两个终端,一个终端用tail -f build.log监测,另外一个进行安装 |