交叉编译器

本文介绍如何使用Crosstool构建ARM Linux交叉编译工具链,包括准备资源文件、建立配置文件及执行脚本等内容。文章详细展示了整个构建过程,并提供了具体的命令和步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交叉编译器是一种可以在平台A上为另一种平台B编译程序的编译器。其中,运行交叉编译器的平台A称为宿主机,交叉编译生成的目标文件的运行平台B称为目标机。交叉编译器的编译过程称为交叉编译。
    一个完整的arm-linux交叉编译器包括arm-linux-gcc、glibc、binutils等组件。其中,arm-linux-gcc是为ARM平台编译C程序的编译器;glibc是嵌入式C程序所需的基本函数库;binutils包含一组二进制工具。所以交叉编译器又称为交叉编译工具链。
    由于交叉编译器中每个组件都有各自的版本,所以可以使用不同版本的组件来制作交叉编译器。但是,组件之间会因版本不匹配的问题产生错误。为了避免这种麻烦,建议直接使用制作好的arm-linux交叉编译器。
建立嵌入式linux的基础是建立基于ARM平台的交叉编译工具链。通常构建交叉工具链有3种方法:
方法一  分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。
方法二  通过Crosstool脚本工具来实现一次编译生成交叉编译工具链。
方法三  直接从网上()下载已经制作好的交叉编译工具链。

1、准备资源文件

下载crosstool-0.43.tar.gz。

下载地址:http://kegel.com/crosstool/crosstool-0.43.tar.gz

内核linux-2.6.24.tar.gz 下载地址:

其他资源是:binutils-2.16.1.tar.gz、gcc-3.3.6.tar.bz2、gdb-6.5.tar.bz2、glibc-linuxthreads-2.3.2.tar.gz、linux-libc-headers-2.6.12.0.tar.bz2、gcc-4.1.1.tar.bz2、glibc-2.3.2.tar.gz、linux-2.6.24.tar.gz。下载地址为:ftp.gnu.org
用户目录为david,将crosstool-0.43.tar.gz在/home/david目录下解压,使用root用户登录,解压命令如下:

# cd /home/david/crosstool-0.43

# tar –xvzf crosstool-0.43.tar.gz

将其他资源放在/home/david/downloads目录下。


# cd /home/david/crosstool-0.43

# cp demo-arm.sh arm.sh

# vi arm.sh

修改后的arm.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/david/downloads
RESULT_TOP=/home/david/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 arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest --gdb

echo Done.

    其中RESULT_TOP=/home/david/crosstool是为了编译时的操作全在david用户的权限范围内。如果写的是/opt/crosstool,david用户就没有权限进行操作,也就不能编译成功了。

3、建立配置文件

    arm.dat文件主要用于定义配置文件、定义生成编译工具链的明晨以及定义

编译选项等。命令如下:

# cd /home/david/crosstool-0.43

# vi arm.dat

 

修改后arm.dat内容如下:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux
TARGET_CFLAGS="-O"

    gcc-4.1.1-glibc-2.3.2.dat文件主要定义编译过程中所需要的库以及它定义的版本。命令如下:

# cd /home/david/crosstool-0.43

# vi gcc-4.1.1-glibc-2.3.2.dat

修改后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.24
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5

5、执行脚本
    在/home/david目录下新建一个crosstool目录,并将crosstool和crosstool-0.43目录的权限设置为当前用户和同组用户可读可写可执行,为了简便,可设置为777。然后切换为david用户后执行脚本文件arm.sh。命令如下:777 crosstool
# chmod  777 crosstool$ ./arm.sh

你可以出去喝杯咖啡或者看部电影,大约两小时后在/home/david/crosstool目录下生成新的交叉编译工具。

6、添加环境变量

    使用命令sudo su切换到root用户,在系统/etc目录下的profile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值