分类: LINUX
2014-02-12 21:23:20
俗话说,工欲善其事,必先利其器。
首先准备好开发的环境。
硬件:FS2410开发板
软件:ubuntu12.04。。内核就用2.6的。。
源码包:
crosstool-ng-1.8.1.tar.bz2
并下载补丁
000-scripts_log_do_not_interpret_log_string_as_printf_format.patch
001-binutils_binutils_remove_faulty_patch.patch
002-kconfig_resync_curses_check_with_Linux_kernel.patch
binutils-2.19.1.tar.bz2
gcc-4.3.2.tar.bz2
glibc-ports-2.9.tar.bz2
linux-2.6.35.tar.bz2
ncurses-5.7.tar.gz
dmalloc-5.5.2.tgz
gdb-6.8.tar.bz2
gmp-4.3.2.tar.bz2
ltrace_0.5.3.orig.tar.gz
strace-4.5.19.tar.bz2
duma_2_5_15.tar.gz
glibc-2.9.tar.bz2
libelf-0.8.13.tar.gz
mpfr-2.4.2.tar.bz2
Sstrip.c
centos 下必须yum install glibc-static,否则会出现找不到 lc ,Build failed in step 'Installing native gdb'错误。
1、源码下载
Crosstools-ng下载地址
同时对每一个版本都有相应的补丁我们尽量把这些补丁打上,这些补丁的下载地址是
注:我这里选用的是crosstool-ng-1.8.1.tar.bz2
并下载补丁
000-scripts_log_do_not_interpret_log_string_as_printf_format.patch
001-binutils_binutils_remove_faulty_patch.patch
002-kconfig_resync_curses_check_with_Linux_kernel.patch
2、工具的安装
在使用之前必须安装一些软件
$sudo apt-get install gawk autotools-dev automake texinfo libtool cvs patch bison flex libncurses5-dev
3、必要目录的创建
/home/linux目录下,
$mkdirs3c2410-2.6.35
$mkdirtoolchain
$cd s3c2410-2.6.35
$mkdirtoolchain
$cdtoolchain
$mkdir toolchain-build
$mkdir toolchain-install
把下列源码包复制到目录/home/linux/s3c2410-2.6.35/toolchain
crosstool-ng-1.8.1.tar.bz2
000-scripts_log_do_not_interpret_log_string_as_printf_format.patch
001-binutils_binutils_remove_faulty_patch.patch
002-kconfig_resync_curses_check_with_Linux_kernel.patch
4、解压源码并打补丁
$tar xvf crosstool-ng-1.8.1.tar.bz2
$cd crosstool-ng-1.8.1
$patch –p1< ../000-scripts_log_do_not_interpret_log_string_as_printf_format.patch
$patch –p1 < ../001-binutils_binutils_remove_faulty_patch.patch
$patch –p1<../002-kconfig_resync_curses_check_with_Linux_kernel.patch
5、配置并编译crosstool-ng-1.8.1
$./configure--prefix=/home/linux/s3c2410-2.6.35/toolchain/toolchain-install
$make
$make install
6、配置工具链选项
$cd ../toolchain-build
$cp ../crosstool-ng-1.8.1/samples/arm-unknown-linux-gnueabi/* ./
$mv crosstool.config .config
$../toolchain-install/bin/ct-ng menuconfig
Pathsand miscoptions --->
(${HOME}/src)Local tarballs directory
(${HOME}/x-tools/${CT_TARGET})Prefix directory
修改为
Pathsand miscoptions --->
(/home/linux/Downloads)Local tarballs directory //源码包存放路径
(/home/linux/toolchain)Prefix directory //工具生成后的安装路径
(1)Number of parallel jobs
这里还有一个至关重要的选项。
forbiden download一定要选上,否则会出现下面的下载原文件。我们自己已经下载好了所以不要再下载了。。
Targetoptions --->
(armv4t)Architecture level
(arm9tdmi)Emit assembly for CPU
(arm920t)Tune for CPU
Ccompiler --->
[] Java
Ccompiler --->
(crosstool-NG-${CT_VERSION}-farsight)gcc ID string
OperatingSystem --->
[] Check installed headers
Toolchainoptions --->
(none)Tuple's vendor string
修改.config文件,将文件中的2.6.33.2全部改为2.6.35
共2处
7、目标代码准备
拷贝下面文件到/home/linux/Downloads目录下:
binutils-2.19.1.tar.bz2
gcc-4.3.2.tar.bz2
glibc-ports-2.9.tar.bz2
linux-2.6.35.tar.bz2
ncurses-5.7.tar.gz
dmalloc-5.5.2.tgz
gdb-6.8.tar.bz2
gmp-4.3.2.tar.bz2
ltrace_0.5.3.orig.tar.gz
strace-4.5.19.tar.bz2
duma_2_5_15.tar.gz
glibc-2.9.tar.bz2
libelf-0.8.13.tar.gz
mpfr-2.4.2.tar.bz2
Sstrip.c
出错:Buildfailed in step 'Installing sstrip'
[ERROR] Error happened in'/home/linux/Desktop/paper/crosstools/toolchain_install/lib/ct-ng-1.8.1/scripts/functions'in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR] called from'/home/linux/Desktop/paper/crosstools/toolchain_install/lib/ct-ng-1.8.1/scripts/build/binutils/sstrip.sh'at line # 28 in function 'do_sstrip'
[ERROR] called from'/home/linux/Desktop/paper/crosstools/toolchain_install/lib/ct-ng-1.8.1/scripts/crosstool-NG.sh'at line # 586 in function 'main'
[ERROR] Look at '/home/linux/Desktop/paper/crosstools/toolchain/build.log'for more info on this error.
[ERROR] (elapsed: 6:49.98)
[06:50]/ make: *** [build] Error 1
解决:
Sstrip.c从官网下载下来的需要加入头文件
#include
#include
8、工具链编译
$../toolchain-install/bin/ct-ng build
这个过程比较时间比较长,2小时左右
9、环境变量的添加
修改文件/etc/bash.bashrc添加如下内容
export PATH=$PATH:/home/linux/toolchain/bin
重启配置文件
$source bash.bashrc
工具链的测试
$arm-none-linux-gnueabi-gcc –v
Using built-in specs.
Target:arm-none-linux-gnueabi
Configured with: /home/linux/s3c2410-2.6.35/toolchain/toolchain-build/targets/src/gcc-4.3.2/configure
--build=i686-build_pc-linux-gnu-host=i686-build_pc-linux-gnu --target=arm-none-linux-gnueabi--prefix=/home/linux/toolchain
--with-sysroot=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root--enable-languages=c,c++,fortran --disable-multilib--with-arch=armv4t --with-cpu=arm9tdmi --with-tune=arm920t--with-float=soft --with-pkgversion=crosstool-NG-1.8.1-none--disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap--with-gmp=/home/linux/s3c2410-2.6.35/toolchain/toolchain-build/targets/arm-none-linux-gnueabi/build/static--with-mpfr=/home/linux/s3c2410-2.6.35/toolchain/toolchain-build/targets/arm-none-linux-gnueabi/build/static--enable-threads=posix --enable-target-optspace--with-local-prefix=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root--disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long
Threadmodel: posix
gccversion 4.3.2 (crosstool-NG-1.8.1-none)
这个时候我们的工具链就生成了
重新编译交叉工具链,出现几个错误,记录在下,对读者有用请留言。。。原创的哟
1、文件名,一定要和http://blog.csdn.net/yongyici123/article/details/7651383文中说的一样,否者会出现retriving 的错误
选了 forbid download 的就不要看了。。。。。
2、交叉编译的机器一定要能联网,且http://blog.csdn.net/yongyici123/article/details/7651383所需文件的网站没有被封
3、出现retriving的错误时,不要慌张。。看看对应的网址对不对。。举个例子,笔者遇到过rectriving sstrip的错误。
怎么找也找不到原因,log里也是现实retriving sstrip错误。没有详细信息。但是在crosstool-ng-1.8.1\scripts\build\binutils\sstrip.sh中找到了问题
第9行CT_GetFile sstrip .c ,
这个网址根本没有sstrip。。于是我找了个有sstrip的网站
https://dev.openwrt.org/browser/trunk/tools/sstrip/src/sstrip.c 注意只要把前面https://dev.openwrt.org/browser/trunk/tools/sstrip/src/写进去就ok了。
4、说下里面的一些像函数一样的东东的意义,,
CT_GetFile 下载文件,
CT_DoStep INFO 打印信息
CT_DoLog EXTRA 打印日志
最后,说一下,baidu坑爹。。。google才是王道
转载自:http://blog.csdn.net/yongyici123/article/details/7651383