首页 / 操作系统 / Linux / 建立ARM Linux GCC交叉编译环境
crosstool 和ezx-cross的区别,ezx-crosstool是将crosstool精简后加上浮点运算,以及ezx平台的其他一些补丁,适用于ezx平台。在编译ezx-crosstool时,可能出现PATH_MAX not defined,之类的错误,删除printf语句下面的PATH_MAX即可。虽然网上的教程和工具已经很多了,但是安装的时间还是超出了我的估计。现在写出完整的建立过程。中间借鉴了很多人的经验,复制粘贴了他们的教程。。感谢。。终端可以设置程序关闭时不自动关闭。。。我浪费了很多时间才发现的,这样才能看见错误。一.电脑补丁和安装1.sudo apt-get install Bison flex build-essential patch libncurese5-dev2.降低gcc版本(1)第一种方法:直接在终端输入安装gcc-4.1sudo apt-get install gcc-4.1(2)第二种方法:下载下列软件包:gcc-4.1_4.1.2-23Ubuntu3_i386.debgcc-4.1-base_4.1.2-23ubuntu3_i386.debcpp-4.1_4.1.2-23ubuntu3_i386.deb然后sudo dpkg –i *.deb安装就可以了sudo rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.3.2的软链接文件)sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的软链接)3、修改sh版本如果运行ls -la /bin/sh看到链接的是 dash ,则请运行以下命令sudo dpkg-reconfigure dash选择 no 以删除 dash 二.软件准备1.下载crosstool-0.43.tar.gz,这个是最重要的。6个软件,这6个软件版本不是规定的,可以更新。下好了是为了安装快速,否则crosstool会自动下载,耽误时间。glibc-2.3.6.tar.gz linux-2.6.26.5.tar.gz crosstool-0.43.tar.gz binutils-2.15.tar.gz glibc-linuxthreads-2.3.3.tar.gz linux-libc-headers-2.6.12.0.tar.bz22 .修改demo-arm-softfloat.sh $vim demo-arm-softfloat.sh修改下面两句TARBALLS_DIR=/home/linux/downloads(你下载下面那6个软件的存放目录)RESULT_TOP=/home/linux/crosstools(生成工具链目录)3.修改 gcc-3.4.5-glibc-2.3.6.dat,注意文件名字和你下载的软件包对应,除去后缀名。 $ vim gcc-3.4.5-glibc-2.3.6.dat修改内容为:BINUTILS_DIR=binutils-2.15GCC_DIR=gcc-3.4.5GLIBC_DIR=glibc-2.3.6LINUX_DIR=linux-2.6.26.5LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6终端运行demo-arm-softfloat.sh(半小时左右) 此时可能出现的错误:
(1)编译到glibc的时候,在配置的时候会检测gcc的版本,configure 脚本认为gcc-4.3.2版本太老(其实是因为当时gcc还没有这么高的版本,只要不是3.2到4.1之间的版本,都认为too old),不能编译。
这是可以解决的,方法就是修改glibc-2.3.2根目录下的configure 文件中的第1275行:
test -n "$CC" && break
done
if test -z "$CC"; then
ac_verc_fail=yes
else
# Found it, now check the version.
echo "$as_me:$LINENO: checking version of $CC" >&5
echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
ac_prog_version=`$CC -v 2>&1 | sed -n "s/^.*version /([egcygnustpi-]*[0-9.]*/).*$//1/p"`
case $ac_prog_version in
"") ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
3.[2-9]*|4.[0- 3]*)
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
(2)编译gcc-3.3.6的时候,出现以下错误:
/usr/include/bits/fcntl2.h:51: error: call to "__open_missing_mode" declared with attribute error: open with O_CREAT in second argument needs 3 arguments
在gcc-3.3.6/gcc/collect2.c中的第1575行改为:
redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0777 );
glibc-2.3.2/login/tst-grantpt.c也有一个类似错误,第44行:
fd = open (file, O_RDWR | O_CREAT, 0777 );
(3)*** buffer overflow detected ***: arm-9tdmi-linux-gnu-ar terminated
没办法,只能放弃gcc-4.3.2。
(4)In file included from version.c:33:
/home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:2:1: missing terminating " character
/home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:3:1: missing terminating " character 解决办法:
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh
(5)configure: error: no termcap library found
用新立得安装libncurses5-dev(或是apt-get install libncurses5-dev)即可。如果这时候还没看见done,我也没办法了。。。