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版本的。7 \4 n2 {# B3 j7 Q# K
( l" g3 g9 i( k. b一、下载crosstool-ng,并为使用安装必要的软件。+ A* n5 s5 p* @3 A5 p1 W }
刚开始选者的工具是crosstool,但是后来发现它支持的gcc的版本太低了,所以就选择了crosstool-ng工具。
' f$ o1 ~" e3 W8 _7 x1 ]. V
4 \+ X' A+ s: R# p我使用的是crosstool-ng-1.9.0版本。用的是ubuntu9.04的平台。
- x L* q4 C0 o x使用crosstool-ng必须依赖一些开发用的软件包:libncurses5-dev、bison、flex、texinfo、automake、libtool、patch、gcj、cvs、cvsd、gawk。
4 `0 b& H* c$ m+ y1 J用指令:sudo apt-get install xxx进行下载安装( S, S! }$ Y" L0 y- ?
最后根据用crosstool-ng建立arm-linux交叉工具链的介绍,最好手动安装一下termcap。
& _: ]7 |4 b/ i4 m/ H2 ]2 v; K& o二、解压、打补丁(如果有)并建立工作目录。
. L2 G% d# _0 W+ z' ^crosstool-ng和crosstool不同的地方之一就是:她并不是一下载下来就可以使用了,必须先配置安装。
- u7 c8 l& l8 G0 H$ F) w! ^) E# c" x' y将下载下来的crosstool-ng-X.Y.Z.tar.bz2解压到你为她准备的工作目录(这里假设为${CROSSTOOLNG}),并建立安装和编译目录 三、安装crosstool-ng $ mkdir ~/croosstool-ng # 在当前用户目录下建立croosstool-ng目录
" ~+ q4 V {% D2 M! m* v$ cd ~/croosstool-ng0 I" s# f2 L! m# a# J) ?6 S
$ mv /tmp/crosstool-ng-1.9.0.tar.bz2 ./ # 把下载的crosstool-ng软件包放到 crosstool-ng目录中
+ Q/ l, A! s5 q/ S$ tar -jxvf crosstool-ng-1.9.0.tar.bz2 # 解包9 I- t2 s, A+ D0 m- S
$ cd crosstool-ng-1.9.0 # 进入解压目录
! f* |9 T$ h1 q( @$ patch -p1 < <补丁文件>#给crosstool-ng打补丁(如果有)
9 e$ z/ P/ Q' e$ ./configure --prefix=/opt/crosstool-ng # 配置crosstool-ng1 n$ @0 a9 U2 c
$ make # 编译crosstool-ng0 A6 I: h8 m9 w0 ?' o$ a% I4 l
$ sudo make install # 安装crosstool-ng) t: ~5 ?! D$ p; u% m
$ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc # 为后面调用ct-ng命令增加环境变量
7 R: S0 Y) I5 W$ source ~/.bashrc2 g* N! u* e5 x: \. r
$ ct-ng help 出现帮助信息表明安装成功了 四、配置交叉编译工具链 $ cd ~/croosstool-ng
& p6 ^' U2 o; @7 f3 r7 }/ f2 X$ mkdir crosstool-ng-1.8.1_build # 建立一个交叉工具链的输出目录! m$ l% ]. R* h, j: w/ x3 M. R
$ mkdir src # 建立保存源码包目录
! e4 ]3 I W! o# K, e F$ mkdir x-tools # 建立交叉编译器的安装路径
0 Y, _5 ~6 r; n( w/ E& M: |$ cd crosstool-ng-1.8.1_build/
6 T( h. {3 p N0 y4 ]+ H$ cp /opt/crosstool-ng/lib/ct-ng-1.8.1/samples/arm-davinci-linux-gnueabi/crosstool.config .config#拷贝davinci平台的默认配置选项
8 T/ {" C g& X' X- HPS:为加快速度,根据配置自行下载相应的软件包。(选做)
' N( D: o" W4 K/ {6 O! _虽然crosstool-ng发现找不到软件包的时候会自动下载,但是比较慢。根据这次的配置情况(查看“.config”文件),我预先下载了以下的软件包:* ` E0 ?! Y) U/ Y3 S$ l$ u
binutils-2.20.1.tar.bz2) |) Q( u3 A: }2 }, ^
glibc-2.9.tar.gz
1 i) _ t1 _ m/ h. M! M; Rdmalloc-5.5.2.tgz: s4 Y! i, p, Y0 K$ F
glibc-ports-2.9.tar.bz2
& H% H( v# C( K# `mpfr-2.4.2.tar.bz2; O4 n/ h7 K0 p. K" M" v6 R1 y* Z
duma_2_5_15.tar.gz
! w- ?7 F. o1 K I: Z% p* fgmp-4.3.2.tar.bz2
1 R# B8 U. K3 j9 G8 Qncurses-5.7.tar.gz0 E4 B9 J/ p( U5 p- N' G
ecj-latest.jar
# w) q; P9 T) ~3 N( J2 d/ X- ilibelf-0.8.13.tar.gz; j" G1 X- w+ y8 V) } z, x
sstrip.c, E5 C7 \7 d9 O2 Y) o! c2 b
gcc-4.4.3.tar.bz21 W9 \3 Q9 x# ?8 {: q0 T
linux-2.6.33.7.tar.bz2
% s7 X# R8 w1 H" `+ _4 r/ F; l4 gstrace-4.5.19.tar.bz2
6 q1 e: e, Z3 Ugdb-6.8.tar.bz2
6 W% k- ]8 D4 [. U& I, i* Z) [ltrace_0.5.3.orig.tar.gz8 p4 W/ N6 J8 _! m
2 F' {4 O F/ v8 M5 ~下载完之后,记得将这些软件包放在配置时指定的文件夹(src/下)( j% w2 R8 V R! g+ q
以上工作都完成以后,咱们就要开始真正的配置工作了。+ b7 f1 x) U) F. e6 U3 M
首先用终端进入到crosstool-ng-1.8.1_build/目录下。* e8 _# L5 [; E
然后执行$ ct-ng menuconfig, 此时会出现crosstool-ng的配置窗口。
1 V+ G& b+ e/ r6 t y& M* x, ]/ A1、已下载好的源码包路径和交叉编译器的安装路径。
8 X: j# A: a4 ~# a, a. L6 U8 CPaths and misc options --->
9 X/ |5 Y& P! `3 x m" l(${HOME}/crosstool-ng/src) Local tarballs directory保存源码包路径 G( X4 m( q* B
(${HOME}/crosstool-ng/x-tools/${CT_TARGET}) Prefix directory交叉编译器的安装路径
( I3 T4 |, m1 x3 g3 S2 P以上根据自己的路径自行修改
9 V8 j. C9 V5 _4 D. R. T2、修改交叉编译器针对的构架, f/ ?4 d) H! d* ]/ u
Target options --->
; O, p3 }- W: i由于咱们是copy的默认的davinci的配置文件,所以这项不用修改
, v6 r; {+ {" H7 O* u+ l/ m3、增加编译时的并行进程数,以增加运行效率,加快编译。6 F4 }8 a& z4 }9 z, F
Paths and misc options --->/ _& Z# _% W$ A1 F4 C% h% \
*** Build behavior ***
- q/ E$ r, p2 H' b(4) Number of parallel jobs
4 [' k/ }% P5 R, T这个数值不宜过大,应该为CPU数量的两倍。由于我的CPU是双核的,所以我填了4. p3 H$ n, l$ y' W' [
4、选择gcc版本号" x1 i2 z. E- M6 I2 A# Q( o! o( _: V8 ^
C compiler --->
& b' p2 g0 Y$ | Jgcc version (xxx)---> //选择咱们需要编译的gcc 4.4.3% j- R, v# d. @0 \. B1 j/ J
5、其他工具包版本选择
' P( m* E0 |5 T: R1 sOperating System --->
/ m+ w) V5 J7 M: YLinux kernel version---> 内核版本% D# m$ E9 p8 ~/ y, U# i: d' t+ e
Binary utilities --->1 D3 v2 p9 m G% T6 D# E% {
binutils version---> binutils包. | A9 P; p+ k( {% E- Z) S. Y
C-library--->6 L4 ~/ ^- d* c5 l/ [* A
glibc version ---> c库( z8 l1 Q0 M8 e- b- P* Z" Y6 U* o9 b
Companion libraries--->( A: r+ O/ R I, v% G' Q! t$ u0 Y$ ?
GMP、MPFR、PPL、CLooG/ppl等版本的选择) o4 r% r* C% G. c
6、修改操作系统选项,禁止内核头文件检测
' V B- ?7 X, t/ }Operating System ---> [ ] Check installed headers6 Q) O* [3 n' a) w; R# j
另:在选择CLooG/ppl版本时,我刚开始选择的是CLooG/ppl 0.15.10,但是出现了一下错误% h/ ^! Q3 ]( w
[ERROR] Build failed in step 'Installing CLooG/ppl'; G/ b/ E1 m. X. i
[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.9.0/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)+ g0 P1 j; z, C% w
解决方法:选择CLooG/ppl 0.15.9就可以了。 五、编译工具链 配置完后,在crosstool-ng-1.8.1_build目录下执行命令:$ ct-ng build.4。 我的比较慢用了4个小时,但是别人都用了40分钟,dont know why?
. ^" ?, ~; P! c8 d( l编译好的工具链在x-tools/arm-davinci-linux-gnueabi/bin目录下面,添加到环境变量中就可以使用了。
$ d, H( g) s8 d4 t& r- p$ e最后测试一下工具链版本:
7 y. ~) w7 t% v9 D3 t#arm-davinci-linux-gnueabi-gcc -v
; E X. ?% [ c" Y4 j1 P#Using built-in specs.% y+ }3 s1 n. Y5 R
Target: arm-davinci-linux-gnueabi
8 `4 |" X8 U" |Configured 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* A6 w) f4 k. ?3 w# P
Thread model: posix; e* {* q, R" m( o, A L
gcc version 4.4.3 (crosstool-NG-1.9.0) : \* y9 v" ?0 b) F! n( H9 V1 }' D
crosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者.2 b- P" p; e* z- W1 l) S
使用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 */+ v* _" C$ ?- g9 T0 L( }
#if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1* r2 i" F7 S" n- e" f
# error Your version of gcc miscompiles the __weak directive- G$ z" b% w2 |( x/ Y
#endif 所以使用crosstool-ng建立一个新的工具链(gcc 4.3.2 glibc 2.9),以支持对最新kernel编绎.
9 \7 Q+ R/ E" W& w% ^! g测试环境: Debian Linux 2.6.18-6-6866 m. }/ {3 u' t3 N
Ubuntu 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( A4 p6 F4 t# k% v3 @% E( c
/ {, W3 N4 _1 e$ r; jUbuntu 9.0.4 请先安装下 termcap库 参考本文 错误与解决 4.. . 3.crosstool-ng使用范例 本范例记录了使用crosstool-ng编绎arm-unknown-linux-gnueabi工具链的过程 cd /tmp/crosstool-ng mkdir build_toolchain
3 f( B3 N- n9 T: K- L i$ umkdir ~/src; q* u* y7 K4 M6 k3 D/ y+ ~
生成默认配置文件: ct-ng arm-unknown-linux-gnueabi
; _/ ~$ Y7 k$ Q% J1 v也可以这样子:
6 Q1 N+ x; D+ K3 xcp /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 退出保存配置文件,手动修改内核头文件的安装版本,以修正段错误:9 W- k2 B9 _; S
vim .config 修改kernel的安装版本 CT_KERNEL_VERSION="2.6.18" 修改libc中配置的内核头文件的安装版本至2.6.18 CT_LIBC_GLIBC_MIN_KERNEL="2.6.18" 保存退出(注意若使用ct-ng menuconfig进行配置,上面的手动修改信息会丢失,需再次从头配置)
5 [, X% n# x2 K5 Y2 yPS:如果你编绎还是失败了或者测试失败了,那可以参考一下,我测试通过的配置文件:crosstool-ng for arm720t配置文件
5 g" h' G( v2 L
$ o! V$ D% n9 N( Q* I4 b. H3 u4 v
, B) b* A2 B0 o) ]-----------我是分隔线 2010快乐 -----------------------------------
' @9 ^. z9 E+ Y* R" q6 l
! t R4 P$ e* V* ulibc库已经换用git来管理源码(sources.redhat.com),下面两个包
$ M3 M; p" H5 J: G ~% ^- Gglibc-cvs-2.9.tar.gz
$ u/ Y) S8 V- }8 |glibc-ports-cvs-2.9.tar.gz
, [2 f: E- |9 z7 p- h ?将无法从cvs中取出,临时可以这样子解决:1 f8 _( R* e; d% k2 G' v0 W5 g- a
cd /tmp/2 ]2 N) J( @" t4 H; `% Y9 q! w
wget ftp://sourceware.org/pub/glibc/releases/glibc-2.9.tar.bz2+ Z7 e) s, F# P a9 ~: ?5 l
tar jxvf glibc-2.9.tar.bz2
& d$ P: i/ ^* ]mv glibc-2.9 glibc-cvs-2.9
- j3 M& q) G" D: f( ttar zcvf glibc-cvs-2.9.tar.gz glibc-cvs-2.9
* C; J9 v& D! U- L$ _
% s! y- m: h3 |1 Ewget ftp://sourceware.org/pub/glibc/releases/glibc-ports-2.9.tar.bz2: R5 K) V1 `0 d
tar jxvf glibc-ports-2.9.tar.bz2
2 O2 u5 n7 k$ P6 @1 pmv glibc-ports-2.9 glibc-ports-cvs-2.9
' U4 S" {: @/ W0 Dtar zcvf glibc-ports-cvs-2.9.tar.gz glibc-ports-cvs-2.9* k* @! X. w) A8 a \0 M. P `8 Q
% S" `# ]( \, L8 t复制这两个*.gz包至 crosstool-ng设置的包下载路径(本例中设置的是:~/src)
& Z* h- A5 u& K& T8 V. W# l
4 a T+ F& y; l; t--------------------------------------------------------------------------------------
开始编绎(在我的机子上耗时一小时) ct-ng build.4(用太多线程,很耗系统资源) 4.为工具链增加新链接 0 s# Z8 s7 r- ]- A0 R
cd /opt/arm/4.3.2/arm-unknown-linux-gnueabi/bin ./autoln.sh autoln.sh是一个脚本,用来自动链接arm-unknown-linux-gnueabi的工具... 文件名:autoln.sh 拷到要自动建立链接的文件夹使用。 #!/bin/bash
% A, w' ~8 f- S; ]$ f: b+ J
$ R* {7 I) z6 |#
* m g/ r1 n! r8 g- s: ?# main
1 [1 A8 @4 }8 o% P* g#
# x1 ]2 F9 ]( qif [ $# -lt 1 ] ; then* l5 A. S2 J% C9 T) ]! a
echo "default path: ./"4 f* T. u) ^$ P! r/ K
BIN_PATH=./
. c6 k; X% h0 {8 p! n" Zelse# Y5 Q, \* T& X2 X4 [- O# {% U0 _# \2 ]
BIN_PATH=$1
$ y8 v6 @4 e4 Q' ]; \8 ? x1 \fi
# C; @; F# N; Q; Fif [ ! -d $1 ] ; then* O% ?/ H( e/ t3 F( ~! k0 I
echo "path error"
- v1 w: \ k4 l5 S8 Y8 w# Eexit5 Q _" ?# }5 a$ M& B5 I( T
fi
! F5 s( _/ V. N f1 g% q% rcd $BIN_PATH1 A1 f( u8 q, v
SRC=`ls | awk '{print $1}'`* V) q/ B5 ^, |# V2 @1 c
; |6 n* v. L2 u+ ?! g1 a& P0 l
for i in $SRC ; do; L! O4 A6 I; G$ Q: f, \' E* C) q) q
if [ "$i" != "autoln.sh" ] ; then, R% o0 g5 u c9 o$ r2 y9 P
#echo $i' m) {: u4 O4 P% m3 x9 M
TARGET=`echo $i | sed 's/arm-unknown-linux-gnueabi/arm-linux/g' `
: {4 S6 f* ]+ N4 L; P$ techo $TARGET
% l, N) _9 I. W" ~( y3 Mln -s $i $TARGET5 d2 f' L3 A0 P1 O/ ^" s
fi: O1 B. z- M4 ~1 f8 {9 b, M
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'
3 {* V, e& e w& {% D" Y- u[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
/ G7 W( H" d+ n[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' at line # 471 in function 'CT_GetCVS'8 |& D+ F; B# C1 {) }
[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'& L0 m# |3 R* F* [! ?& ^
[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 449 in function 'main'
, _+ ~- z$ g$ Y. A0 w5 ~/ _2 F" X[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.
6 m. `- f/ d$ k7 _[ERROR] (elapsed: 33:29.56)
1 D5 r; D) e3 h, a5 ][33:30] / make[1]: *** [build] 错误 127" I/ \' b- ^) W1 C' _
make: *** [build.4] 错误 2 解决: sudo apt-get install cvs 3. [INFO ] Installing C library headers B! _: d4 r# [$ ^0 j! W3 c
[EXTRA] Configuring C library- B2 k) q# P5 A" }+ q: ]
[EXTRA] Installing C library headers
8 |5 Q+ M k. E+ v- A+ A/ R& Q[ERROR] make[3]: *** [/home/star/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi//sys-root/usr/include/gnu/lib-names.h] Error 1: N5 d3 s$ ?, z- f) u
[ERROR] make[2]: *** [install-headers] Error 2
; `! `( f' L9 z/ d- Y- u! W[ERROR] Build failed in step 'Installing C library headers'1 I, W% W, G. M7 H
[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)0 m+ C( P& [8 F5 {2 K
[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'5 N" ^9 i% x: @. v
[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'
2 j3 C1 B5 E H: I' n( X[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.2 E% n# n3 R' w
[ERROR] (elapsed: 36:41.91)* a* F/ K1 h( H+ b D) _
[36:42] / make[1]: *** [build] 错误 2
. t5 l7 D @+ j; u# Ymake: *** [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: X9 S6 G3 m1 W5 |* ^2 o
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 [)
' e, i- ~ N6 I) T0 ][ALL ] /[^( B p8 t" X* I4 S8 o
[ALL ] mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]% `7 P# _' z$ H) I
[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 ] =================================================================
* ]: Z' L' G7 D4 T. w4 F[INFO ] Installing C library' m$ U3 Y4 O$ X& `
[EXTRA] Configuring C library8 \. k) Q) _) o1 X$ c7 `: d
[WARN ] Removing "-pipe" for use with glibc>=2.6
& I4 T+ e: p) S0 V G1 q[EXTRA] Building C library
4 u. q" F3 e) ^7 a6 Y( S/ C* G6 a3 M[ERROR] make[4]: *** [/tmp/crosstool-ng/targets/arm-unknown-linux-gnueabi/build/build-libc/elf/ld.so] Error 29 o9 v) Z; @. d* b
[ERROR] make[3]: *** [elf/subdir_lib] Error 2
8 u' S& e0 T0 p! P" I[ERROR] make[2]: *** [all] Error 2
/ |6 c/ R$ D. v- v$ ?+ a[ERROR] Build failed in step 'Installing C library'
. r; a0 Z0 n) D9 T `. z[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
C" ?8 x6 ^; L1 k1 a) z[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 504 in function 'do_libc'/ G* a3 b( q* ]% B! ^1 N0 b0 h6 z
[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main': d' w/ R7 E5 g
[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.& K4 u# _* S7 Z0 ~( t/ P6 l4 O
[ERROR] (elapsed: 32:05.76); I4 P% `1 |9 p( h# M
[32:06] / make[1]: *** [build] 错误 2
- F" R7 `4 f& V0 H* Dmake: *** [build.4] 错误 2 解决: sudo apt-get install gawk cd /usr/bin sudo mv mawk mawk.bak sudo ln -s gawk mawk& L! p. {" p' v7 V8 U! ^# w& d
5.
( W; f u) R8 q' X @49567 [ERROR] configure: error: no termcap library found6 G; D- q) m+ |4 q$ J: _) i" i
49568 [ERROR] make[3]: *** [configure-gdb] Error 1
+ V& H0 k& T3 C3 V F" M; @49569 [ALL ] make[3]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'
0 H( A- u/ s5 n, d; c% M. x7 ]3 l49570 [ERROR] make[2]: *** [all] Error 2
, F! W0 Y2 i9 |; G$ A2 d: t5 f2 E6 ~49571 [ALL ] make[2]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'* J% z2 j1 |8 F
49572 [ERROR] Build failed in step 'Installing cross-gdb'
( I5 S: r4 v" f! r( j49573 [ERROR] Error happened in '/usr/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)6 @6 y" v* z6 T! D
49574 [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'" @$ G) G$ e- f& H
49575 [ERROR] called from '/usr/lib/ct-ng-1.4.1/scripts/build/debug.sh' at line # 35 in function 'do_debug'
+ u1 S! W8 q6 _. _: [! g49576 [ERROR] called from '/usr/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'
& P, k: M& N8 N4 n; |8 {2 Q49577 [ERROR] Look at '/opt/arm/4.3.2/arm-unknown-linux-gnueabi/build.log' for more info on this error.# d1 ~0 Z' P+ b* @8 [* d$ n
49578 [ERROR] (elapsed: 72:30.97)
' N- q0 ^ K* }/ U- ^9 ^2 q3 @" b& w0 g
解决:2 X0 C0 Z; R9 `! ^+ A
这个问题我只在ubuntu 9.0.4中遇到过...缺少了termcap 库,但我在源里又没有搜到termcap相关的库(似乎是被其它库替换了,termcap这东西的确很古老)7 G/ E- o9 N! T5 S. P* W
cd /tmp
* q' k- G1 @6 z0 Xwget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz) P4 \4 [% P* \8 Z! T3 \
tar zxvf termcap-1.3.1.tar.gz! v* h, e3 o! M! ~
cd termcap-1.3.1
, C' m8 B0 u+ i+ |# ^- I) S./configure --prefix=/usr
% s& ~! }8 R8 F3 y7 }make
' S# @; E O9 q/ `- ]( emake install8 I0 H m: {' M& m5 p
(又需要从头编译工具链了 …… ) 3 I* s8 \3 V* \$ O" L4 U
|