找回密码
 注册
关于网站域名变更的通知
查看: 277|回复: 1
打印 上一主题 下一主题

DM644x达芬奇平台交叉编译工具链的制作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-18 18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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 F

crosstool-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

该用户从未签到

2#
发表于 2020-6-18 19:35 | 只看该作者
M644x达芬奇平台交叉编译工具链的制作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-27 00:00 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表