EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
最近在做davinci平台的系统开发,用的是ti公司的dm6446芯片,这款芯片比较经典所以资料也挺多的,而且ti官方给提供一个dvsdk的软件包,里面包含了包括bootloader、kernel、fs、DSP算法及各种编解码codec,可谓给开发者提供了很多便利。当然里面也包含了ARM-linux的交叉编译工具链,但是版本比较旧了,是基于gcc-4.2.0版本的,现在最新的gcc的版本已经到了4.5.1。所以打算更新一下交叉编译工具链的版本,今天要做的这个交叉编译工具链是基于gcc-4.4.3版本的。4 l" g" W6 x& h: Z2 e; ]$ f
8 v6 i8 ~3 ~; B
一、下载crosstool-ng,并为使用安装必要的软件。
0 B' g9 z1 L( T+ s5 k$ m5 R刚开始选者的工具是crosstool,但是后来发现它支持的gcc的版本太低了,所以就选择了crosstool-ng工具。
' z7 h+ g8 q% m, s1 {# Q. E5 }( d8 j6 @) W
我使用的是crosstool-ng-1.9.0版本。用的是ubuntu9.04的平台。6 x& j+ U u0 s5 y4 Y6 k
使用crosstool-ng必须依赖一些开发用的软件包:libncurses5-dev、bison、flex、texinfo、automake、libtool、patch、gcj、cvs、cvsd、gawk。
4 E5 O, S* C8 W0 Q" @) |9 g& S1 f用指令:sudo apt-get install xxx进行下载安装
# |5 ]' r: }; l. Y; v最后根据用crosstool-ng建立arm-linux交叉工具链的介绍,最好手动安装一下termcap。2 J: a$ I2 {5 X% l" {3 k
二、解压、打补丁(如果有)并建立工作目录。
) w/ S# }; o; Ucrosstool-ng和crosstool不同的地方之一就是:她并不是一下载下来就可以使用了,必须先配置安装。
7 q. x6 U: F, {将下载下来的crosstool-ng-X.Y.Z.tar.bz2解压到你为她准备的工作目录(这里假设为${CROSSTOOLNG}),并建立安装和编译目录 三、安装crosstool-ng $ mkdir ~/croosstool-ng # 在当前用户目录下建立croosstool-ng目录
% {+ Q: s; b0 u# [9 x: j$ cd ~/croosstool-ng' O3 S1 b( T" s5 G
$ mv /tmp/crosstool-ng-1.9.0.tar.bz2 ./ # 把下载的crosstool-ng软件包放到 crosstool-ng目录中
: a# N. m3 Y- p& i1 w9 j2 ]& O$ tar -jxvf crosstool-ng-1.9.0.tar.bz2 # 解包
! B+ O& o" }8 h1 `9 }$ @7 h$ cd crosstool-ng-1.9.0 # 进入解压目录$ j* @+ K) `) I& D0 L
$ patch -p1 < <补丁文件>#给crosstool-ng打补丁(如果有)
& K; Y! u+ a( n' s! b2 C$ ./configure --prefix=/opt/crosstool-ng # 配置crosstool-ng# \+ c, i6 P s w2 q6 ]- X
$ make # 编译crosstool-ng; `+ }4 D3 w8 k* G: h
$ sudo make install # 安装crosstool-ng
7 s2 b- B' I- p0 T: g9 a% B$ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc # 为后面调用ct-ng命令增加环境变量3 {0 N7 h& Y' W. P0 C
$ source ~/.bashrc
4 j/ H, I9 a3 `% K& H& w$ w$ ct-ng help 出现帮助信息表明安装成功了 四、配置交叉编译工具链 $ cd ~/croosstool-ng
! G. B1 q5 Z3 v" a. `6 ]5 |$ mkdir crosstool-ng-1.8.1_build # 建立一个交叉工具链的输出目录
5 u& P) w6 w! T' V% D7 ]) {" P$ mkdir src # 建立保存源码包目录
: F& ]. i. L4 \& {$ mkdir x-tools # 建立交叉编译器的安装路径
/ N! N6 _# V! ]3 E5 k0 q+ |9 B$ cd crosstool-ng-1.8.1_build/ ^# z% ^# t3 f+ V) Z
$ cp /opt/crosstool-ng/lib/ct-ng-1.8.1/samples/arm-davinci-linux-gnueabi/crosstool.config .config#拷贝davinci平台的默认配置选项
( G4 W& F0 @8 Z# H6 l; R# h1 VPS:为加快速度,根据配置自行下载相应的软件包。(选做)) [* ` i7 s& g3 N+ @
虽然crosstool-ng发现找不到软件包的时候会自动下载,但是比较慢。根据这次的配置情况(查看“.config”文件),我预先下载了以下的软件包:6 y$ r0 ~0 K. P& j. t
binutils-2.20.1.tar.bz2
' [% |2 ~; c" F* j* @: s$ V- Hglibc-2.9.tar.gz
) G* g3 J. b! p6 l' udmalloc-5.5.2.tgz
# R8 T7 O( R: ^glibc-ports-2.9.tar.bz23 L2 r* q% C) i
mpfr-2.4.2.tar.bz23 E3 K! e/ h' A: w& W5 G2 v
duma_2_5_15.tar.gz
$ R( {7 F. |+ v3 W+ w& a9 f- P0 ogmp-4.3.2.tar.bz27 q& q! q1 Z- q5 h/ o
ncurses-5.7.tar.gz
6 e, J6 m8 \* J, j& d/ Secj-latest.jar
' \8 l5 V7 K' alibelf-0.8.13.tar.gz$ Y+ |# I3 Q6 N' x9 T( ^
sstrip.c6 i- ~& u6 q% l- ^% q& O
gcc-4.4.3.tar.bz2% l' a8 f; D% T6 X( e2 k" t
linux-2.6.33.7.tar.bz2: v8 Y7 p! J7 ^5 t
strace-4.5.19.tar.bz2
$ y2 X& b- {3 ]8 @* }8 v8 Fgdb-6.8.tar.bz24 W# f }+ S% S. N8 ?
ltrace_0.5.3.orig.tar.gz) N; `. n/ X9 y5 N& U% N( K
8 D G/ k4 f. ~, B, Q" T# _
下载完之后,记得将这些软件包放在配置时指定的文件夹(src/下)
& `* W& v1 n, q- q- M以上工作都完成以后,咱们就要开始真正的配置工作了。9 g9 `. X+ f) j* w9 }6 W9 O
首先用终端进入到crosstool-ng-1.8.1_build/目录下。# K, n3 u0 m- v* m3 C! s8 F
然后执行$ ct-ng menuconfig, 此时会出现crosstool-ng的配置窗口。
* |! s3 k5 F# I7 k1、已下载好的源码包路径和交叉编译器的安装路径。
; F/ M3 L4 _& F, K0 e* |7 YPaths and misc options --->6 b0 I. |5 u' G- w* N! a9 L; B+ _( |
(${HOME}/crosstool-ng/src) Local tarballs directory保存源码包路径4 l6 v8 d; B* b1 b) S& a+ v/ f
(${HOME}/crosstool-ng/x-tools/${CT_TARGET}) Prefix directory交叉编译器的安装路径
$ H1 w& }- J! W以上根据自己的路径自行修改8 R* f: ~0 k! U5 y
2、修改交叉编译器针对的构架6 m9 L2 a5 _7 d2 h/ z
Target options --->8 Y* Q# K6 l& f ^2 A
由于咱们是copy的默认的davinci的配置文件,所以这项不用修改
6 g. Y4 r) e! n+ c3、增加编译时的并行进程数,以增加运行效率,加快编译。3 j& ~. `, k" X2 P0 }
Paths and misc options --->
9 E" L7 v, ?& Q* y4 C0 w*** Build behavior ***
* G* {7 _9 E. }1 Q( x- j(4) Number of parallel jobs
% l4 e8 P( y3 B, C9 v& Q w这个数值不宜过大,应该为CPU数量的两倍。由于我的CPU是双核的,所以我填了4
. h6 }* A1 K$ c, _4、选择gcc版本号3 q( A) _, X" U! u
C compiler --->
! \* C- Y( W& E. V- I* y0 C/ R- s) p9 rgcc version (xxx)---> //选择咱们需要编译的gcc 4.4.3
9 R; Y* v4 x- O5 k$ d }5、其他工具包版本选择5 Y/ R) z5 x* g G; }8 k
Operating System --->
6 |4 G/ m% ~' \, v) a: g( kLinux kernel version---> 内核版本
\% f: X5 t+ H# A3 U% eBinary utilities --->5 A, r0 k4 w! W( `
binutils version---> binutils包
% F1 U6 M; z8 f* _+ qC-library--->: p# Y0 D3 ]& G& B3 `
glibc version ---> c库 r* e' w+ s1 U/ R6 W" q! O. U) b1 D; h
Companion libraries--->
& z8 G! ~ J+ F1 h3 TGMP、MPFR、PPL、CLooG/ppl等版本的选择
3 s2 o z; ~$ S6 B N( s' z9 {6、修改操作系统选项,禁止内核头文件检测
/ t( g) M ?& uOperating System ---> [ ] Check installed headers
' m1 B7 y3 N: h4 T0 O1 T9 i7 @" y另:在选择CLooG/ppl版本时,我刚开始选择的是CLooG/ppl 0.15.10,但是出现了一下错误
3 E/ t, T4 i" W8 q q2 K! m[ERROR] Build failed in step 'Installing CLooG/ppl'
8 _) Y( E; n, [# o& T( w# q[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.9.0/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)9 z3 m n9 d/ }
解决方法:选择CLooG/ppl 0.15.9就可以了。 五、编译工具链 配置完后,在crosstool-ng-1.8.1_build目录下执行命令:$ ct-ng build.4。 我的比较慢用了4个小时,但是别人都用了40分钟,dont know why?
2 U2 W0 q( x' P: h) z. q编译好的工具链在x-tools/arm-davinci-linux-gnueabi/bin目录下面,添加到环境变量中就可以使用了。; j% ~6 f4 Q% x5 W9 a! o/ x
最后测试一下工具链版本:- f) ]- K. O. C p
#arm-davinci-linux-gnueabi-gcc -v: ^7 b. I- z- B
#Using built-in specs.
- O- X3 Z! o# ^ MTarget: arm-davinci-linux-gnueabi
+ h! F) p! e% M, D2 cConfigured with: /home/chenbolin/crosstool-ng/crosstool-ng-1.9.0_build/targets/src/gcc-4.4.3/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-davinci-linux-gnueabi --prefix=/home/chenbolin/crosstool-ng/x-tools/arm-davinci-linux-gnueabi --with-sysroot=/home/chenbolin/crosstool-ng/x-tools/arm-davinci-linux-gnueabi/arm-davinci-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv5te --with-cpu=arm926ej-s --with-tune=arm926ej-s --with-float=soft --with-pkgversion=crosstool-NG-1.9.0 --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-gmp=/home/chenbolin/crosstool-ng/crosstool-ng-1.9.0_build/targets/arm-davinci-linux-gnueabi/build/static --with-mpfr=/home/chenbolin/crosstool-ng/crosstool-ng-1.9.0_build/targets/arm-davinci-linux-gnueabi/build/static --with-ppl=/home/chenbolin/crosstool-ng/crosstool-ng-1.9.0_build/targets/arm-davinci-linux-gnueabi/build/static --with-cloog=/home/chenbolin/crosstool-ng/crosstool-ng-1.9.0_build/targets/arm-davinci-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/home/chenbolin/crosstool-ng/x-tools/arm-davinci-linux-gnueabi/arm-davinci-linux-gnueabi//sys-root --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long
* U$ G3 L- b7 i& L$ M/ J3 YThread model: posix( v7 k( V' D3 t" z
gcc version 4.4.3 (crosstool-NG-1.9.0)
" B% h$ k1 L9 @6 Fcrosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者.2 d* H* I3 H5 I+ X( j. L8 v$ C2 E
使用crosstool最多只能编译gcc 4.1.1 glibc 2.x的版本. 而crosstool-ng一直保持着更新,现在最新能够建立 gcc 4.3.2版本 glibc 2.9版本... 在使用低于4.1.1的版本编译2.6.29 kernel时,会出现 include/linux/compiler-gcc4.h:7:3: error: #error Your version of gcc miscompiles the __weak directive include/linux/compiler-gcc4.h:7 :如下 /* GCC 4.1.[01] miscompiles __weak */! [0 M# M: U- N6 f! T) c
#if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1
" W6 a: x# T4 W% v8 p6 R# error Your version of gcc miscompiles the __weak directive
; N p0 p# ]+ x. r+ F#endif 所以使用crosstool-ng建立一个新的工具链(gcc 4.3.2 glibc 2.9),以支持对最新kernel编绎.
7 e% `" |# j4 J测试环境: Debian Linux 2.6.18-6-686
3 ~( B5 @) i" C" o; V6 r mUbuntu Linux 2.6.28-14 (Ubuntu 9.0.4) 1.crosstool-ng的安装 cd /tmp mkdir crosstool-ng wget http://ymorin.is-a-geek.org/down ... ol-ng-1.5.2.tar.bz2 tar jxvf crosstool-ng-1.5.2.tar.bz2 cd /tmp/crosstool-ng-1.5.2 ./configure --prefix=/opt/crosstool-ng make make install echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc source ~/.bashrc ct-ng help ## ^ ^ 安装成功 2.安装必要工具包 #安装java开发包 sudo apt-get install gcj #安装cvs sudo apt-get install cvs #切换mawk sudo apt-get install gawk cd /usr/bin sudo mv mawk mawk.bak sudo ln -s gawk mawk C- G: B/ U- F) d
' d6 }. A4 G3 l$ [3 Q! q3 \+ ?
Ubuntu 9.0.4 请先安装下 termcap库 参考本文 错误与解决 4.. . 3.crosstool-ng使用范例 本范例记录了使用crosstool-ng编绎arm-unknown-linux-gnueabi工具链的过程 cd /tmp/crosstool-ng mkdir build_toolchain 0 @/ k4 q( D# M/ o
mkdir ~/src% f5 R/ n$ T' k3 L% e: z
生成默认配置文件: ct-ng arm-unknown-linux-gnueabi. C9 k* A" C2 p" ?7 d$ F& u
也可以这样子:
' k+ }' O' j- ?6 ^9 h: O* m& {cp /opt/crosstool-ng/lib/ct-ng-1.5.2/samples/arm-unknown-linux-gnueabi/crosstool.config .config ct-ng menuconfig 根据实际情况修改这些配置(我测试的是一款arm7 SOC,其指令集为armv4t) 指定指令集 Target options ---> Architecture level 填入 armv4t 修改工具链安装路径 Paths and misc options ---> Prefix directory() 填入/opt/arm/4.3.2/${CT_TARGET} 修改操作系统选项,禁止内核头文件检测 Operating System ---> [ ] Check installed headers 退出保存配置文件,手动修改内核头文件的安装版本,以修正段错误:
1 N! [4 o" Z0 Y, C" ~vim .config 修改kernel的安装版本 CT_KERNEL_VERSION="2.6.18" 修改libc中配置的内核头文件的安装版本至2.6.18 CT_LIBC_GLIBC_MIN_KERNEL="2.6.18" 保存退出(注意若使用ct-ng menuconfig进行配置,上面的手动修改信息会丢失,需再次从头配置) ) o; g1 z! V$ g6 t6 H' @ F
PS:如果你编绎还是失败了或者测试失败了,那可以参考一下,我测试通过的配置文件:crosstool-ng for arm720t配置文件
2 V5 r+ C6 Y+ U" U' {" e( @% h' i/ g- A2 q# A! h
+ X) b* H3 W! `1 x0 g-----------我是分隔线 2010快乐 -----------------------------------3 v) X. S6 q2 C# Q( a
; m+ b. v2 W [- p. Z
libc库已经换用git来管理源码(sources.redhat.com),下面两个包1 D( s: j: Q! T4 q' k
glibc-cvs-2.9.tar.gz7 s* W! z5 O6 ]# e- I0 I
glibc-ports-cvs-2.9.tar.gz
7 I3 {( T( E* V: B Y将无法从cvs中取出,临时可以这样子解决:- u+ C) P) w: T) Y
cd /tmp/
1 W0 N- _/ g, {4 P9 Qwget ftp://sourceware.org/pub/glibc/releases/glibc-2.9.tar.bz2
+ k% b& E0 g# W! _6 a! H/ l9 e/ ztar jxvf glibc-2.9.tar.bz2
6 w1 }) W9 a" _( r/ r$ Bmv glibc-2.9 glibc-cvs-2.9% F! @* q( B4 M: B
tar zcvf glibc-cvs-2.9.tar.gz glibc-cvs-2.9
5 ]3 l4 X+ f3 }6 c0 l+ t" k# L! V) Q3 X
wget ftp://sourceware.org/pub/glibc/releases/glibc-ports-2.9.tar.bz2
% [3 Q, ?/ o$ ^9 T$ Atar jxvf glibc-ports-2.9.tar.bz2
( |4 B( c( B$ b' d: \8 s0 n4 q9 w8 pmv glibc-ports-2.9 glibc-ports-cvs-2.99 T+ C2 R" }) Y5 v% Z$ Q! R
tar zcvf glibc-ports-cvs-2.9.tar.gz glibc-ports-cvs-2.93 w5 b- U) ?( A1 f4 {0 S
" c, F4 Z6 n a
复制这两个*.gz包至 crosstool-ng设置的包下载路径(本例中设置的是:~/src)
5 ]" h" r( E v$ a( d p" p2 l T+ z3 i6 y; C0 Z
-------------------------------------------------------------------------------------- 开始编绎(在我的机子上耗时一小时) ct-ng build.4(用太多线程,很耗系统资源) 4.为工具链增加新链接 # E' r0 S4 m# C {! M; g& c
cd /opt/arm/4.3.2/arm-unknown-linux-gnueabi/bin ./autoln.sh autoln.sh是一个脚本,用来自动链接arm-unknown-linux-gnueabi的工具... 文件名:autoln.sh 拷到要自动建立链接的文件夹使用。 #!/bin/bash
2 T3 V& e4 F& j H# ?( r) |
$ \' y. V) Y9 D1 \#: N$ P" B( r) S% h
# main
& l9 x/ A& X& F+ G, r#
1 l7 H" e. ^ K2 q k/ fif [ $# -lt 1 ] ; then" _/ @& Q8 R. K( U
echo "default path: ./"
' W3 e" ~ S1 Y% @/ ]* aBIN_PATH=./
, [$ a$ X. `3 Z8 ~. z. R4 o3 Welse
# }: @' A1 P& J; z! XBIN_PATH=$1
. h6 B0 q- P7 \, Hfi6 [1 j3 @( a% K& [; S9 c6 k
if [ ! -d $1 ] ; then
& {# k* T: h! u2 D4 Qecho "path error"
' W6 @9 J' F$ h# a9 @( Yexit0 {! r4 H- H8 e1 r$ k
fi1 C R) C8 t9 G1 ]; g# M
cd $BIN_PATH
T/ E* a; z t7 k/ s! ~8 ~SRC=`ls | awk '{print $1}'`
3 s. M. c7 R- N5 ], @1 r. B0 V, D: R) o
for i in $SRC ; do
# y- ^0 a9 v- z( C! F- uif [ "$i" != "autoln.sh" ] ; then
$ P: e3 h# a" O( i, { |#echo $i
" B: J9 _- J; Y+ T7 lTARGET=`echo $i | sed 's/arm-unknown-linux-gnueabi/arm-linux/g' `( i/ g' @/ D+ N4 \/ N( \, ^. [, l* G
echo $TARGET% l: g- {4 Y- y4 W
ln -s $i $TARGET4 u/ H$ A1 O' m: s1 M! R
fi' k( }5 t- h( r
done 错误与解决 1.[ERROR] Missing: 'i486-linux-gnu-gcj' or 'i486-linux-gnu-gcj' or 'gcj' : either needed! 解决:sudo apt-get install gcj 2. [ERROR] Build failed in step 'Retrieving needed toolchain components' tarballs'
/ d' d( O! t$ ]9 W2 E. q[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
8 W+ z$ ?* X2 S* j[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' at line # 471 in function 'CT_GetCVS'
, S- u% F, \, L3 p+ G/ `[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 31 in function 'do_libc_get'$ ^' z& x' q& l
[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 449 in function 'main'
) x! ~& P/ G+ w9 v[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.
$ z$ s) q7 f' M6 O( B" W' E[ERROR] (elapsed: 33:29.56). A3 ~3 ]% M# @
[33:30] / make[1]: *** [build] 错误 127
4 }5 g5 @& q/ m [1 nmake: *** [build.4] 错误 2 解决: sudo apt-get install cvs 3. [INFO ] Installing C library headers
" {" k$ R$ d7 n4 F/ X) z k[EXTRA] Configuring C library
! }0 e, L; X3 p, x[EXTRA] Installing C library headers( i) e* ]5 J/ u+ h
[ERROR] make[3]: *** [/home/star/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi//sys-root/usr/include/gnu/lib-names.h] Error 13 ~9 S) t! k; M! n# ` ^
[ERROR] make[2]: *** [install-headers] Error 2$ o/ V3 z9 s5 ~1 t6 O4 w/ R
[ERROR] Build failed in step 'Installing C library headers'
9 n$ a; Q d+ w, l* L3 t! ]! U2 c[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)& W7 v9 @# y( n; t' a
[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 185 in function 'do_libc_headers'4 b, B2 ~6 |: s
[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main') m% ^8 k0 x1 o7 C# a" c$ t" V
[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.. g7 g, [! v1 x O
[ERROR] (elapsed: 36:41.91) P! V: T* d- p' e
[36:42] / make[1]: *** [build] 错误 2
( N" c) v! w8 r3 W0 Wmake: *** [build.4] 错误 2 解决:查看build.log [ALL ] /usr/bin/install: cannot stat `/tmp/crosstool-ng/targets/arm-unknown-linux-gnueabi/build/build-libc-headers/gnu/li D$ n; Q! g7 `' H: \! Y. `
b-names.h': No such file or directory 但在这之前也发生了一个error,但crosstool-ng并没有报错 [ALL ] mawk: scripts/gen-sorted.awk: line 19: regular expression compile failed (bad class -- [], [^] or [)
8 }8 _# |, s4 L& O( p[ALL ] /[^
# S( P0 b6 h0 P) T[ALL ] mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]: }( F! ~( l! n( Q. }0 a& s5 N
[ALL ] mawk: scripts/gen-sorted.awk: line 19: runaway regular expression /, "", subd ... OK,在gen-sorted.awk第19行,出错,这是一个简单的错误,缺少了转义符 查找一个看有没有类似的 cd /tmp/crosstool-ng/targets/src/glibc-cvs-2.9/scripts sed '/\^\//p' gen-sorted.awk -n 输出的则是存在语法错误的语句 可以直接用 sed -i 's/\^\//\^\\\//g' gen-sorted.awk 这种方法是不完善的,后面的还是会出现错误。 网上搜了下,需要用/usr/bin/gawk 替换/usr/bin/mawk,即 sudo apt-get install gawk cd /usr/bin sudo mv mawk mawk.bak sudo ln -s gawk mawk 4. [INFO ] =================================================================) f4 p+ C0 Z0 b) c, L; q5 P
[INFO ] Installing C library
* H2 f. \ \5 Q; {' `. c! J[EXTRA] Configuring C library
% @7 B8 \1 s/ g5 h) n[WARN ] Removing "-pipe" for use with glibc>=2.6
7 E4 c$ {# t, O4 t[EXTRA] Building C library$ s$ }9 ]$ U0 k; T8 Q% m# B$ A
[ERROR] make[4]: *** [/tmp/crosstool-ng/targets/arm-unknown-linux-gnueabi/build/build-libc/elf/ld.so] Error 2
8 H- e' `: d$ \ y[ERROR] make[3]: *** [elf/subdir_lib] Error 2; ]+ g* Q- Y" W$ @: `
[ERROR] make[2]: *** [all] Error 20 d8 Z/ s5 { _0 |5 b. P/ L
[ERROR] Build failed in step 'Installing C library'4 U, |- X- U, M! I
[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
I* J! w( {- [+ Y- _2 k6 b9 \" e[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 504 in function 'do_libc'
! i& ]( Z8 R5 a4 |[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'9 u, q3 _# {1 \) \6 ~( R8 \( p) N
[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.$ M9 z: _* Q1 h
[ERROR] (elapsed: 32:05.76)7 r n2 J$ D1 A; Y; O; c. {* B6 y& t' Z
[32:06] / make[1]: *** [build] 错误 2
. V- I& q, w& Q* A- d$ Q) p; b% Mmake: *** [build.4] 错误 2 解决: sudo apt-get install gawk cd /usr/bin sudo mv mawk mawk.bak sudo ln -s gawk mawk
$ V- [. F) X8 {5.
o0 g& a% {1 S* n49567 [ERROR] configure: error: no termcap library found
/ j9 B3 q3 S# m+ L9 R% O/ e49568 [ERROR] make[3]: *** [configure-gdb] Error 1
% X$ ?0 L8 E9 y/ h; }+ m9 i" g4 u* c49569 [ALL ] make[3]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'; U2 |( r4 p; O. U
49570 [ERROR] make[2]: *** [all] Error 2
/ ]7 B6 V5 x4 h- v49571 [ALL ] make[2]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'
. P. \0 ]5 P" p3 Z0 M% q& O49572 [ERROR] Build failed in step 'Installing cross-gdb'
5 T6 ^/ v0 L2 C _" N+ f& P+ `' x49573 [ERROR] Error happened in '/usr/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
1 x! ]4 ]- f, f, k- e7 U49574 [ERROR] called from '/usr/lib/ct-ng-1.4.1/scripts/build/debug/300-gdb.sh' at line # 126 in function 'do_debug _gdb_build'
+ p' ^2 [% f* D5 D8 Y49575 [ERROR] called from '/usr/lib/ct-ng-1.4.1/scripts/build/debug.sh' at line # 35 in function 'do_debug'4 h( A9 m8 Q4 P: W% V
49576 [ERROR] called from '/usr/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'! v. m' F' H1 {! e% t- }
49577 [ERROR] Look at '/opt/arm/4.3.2/arm-unknown-linux-gnueabi/build.log' for more info on this error.$ E! M. Z& n$ z; e+ p7 ?
49578 [ERROR] (elapsed: 72:30.97)' p9 `) h4 Y! c6 {
: d. a) P! v" f$ g4 C* X解决:3 H* U7 _. a3 i) S; J
这个问题我只在ubuntu 9.0.4中遇到过...缺少了termcap 库,但我在源里又没有搜到termcap相关的库(似乎是被其它库替换了,termcap这东西的确很古老)# R* Q( M0 ]! I7 A4 `4 g
cd /tmp
3 B+ C0 O5 s0 L+ L+ rwget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
, W! `% {2 V( ftar zxvf termcap-1.3.1.tar.gz
( a% {8 c: r! O- \$ m" M# t1 Ocd termcap-1.3.16 \0 {, }) k: X Q; h N! B
./configure --prefix=/usr
8 ~0 x6 z( q+ Z) t+ zmake
* M }# c8 J* R$ ~5 j8 ^make install3 w) H' N1 L/ g0 W1 Y0 ~
(又需要从头编译工具链了 …… )
! u7 W7 e1 j# Q2 U4 S" L |