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版本的。
" I# ~, s& ^$ Z5 D: G! F/ c! i. T0 ^! q0 k
一、下载crosstool-ng,并为使用安装必要的软件。
- j4 b/ S# |$ C5 J) B$ R刚开始选者的工具是crosstool,但是后来发现它支持的gcc的版本太低了,所以就选择了crosstool-ng工具。0 Y1 z- s6 e( T% @# j
8 v- ?: J) Q5 ]) c我使用的是crosstool-ng-1.9.0版本。用的是ubuntu9.04的平台。
# L0 A3 v: g7 C: x/ E使用crosstool-ng必须依赖一些开发用的软件包:libncurses5-dev、bison、flex、texinfo、automake、libtool、patch、gcj、cvs、cvsd、gawk。
' Z2 e$ y( u1 K用指令:sudo apt-get install xxx进行下载安装
2 n( d) n5 P. e$ i; `# n9 t最后根据用crosstool-ng建立arm-linux交叉工具链的介绍,最好手动安装一下termcap。! H( s8 c! O }9 j. G/ n, b
二、解压、打补丁(如果有)并建立工作目录。
" c- R5 \3 y5 f G1 Acrosstool-ng和crosstool不同的地方之一就是:她并不是一下载下来就可以使用了,必须先配置安装。
! Z0 X) @+ Q Z, B& Q8 g将下载下来的crosstool-ng-X.Y.Z.tar.bz2解压到你为她准备的工作目录(这里假设为${CROSSTOOLNG}),并建立安装和编译目录 三、安装crosstool-ng $ mkdir ~/croosstool-ng # 在当前用户目录下建立croosstool-ng目录
* N' K9 i+ K. Q5 ^+ E7 Y$ cd ~/croosstool-ng% c# X6 L7 b8 F# s) Q% {
$ mv /tmp/crosstool-ng-1.9.0.tar.bz2 ./ # 把下载的crosstool-ng软件包放到 crosstool-ng目录中
n& J& H) U9 {3 q2 v$ tar -jxvf crosstool-ng-1.9.0.tar.bz2 # 解包
; y2 ?. V+ p+ P" v! x$ O: J' c$ cd crosstool-ng-1.9.0 # 进入解压目录2 H& {& J. Z+ y! _& ?
$ patch -p1 < <补丁文件>#给crosstool-ng打补丁(如果有)
; l: j& L( v$ ]; n. l" I1 a, _$ ./configure --prefix=/opt/crosstool-ng # 配置crosstool-ng6 @) {* \! n7 z/ m
$ make # 编译crosstool-ng8 {+ b9 t2 ?- b" E4 U* h+ O# q
$ sudo make install # 安装crosstool-ng
+ i- @2 e/ s+ p1 q/ d& @1 z- ^1 F% h$ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc # 为后面调用ct-ng命令增加环境变量# c6 X' R4 H% g) G0 t' U
$ source ~/.bashrc
- G) t& y" z# _& H' C6 j0 C: q$ ct-ng help 出现帮助信息表明安装成功了 四、配置交叉编译工具链 $ cd ~/croosstool-ng9 g3 _& s4 q6 h3 G
$ mkdir crosstool-ng-1.8.1_build # 建立一个交叉工具链的输出目录2 x/ H) L$ m& _; C4 j2 Z: E
$ mkdir src # 建立保存源码包目录0 N# |5 T; H m3 i6 E4 t
$ mkdir x-tools # 建立交叉编译器的安装路径
1 e) w3 ]7 n0 q% ]+ n$ cd crosstool-ng-1.8.1_build/& H# P0 p4 g9 e1 P( d% t [4 o
$ cp /opt/crosstool-ng/lib/ct-ng-1.8.1/samples/arm-davinci-linux-gnueabi/crosstool.config .config#拷贝davinci平台的默认配置选项; a4 r0 ^/ |. @2 y# e k0 b$ q
PS:为加快速度,根据配置自行下载相应的软件包。(选做)
8 z* j) l A8 O" f' X: [虽然crosstool-ng发现找不到软件包的时候会自动下载,但是比较慢。根据这次的配置情况(查看“.config”文件),我预先下载了以下的软件包:
0 j# f- s4 ~/ b7 {' Obinutils-2.20.1.tar.bz2
; V* f/ g0 F/ ^1 S1 A$ ^# S0 ^+ oglibc-2.9.tar.gz
. D0 t8 ~* j& a, rdmalloc-5.5.2.tgz1 q/ Q6 N0 [- t4 f
glibc-ports-2.9.tar.bz2
3 V# l+ i1 R0 @% t2 ?% r- Gmpfr-2.4.2.tar.bz2
7 x" _0 }. W$ O/ hduma_2_5_15.tar.gz
' ]% |! E0 C+ `( [' Tgmp-4.3.2.tar.bz28 n4 G+ |: z8 O. d
ncurses-5.7.tar.gz
/ `+ q) R( }6 Z0 C6 Hecj-latest.jar
: `5 b( j7 D$ b. X6 t, qlibelf-0.8.13.tar.gz( S& {$ G: K' {! G6 W$ c7 w% k4 R
sstrip.c
# k7 [2 E, J! e' _8 Agcc-4.4.3.tar.bz2
7 |. _& Y" d/ v3 _) @; u( Slinux-2.6.33.7.tar.bz2) ?' m" o9 ]' e0 A
strace-4.5.19.tar.bz28 D7 `" ~0 [7 [: [7 i7 m
gdb-6.8.tar.bz24 t5 l& |) @. v5 e7 s- d
ltrace_0.5.3.orig.tar.gz5 E* G0 E0 P& w. r% [2 Q
4 P6 T. E6 E! j% v1 X
下载完之后,记得将这些软件包放在配置时指定的文件夹(src/下)( E# \/ ~* D$ X# N
以上工作都完成以后,咱们就要开始真正的配置工作了。0 n* p! h" R3 ^
首先用终端进入到crosstool-ng-1.8.1_build/目录下。
+ ] `/ b6 h2 `2 y+ L) }9 @# y2 w! T: _然后执行$ ct-ng menuconfig, 此时会出现crosstool-ng的配置窗口。- X( t9 m7 {8 D5 {" c: A
1、已下载好的源码包路径和交叉编译器的安装路径。' T8 J: ?+ f" U" l0 N/ F0 H
Paths and misc options --->
+ J' `& N/ [ ^9 r& C" B(${HOME}/crosstool-ng/src) Local tarballs directory保存源码包路径
5 T% ?* b: D; m# [& c) j(${HOME}/crosstool-ng/x-tools/${CT_TARGET}) Prefix directory交叉编译器的安装路径
3 D, \ V$ m: D+ m以上根据自己的路径自行修改
( k1 ?8 ]% e1 I6 f2、修改交叉编译器针对的构架: o% \7 v* T, s# ^. Y6 u
Target options --->' w9 X6 Y1 H6 f5 B0 o
由于咱们是copy的默认的davinci的配置文件,所以这项不用修改1 K7 p$ _, A5 _' z3 I3 R
3、增加编译时的并行进程数,以增加运行效率,加快编译。
4 y' { D0 i* i# f* a- xPaths and misc options --->: s4 z8 X I1 Y8 d; B7 v
*** Build behavior ***
' m L' t6 _; C& C3 w/ v& C% X(4) Number of parallel jobs
. N! \: ]" L D' S( n, `这个数值不宜过大,应该为CPU数量的两倍。由于我的CPU是双核的,所以我填了4; L/ y# G( z# _ ]7 t# G& z
4、选择gcc版本号- \* C( e0 ~* F, w
C compiler --->
/ h5 e- j; s6 F$ d0 Ggcc version (xxx)---> //选择咱们需要编译的gcc 4.4.3
; e+ u" t$ S+ ^ [7 m5、其他工具包版本选择6 s, m9 @+ |9 ~) \$ c" \7 B Z
Operating System --->% Z" E* p% Z# Y& A+ J V# W& q# z
Linux kernel version---> 内核版本9 t" n" R$ i& F7 [$ ~" s6 k
Binary utilities --->! e1 Z6 e6 L# b f5 N
binutils version---> binutils包' T! A- b/ p6 ^& B+ f
C-library--->% v1 m* J6 t6 b
glibc version ---> c库$ J2 Y. t S$ r7 C
Companion libraries--->0 ~0 ^0 T& @. C* x: Y
GMP、MPFR、PPL、CLooG/ppl等版本的选择$ G! a0 c+ C8 f6 T
6、修改操作系统选项,禁止内核头文件检测
" |' F7 ]' o$ T% {Operating System ---> [ ] Check installed headers
2 O/ n4 [# N" X6 y/ C+ J) k1 r; R ]另:在选择CLooG/ppl版本时,我刚开始选择的是CLooG/ppl 0.15.10,但是出现了一下错误( _3 U2 |% d% I) A& x9 T+ A- T
[ERROR] Build failed in step 'Installing CLooG/ppl'
w; ^7 N; Y' X/ |# R5 y# m[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.9.0/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
- g( o% U+ ]; n" e3 |$ Q: @2 r* F解决方法:选择CLooG/ppl 0.15.9就可以了。 五、编译工具链 配置完后,在crosstool-ng-1.8.1_build目录下执行命令:$ ct-ng build.4。 我的比较慢用了4个小时,但是别人都用了40分钟,dont know why?/ s3 [4 w D$ o" _8 X' M8 E2 \; `
编译好的工具链在x-tools/arm-davinci-linux-gnueabi/bin目录下面,添加到环境变量中就可以使用了。
' }, j3 F! ^6 ?2 D最后测试一下工具链版本:2 h: h: m3 Z1 |/ O' T3 J, O
#arm-davinci-linux-gnueabi-gcc -v2 w. J; B. k8 n% s6 ?: N
#Using built-in specs.
, C1 A0 @. r/ Z& ]" j6 _* ^Target: arm-davinci-linux-gnueabi3 \5 X8 ]; h8 u- P8 g) |
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
. u: J9 T) h9 K- Z3 F7 J' P5 r- jThread model: posix, Y7 J8 n' L/ I5 ^/ N# W
gcc version 4.4.3 (crosstool-NG-1.9.0)
) }' X" A! f1 w5 Ecrosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者.* g5 X: @' B% H) j: p" O4 _ L: R
使用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 */; K* U" z5 r7 m+ v3 R0 C6 G
#if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 14 X* ]2 z( C4 ~& y- S
# error Your version of gcc miscompiles the __weak directive8 a' a- D% a0 ]1 [
#endif 所以使用crosstool-ng建立一个新的工具链(gcc 4.3.2 glibc 2.9),以支持对最新kernel编绎.
5 Q# g, ]# y D4 ~& h( i测试环境: Debian Linux 2.6.18-6-686
7 ~2 R1 d7 y6 iUbuntu 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
d: L) {! D3 S/ y* B7 M! }, ?% I; V: l3 C; T
Ubuntu 9.0.4 请先安装下 termcap库 参考本文 错误与解决 4.. . 3.crosstool-ng使用范例 本范例记录了使用crosstool-ng编绎arm-unknown-linux-gnueabi工具链的过程 cd /tmp/crosstool-ng mkdir build_toolchain ' K/ A- {: |$ w) g
mkdir ~/src
% p/ A, W+ V* c生成默认配置文件: ct-ng arm-unknown-linux-gnueabi
( }2 t% f9 Z6 Q! i" M+ ~也可以这样子:( b8 [$ w. E8 f
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 退出保存配置文件,手动修改内核头文件的安装版本,以修正段错误:; y( `5 U& n; v$ o5 I& z& w
vim .config 修改kernel的安装版本 CT_KERNEL_VERSION="2.6.18" 修改libc中配置的内核头文件的安装版本至2.6.18 CT_LIBC_GLIBC_MIN_KERNEL="2.6.18" 保存退出(注意若使用ct-ng menuconfig进行配置,上面的手动修改信息会丢失,需再次从头配置)
0 d3 Z' L3 ]8 Z4 J* S* rPS:如果你编绎还是失败了或者测试失败了,那可以参考一下,我测试通过的配置文件:crosstool-ng for arm720t配置文件" ~6 |8 w; I, G. B0 K9 r
9 R+ s$ X# k9 ?5 H/ J) d: K, `+ {
0 l6 Z x8 j9 g7 @$ n# h) Z-----------我是分隔线 2010快乐 -----------------------------------+ y: m$ }; }) p7 A9 d+ N
, s3 n( F. L1 p9 N3 R( P2 ulibc库已经换用git来管理源码(sources.redhat.com),下面两个包" H- m: V0 y5 Z5 t: a) g
glibc-cvs-2.9.tar.gz @4 y; z8 }6 z9 w4 x
glibc-ports-cvs-2.9.tar.gz# e; `. m4 w3 A/ K$ {9 L, Y" y
将无法从cvs中取出,临时可以这样子解决:7 S; }- G/ ~# ~( a
cd /tmp// A2 I) d7 t5 F* p4 G: M
wget ftp://sourceware.org/pub/glibc/releases/glibc-2.9.tar.bz2" H: M7 S$ F" c8 C; K; A
tar jxvf glibc-2.9.tar.bz2 S: F6 q% d6 w. L+ O9 ]
mv glibc-2.9 glibc-cvs-2.9
* n* K. s' y7 I& M. j0 i9 _tar zcvf glibc-cvs-2.9.tar.gz glibc-cvs-2.99 D6 J( N& R9 g0 C! a) e
9 c6 r- m3 o& t( _; i$ Nwget ftp://sourceware.org/pub/glibc/releases/glibc-ports-2.9.tar.bz2
6 t* [/ N# l. [. ]1 n& f4 Ltar jxvf glibc-ports-2.9.tar.bz2
! J8 _6 E- p4 J9 d2 | c2 P; ~2 T) }mv glibc-ports-2.9 glibc-ports-cvs-2.90 K* }* J5 o3 B$ t7 N; I
tar zcvf glibc-ports-cvs-2.9.tar.gz glibc-ports-cvs-2.9
( Q: {% d* i: x8 l( l& G
: X, _2 M) h* Q% T2 Q: b复制这两个*.gz包至 crosstool-ng设置的包下载路径(本例中设置的是:~/src): M! r2 o3 M* L5 O% m
- f- n+ `1 n0 Q5 P--------------------------------------------------------------------------------------
开始编绎(在我的机子上耗时一小时) ct-ng build.4(用太多线程,很耗系统资源) 4.为工具链增加新链接 5 g) v; C* }% a
cd /opt/arm/4.3.2/arm-unknown-linux-gnueabi/bin ./autoln.sh autoln.sh是一个脚本,用来自动链接arm-unknown-linux-gnueabi的工具... 文件名:autoln.sh 拷到要自动建立链接的文件夹使用。 #!/bin/bash
2 M+ z4 y+ d9 `1 c7 e: X; o3 Y7 C6 a5 ?' l) q! i7 }' F" z
#
* [; U) R- R/ Q# main5 k4 ^5 @' a6 f+ o
#9 N" A+ z5 o! ^ l, [( V
if [ $# -lt 1 ] ; then
# b8 u/ ?' o: R% f1 z% d& c$ q' Oecho "default path: ./"+ X# t1 N5 {% U
BIN_PATH=./# c. k& |7 ]$ W+ l3 B* k
else( v; x; F) v q; |( f Z# O
BIN_PATH=$12 p! a. v F: J& n, D
fi
* ]0 m4 J: t' z8 y# w/ v6 i! ~if [ ! -d $1 ] ; then* l1 G, y5 h9 ?7 ^
echo "path error"
1 t g8 j# z2 |& H8 Texit' L5 Y$ b3 b+ R
fi
; @1 _( `, z% ~# n9 d& bcd $BIN_PATH
* p o3 l5 W% USRC=`ls | awk '{print $1}'`' b( {5 b4 o8 V& r( S( C
& u) U/ ]' { `; hfor i in $SRC ; do6 T4 [- h* ^/ z# u
if [ "$i" != "autoln.sh" ] ; then
- t$ x# h7 f; w* l7 k#echo $i% W" w/ P% q: R
TARGET=`echo $i | sed 's/arm-unknown-linux-gnueabi/arm-linux/g' `3 J' \- _& ?/ U8 g
echo $TARGET3 V! j+ a/ R* f T% _* D6 p
ln -s $i $TARGET1 k% O; B* P" T( Z
fi1 `" b9 t0 V( J3 l
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'
- C/ a- Q7 L: o[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
5 }" W9 V: P! O2 o) {$ H[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' at line # 471 in function 'CT_GetCVS', v% R7 i# h$ i* ?
[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'
" n' {2 ?, C+ _! c- r' R[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 449 in function 'main'
1 b @) H, L( q/ w* j5 _' o[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.
, }" D4 c- M4 c$ e/ P( r[ERROR] (elapsed: 33:29.56)
" u4 B# w7 i- |+ I( @, D8 }[33:30] / make[1]: *** [build] 错误 127
7 N7 L) b! s( Smake: *** [build.4] 错误 2 解决: sudo apt-get install cvs 3. [INFO ] Installing C library headers1 b( ?" Q9 F$ X5 K" _2 j
[EXTRA] Configuring C library% e# N# K8 G! a: V
[EXTRA] Installing C library headers% d H: d+ u9 {
[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' O9 V U' z5 k: t; t
[ERROR] make[2]: *** [install-headers] Error 2+ `: R% S4 ]! u1 |& v& N) x
[ERROR] Build failed in step 'Installing C library headers'
& n% O! H( d( j& c4 F- K. d+ |[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)+ S6 e' P! o' H
[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'
; C w* ]4 |1 _* A* a) F$ ^[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main'# o: `$ k1 T/ }/ c5 H
[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.) z' P' H' n/ E
[ERROR] (elapsed: 36:41.91)
+ a* a9 O4 [. J; V8 o[36:42] / make[1]: *** [build] 错误 2. L" p* b5 M/ t$ z0 f
make: *** [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
8 j$ y7 Z( {' u9 ]6 V2 rb-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 [)
( o0 D# J/ E* U; j[ALL ] /[^
' r/ ~. O) E- ]" b' {[ALL ] mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]
- n j; |2 a) ?- ?2 Z) p6 P[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 ] =================================================================
3 z r4 }' r: ~ }' t7 Q: r8 O[INFO ] Installing C library
4 Z8 }/ d' F; x( O( O, G3 o- @8 W[EXTRA] Configuring C library0 I3 L% V E5 G! r
[WARN ] Removing "-pipe" for use with glibc>=2.6* g: e2 ?, g9 i6 O4 j
[EXTRA] Building C library
6 M' Y$ E2 `% @; e; ]8 ~2 y" v[ERROR] make[4]: *** [/tmp/crosstool-ng/targets/arm-unknown-linux-gnueabi/build/build-libc/elf/ld.so] Error 28 A) E0 g. y' K( E& D( N: a
[ERROR] make[3]: *** [elf/subdir_lib] Error 27 O' w/ R' x6 T- h6 o& N! B
[ERROR] make[2]: *** [all] Error 2) p; r0 `- f. g6 h
[ERROR] Build failed in step 'Installing C library'
c$ j! r# |# T) A" _[ERROR] Error happened in '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
- T& i' k8 [- P1 ?" D# w[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/build/libc/glibc.sh' at line # 504 in function 'do_libc'
" F0 ^1 C. ~) p: t[ERROR] called from '/opt/crosstool-ng/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main': E0 i6 u$ Q4 d3 y, [
[ERROR] Look at '/home/star/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error., g( X: V/ R2 v! [8 m+ H3 F" ?
[ERROR] (elapsed: 32:05.76)7 X& t4 C U6 h# t/ L
[32:06] / make[1]: *** [build] 错误 2
: ~* ?; a, M0 A& Y- g) [make: *** [build.4] 错误 2 解决: sudo apt-get install gawk cd /usr/bin sudo mv mawk mawk.bak sudo ln -s gawk mawk
# u* `8 D0 R1 W5.
/ f, _, ]3 K4 I! D, q2 R+ h8 w49567 [ERROR] configure: error: no termcap library found
4 y5 x' P( ?3 e; T" c8 a49568 [ERROR] make[3]: *** [configure-gdb] Error 1$ s9 i- w0 i j7 Z0 H
49569 [ALL ] make[3]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'; A6 K/ J& ^8 q. J
49570 [ERROR] make[2]: *** [all] Error 2) @8 M# d: l( b( g3 [4 T
49571 [ALL ] make[2]: Leaving directory `/opt/build_toolchain/targets/arm-unknown-linux-gnueabi/build/build-gdb-cross'
3 N' E4 U. q; _" ]: c* I49572 [ERROR] Build failed in step 'Installing cross-gdb'! i' N! y6 Z& g8 I& ?
49573 [ERROR] Error happened in '/usr/lib/ct-ng-1.4.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)3 t' _+ |, r; Y9 Z0 z. i
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'$ K) ]( a9 S; D' L0 E/ P) N/ w6 {0 d
49575 [ERROR] called from '/usr/lib/ct-ng-1.4.1/scripts/build/debug.sh' at line # 35 in function 'do_debug'6 l6 a! ?, e& e2 m# N; h
49576 [ERROR] called from '/usr/lib/ct-ng-1.4.1/scripts/crosstool-NG.sh' at line # 494 in function 'main') v2 _. \& F2 ]0 ?3 V, H5 t
49577 [ERROR] Look at '/opt/arm/4.3.2/arm-unknown-linux-gnueabi/build.log' for more info on this error.- L) o: t! K9 ^+ U/ I1 c( F
49578 [ERROR] (elapsed: 72:30.97), r6 C) @2 W2 I4 R3 P# Y
, r( d+ ]! {6 q0 f3 t8 q0 u解决:
0 O% E, X" ^* X* b这个问题我只在ubuntu 9.0.4中遇到过...缺少了termcap 库,但我在源里又没有搜到termcap相关的库(似乎是被其它库替换了,termcap这东西的确很古老)1 _ o" h" b' E! ]* V7 \. L" u
cd /tmp% K4 U6 ]7 t, D5 j
wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
! k; t& H7 H6 b8 d$ @- }tar zxvf termcap-1.3.1.tar.gz4 s6 ^5 c3 {$ l) B9 w, _2 W' H
cd termcap-1.3.1
& E0 Y# x- c5 i4 G* I./configure --prefix=/usr
# B1 e6 w4 d& Y' emake 3 k: S; F8 i( |0 M9 \
make install( z4 o( q' M7 h0 A( ^/ q9 [
(又需要从头编译工具链了 …… ) % G+ L0 D, r6 f* u' `
|