构建嵌入式交叉编译工具链
来源:互联网 发布:淘宝店美妆图片素材 编辑:程序博客网 时间:2024/05/18 13:29
所谓交叉编译环境,就是在普通的 PC 机编译生成能在目标机(如 ARM )上运行的软件。在 GNU 对工具链的定义中,整个交叉编译工具链 应该是 GCC + binutils + glibc 。其中 GCC 又包括了预编译器 cpp 、 C 编译器 gcc 、汇编器 as 和链接器 ld 。
交叉编译工具链的获得方式:
( 1 )从网上下载已经构建好的交叉编译工具链,比如 ARM 的交叉编译工具链可以从 ftp://ftp.arm.linux.org.uk/pub/linux/arm/toochain/ 下载。注意这些已经做好了的交叉编译工具链往往规定了安装的路径(因为在编译时就制定了路径 --prefix ),可以查看一下 README 文档,通常的路径是“ /usr/local/arm/x.x.x ”,这时需要将工具包解压到这个路径下。
( 2 )使用 crosstool 自己构建,下面以构建 ARM 交叉编译工具链为例,说明构建步骤。
1. 下载 crosstool-0.43.tar.gz
【 crosstool-0.43.tar.gz 】 http://kegel.com/crosstool/crosstool-0.43.tar.gz
2. 配置 crosstool-0.43
[leo@ crosstool]$ tar zxvf crosstool-0.43.tar.gz
[leo@ crosstool]$ cd crosstool-0.43
[leo @ crosstool-0.43]$ vi demo-arm.sh
修改下面几行,即设置 tarball 的路径、编译结果顶层路径以及需要编译的 gcc 版本。
TARBALLS_DIR=$HOME/Downloads
RESULT_TOP=$HOME/crosstool/arm
eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
[leo @ crosstool-0.43]$ vi gcc-4.0.0-glibc-2.3.2.dat
BINUTILS_DIR=binutils-2.16.1
GCC_DIR=gcc-4.0.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GCC_CORE_DIR=gcc-3.3.6
将以上所需的 tarball 放到 $(TARBALLS_DIR) 目录下面。
[leo @ crosstool-0.43]$ vi arm.dat
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux
TARGET_CFLAGS="-O"
[leo @ crosstool-0.43]$ ./demo-arm.sh
系统开始编译, 所有使用到的文件 ( 如果没有预先存放在 $(TARBALLS_DIR) 目录下面 ) ,则会在编译的时候自动下载。编译的时间可能需要几个小时。
TARBALLS_DIR :是下载的工具源码压缩包的存放目录。
RESULT_TOP :是要生成的工具链的存放目录,要有写权限的目录,不然无法编译。
3. 所需工具源码压缩包的下载地址
【 binutils-2.16.1.tar.bz2 】 http://ftp.gnu.org/gnu/binutils/
【 gcc-4.0.0.tar.bz2 】 http://ftp.gnu.org/gnu/gcc/gcc-4.0.0/
【 glibc-2.3.2.tar.bz2 】 http://ftp.gnu.org/gnu/glibc/
【 linux-2.6.15.4.tar.bz2 】 http://ftp.kernel.org/pub/linux/kernel/v2.6/
【 glibc-linuxthreads-2.3.2.tar.bz2 】 http://ftp.gnu.org/gnu/glibc/
【 gcc-3.3.6.tar.bz2 】 http://ftp.gnu.org/gnu/gcc/gcc-3.3.6/
【 gdb-6.5.tar.bz2 】 http://ftp.gnu.org/gnu/gdb/
以上就是编译交叉编译工具所用到的源文件组合,这个组合可以成功编译,关于那些组合可以成功编译可以参照 http://kegel.com/crosstool/crosstool-0.43/buildlogs/ 表格。
4. 在 UBUNTU 下编译出现的错误
( 0 )需要安装 bison 和 flex
sudo apt-get install bison flex
( 1 )编译过程中出现一个问题,说是 gcc 版本太旧,其实是 gcc 版本太新了,解决如下:
先查看当前 gcc 的版本 gcc –version ,比如我当前的 gcc 版本 gcc-4.4
sudo apt-get install gcc-3.4
sudo rm /usr/bin/gcc
ln -s /usr/bin/gcc-3.4 /usr/bin/gcc
注意编译完成以后要恢复成原来的版本 , 如下:
sudo rm /usr/bin/gcc
ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
注意:在较新的 UBUNTU 中, sudo apt-get install gcc-3.4 会出现 E: Couldn’t find package gcc-3.4 ,此时需要手动到 http://packages.ubuntu.com/ 去下载较旧版本的安装包,并自行处理包的依赖关系。
( 2 )出现如: build-glibc/csu/version-info.h:1:1: missing terminating " character
系统在编译生成 version.o 时候发现 version-info.h 文件有错误,解决如下:
解压 glibc-2.3.2.tar.bz2
找到 glibc-2.3.2/csu 目录下的 Makefile 按如下修改:
文件末尾有 2 处 echo
echo "/"Compiled on a $$os $$version system" /
"on`date +%Y-%m-%d`.//n/"" ;; /
改为:
echo "/"Compiled on a $$os $$version system" /
"on `date +%Y-%m-%d`.////n/"" ;; /
echo "/"Available extensions://n/""; /
改为:
echo "/"Available extensions: ////n/"" /
保存并重新压缩为 glibc-2.3.2.tar.bz2 覆盖原来 $(TARBALLS_DIR) 目录下的 glibc-2.3.2.tar.bz2 ,转到 crosstool-0.43 目录下从新执行。
- 构建嵌入式交叉编译工具链
- 用ptxdist2013构建嵌入式交叉编译工具链
- 构建交叉编译工具链
- 构建交叉编译工具链
- eclipse 和 交叉工具链构建嵌入式应用编译及调试环境
- 嵌入式linux交叉编译工具链搭建
- 交叉编译工具链的构建
- 交叉编译工具链的构建原理
- 构建ARM Linux交叉编译工具链
- 交叉编译工具链的构建原理
- 构建 openwrt 交叉编译工具链
- 构建gcc交叉编译工具链
- ARM 构建交叉编译工具链
- 交叉编译工具链的构建原理
- openwrt 构建交叉编译工具
- 交叉编译构建logrotate工具
- 【嵌入式】使用Cross Toolchain构建交叉工具链
- 嵌入式LINUX ---ARM交叉编译工具链的编译
- [转贴]eclipse和netbeans的区别
- Window and Viewport
- linux usb 系统 (6)
- c语言34个运算符
- Linux原生ZFS文件系统模块将于下月发布
- 构建嵌入式交叉编译工具链
- C语言的9种控制语句
- “开源版Facebook”Diaspora宣布9月上线
- linux USB 系统 (7)
- linux usb 系统 (8)
- mailto语法
- 将CSS样式写成JS格式的用法
- 扎克伯格称Facebook图片使用率远超对手
- POJ1804逆序对