0.43建立ARM-Linux交叉编译环境

忠告:linux的特点,就是各个软件包向下兼容性比较差,各个包之间的依赖受版本制约,所以干点啥之间最好参考一下别人的成功案例,不要轻易尝试新版本,除非自己很熟悉或很有时间,否则,每一点新的尝试都可能是你痛苦的回忆。放弃你windows下喜欢尝鲜的习惯吧。

Ubuntu 8.10 64bit 下用 Crosstool-0.43 建立 ARM-Linux 交叉编译环境
http://hi.baidu.com/luisxu/blog/item/9cb513dbd8a06261d0164e86.html
感谢各位高手的奉献,让我这菜鸟不需要走什么弯路就建立起了ARM-Linux 交叉编译环境
建立交叉编译工具链的主机环境:
2.6.27-7-generic-Ubuntu 8.10-64 bit , gcc-4.3.2 , make 3.81-5
保证你的 Ubuntu 8.10 安装了如下的软件:
Bison  flex  build-essential  patch  libncurses5-dev
其中 Bison  flex  是本人亲试必需软件,这些软件一定要事先安装好,否则可能会出错,然后只能重新编译
本方案所选软件包如下:(注:轻易不要尝试换版本)
crosstool-0.43
gcc-3.3.6
gcc-4.1.1
glibc-2.3.2
binutils-2.16.1
linux-libc-headers-2.6.12.0
linux-2.6.27.6
可用的搭配方案可参考《 Crosstool build results 》
1. Ubuntu 8.10 默认安装的 gcc 版本为4.3.2,根据多人反映,用此版本编译会出错,目前不宜选用
于是选择了 gcc-4.1.1 ,但并不需要卸载 gcc-4.3.2
在 Ubuntu 8.10 不要去下 gcc-4.1.1 的源码来编译(自行下载源码编译会发现遇到更多的问题),直接在终端输入
sudo apt-get install gcc-4.1
安装就可以了
然后是
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的软链接)

编译完成后可以运行以下命令修改回来
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
如果运行
ls -la /bin/sh
看到链接的是 dash ,则请运行以下命令
sudo dpkg-reconfigure dash
选择 no 以删除 dash ,编译完成可再运行此命令选择 yes 以重新安装 dash
此处如果不改好的话,编译时会出现错误
修改 crosstool-0.43 目录下 demo-arm9tdmi.sh 为
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture.  Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt
set -ex
TARBALLS_DIR=$HOME/downloads
RESULT_TOP=/home/luis/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
mkdir -p $RESULT_TOP
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
eval `cat arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
echo Done.
其中红字部分是我修改的
前面有#号的则表明本行注释了,实际上不起作用
TARBALLS_DIR 是下载的工具源码压缩包的存放目录,可事先下载好源码压缩包存放于此(不要解压)。
RESULT_TOP 是要生成的工具链的存放目录,一定要改到有写权限的目录,不然无法编译,具体放哪里自行决定即可。
修改 crosstool-0.43 目录下 gcc-4.1.1-glibc-2.3.2.dat 为
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.1
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.27.6
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5

其中红字部分是我修改的,这里是修改 Linux 内核为linux-2.6.27.6
关于 linux-libc-headers ,引用 Aquarius 的话如下
编译Glibc必须要有linux内核头文件。最初人们直接使用内核源码包中的头文件(/usr/include目录下),后来由于内核开发者强烈反对这种做法,于是出现了linux-libc-headers项目,以为Linux头文件维护一个稳定版本的API。最近该项目已经停止发展(该项目提供的最新版本的“纯净的”头文件版本是2.6.12.0);从2.6.18版本开始,内核开发组负责维护一份统一的、“纯净的”内核头文件,获取编译glibc 所需的头文件只需要使用命令”make headers_install”即可。
要想了解 Crosstool 更多的信息,可以阅读《crosstool-howto》和《Crosstool variables》
如果不是需要很了解 Crosstool ,又想看中文解释的推荐阅读 Aquarius 的
Building arm-linux toolchain for ARM/XScale-iWMMXt
在终端中进入 crosstool-0.43 目录执行
./demo-arm9tdmi.sh
注:不要以root用户登录进行编译
等待一段不长不短的时间编译就会完成了,编译完成后应该在你所设的工作目录下的 gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin 下找到 arm-9tdmi-linux-gnu-gcc
添加目录
在终端中输入以下命令
sudo gedit /etc/environment
在PATH结尾的分号前添加 Crosstool 的 bin 目录
例如我的如下:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/luis/crosstool/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin"
这次编译过程中参考过的重要资料有:
[1] Building arm-linux toolchain for ARM/XScale-iWMMXt
[2] 用crosstool-0.43在Ubuntu7.10下建立ARM linux交叉编译环境
[3] 在ubuntu8.10 下建立 ARM-Linux 交叉编译环境
[4] ubuntu 8.04中编译ARM交叉平台的一点心得!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11458.html