找回密码
 注册
关于网站域名变更的通知
查看: 284|回复: 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版本的。
" 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 E

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 18:57 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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