《实验一(补充):在ubuntu8.10环境建立交叉编译链》由会员分享,可在线阅读,更多相关《实验一(补充):在ubuntu8.10环境建立交叉编译链(4页珍藏版)》请在金锄头文库上搜索。
1、实验一(补充):在实验一(补充):在 ubuntu8.10ubuntu8.10 环境建立交叉编译链环境建立交叉编译链什么是交叉编译在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们 就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台 上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念: 体系结构(Architecture) 、操作系统(Operating System) 。同一个体系结构可以运行不同的 操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说 的 x86 Linux 平台实际上是
2、 Intel x86 体系结构和 Linux for x86 操作系统的统称;而 x86 WinNT 平台实际上是 Intel x86 体系结构和 Windows NT for x86 操作系统的简称。 有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个 编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有 时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算 机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如 C 代码)编译 (c
3、ompile)成计算机可以识别和执行的二进制代码。比如,我们在 Windows 平台上,可 使用 Visual C+开发环境,编写程序并编译成可执行程序。这种方式下,我们使用 PC 平 台上的 Windows 工具开发针对 Windows 本身的可执行程序,这种编译过程称为 native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目 标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储 空间大概是 16 到 32MB,而 CPU 的主频大概在 100MHz 到 500MHz 之间。这种情况下, 在 ARM 平台上进行本
4、机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的 CPU 运算能力。为了解决这个问题,交叉编 译工具就应运而生了。通过交叉编译工具,我们就可以在 CPU 能力很强、存储控件足够的 主机平台上(比如 PC 上)编译出针对其他平台的可执行程序。 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和 libc 库等组成的开发环境。本文具体说明了嵌入式交叉编译环境的建立过程和具体的操作 步骤,希望能够对各位朋友搭建对应的交叉编译环境有所帮助。ubuntuubuntu 下建立交叉编译工具链(支持软浮点)全过
5、程下建立交叉编译工具链(支持软浮点)全过程准备工作: 1、 编译用到的源码包如下: gcc-3.4.5.tar.gz (编译器)(编译器) glibc-2.3.6.tar.gz (glibc 库)库) linux-2.6.26.5.tar.gz (Linux 内核代码)内核代码) 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.b
6、z2 2、编译过程需要用到以下几个软件,系统本身没有安装,可以运行安装命令提前做好,因 为编译一次至少要花半个小时,如果因为依赖软件没有安装中途会报错退出,只有从头再来,那样很浪费时间的: bison_13a2.3.dfsg-4build1_i386.deb build-essential_11.4_i386.deb flex_2.5.33-10build1_i386.deb libncurses5-dev_5.6+20071124-1ubuntu 2_i386.deb m4_1.4.8-1build1_i386.deb patch_2.5.9-5_i386.deb cpp-4.1_4.1.2
7、-23ubuntu3_i386.deb gcc-4.1_4.1.2-23ubuntu3_i386.deb gcc-4.1-base_4.1.2-23ubuntu3_i386.deb 实验步骤: 1、在/home/neo/目录下创建目录 downloads,将上述工具拷贝到 downloads 目录下。 2、编译器选择,因为 ubuntu8.10 默认安装的 gcc 版本为 4.3.2,这个版本对于语法要求较 高,编译会出错,无法用 crosstool 正常编译交叉编译器,所以必须安装 gcc-4.1,但是不必 卸载原有的 gcc-4.3.2。neoneo-desktop:$ cd /home/
8、neo/downloads/neoneo-desktop:/downloads$ sudo dpkg i gcc-4.1_4.1.2-23ubuntu 3_i386.debneoneo-desktop:/downloads$ sudo dpkg i gcc-4.1-base_4.1.2-23ubuntu 3_i386.debneoneo-desktop:/downloads$ sudo dpkg i cpp-4.1_4.1.2-23ubuntu 3_i386.debneoneo-desktop:/downloads$ sudo rm /usr/bin/gcc (删除 GCC,它只是个到 gcc
9、-4.3.2 的软连接文件)neoneo-desktop:/downloads$ sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立 GCC 到 gcc-4.1 的软连接)然后执行 gcc -v 命令,查看 gcc 编译器的版本号是否为 4.1,如果为 4.1 说明修改成功:neoneo-desktop:/downloads$ gcc -vUsing built-in specs.Target: i486-linux-gnuConfigured with: ./src/configure -v -enable-languages=c,c+ -prefix=
10、/usr -enable-shared -with-system-zlib -libexecdir=/usr/lib -without-included-gettext -enable-threads=posix -enable-nls -with-gxx-include-dir=/usr/include/c+/4.1.3 -program-suffix=-4.1 -enable-_cxa_atexit -enable-clocale=gnu -enable-libstdcxx-debug -enable-checking=release i486-linux-gnuThread model:
11、 posixgcc version 4.1.3 20080623 (prerelease) (Ubuntu 4.1.2-23ubuntu3)3、修改 sh 版本: 如果运行:neoneo-desktop:/downloads$ ls -al /bin/shlrwxrwxrwx 1 root root 4 2011-08-02 20:04 /bin/sh - dash则请运行以下命令neoneo-desktop:/downloads$ sudo dpkg-reconfigure dash选择 no 以删除 dash 此处如果不改好的话,编译时会出现错误。 (在建立交叉编译环境后,可以在运行该命令
12、选 择 yes 重新安装 dash) 。 确保 sh 版本为 bash:neoneo-desktop:/downloads$ ls -al /bin/shlrwxrwxrwx 1 root root 4 2011-08-02 20:04 /bin/sh - bash4、安装了以下软件包:bison、flex、build-essential、patch、libncurses5-dev。执行以下命令:neoneo-desktop:/downloads$ sudo dpkg i bison_13a2.3.dfsg-4build1_i386.debneoneo-desktop:/downloads$
13、sudo dpkg i build-essential_11.4_i386.debneoneo-desktop:/downloads$ sudo dpkg i flex_2.5.33-10build1_i386.debneoneo-desktop:/downloads$ sudo dpkg i libncurses5-dev_5.6+20071124-1ubuntu 2_i386.debneoneo-desktop:/downloads$ sudo dpkg i m4_1.4.8-1build1_i386.debneoneo-desktop:/downloads$ sudo dpkg i pa
14、tch_2.5.9-5_i386.deb5、解压软件包,并进入该目录,查看重要的脚本文件。$cd downloads$tar -zxvf crosstool-0.43.tar.gz$cd crosstool-0.43在此目录下可以看到有很多.sh 脚本和.dat 配置文件,每一个支持的处理器都有它所相应的 脚本。假如选用 demo-arm-softfloat.sh 就是建立目标为支持软浮点的 arm 交叉编译工具链。 6、修改 demo-arm-softfloat.shset -exTARBALLS_DIR=/home/neo/downloads/表示下载的工具源码压缩包的存放目录RESULT
15、_TOP=/home/neo/crosstool /表示生成的工具链的存放目录,一定要改到有写权限的目录,不然无法编译。GCC_LANGUAGES=“c,c+“ /该行表示将要生成的工具链支持的语言的种类!eval cat arm-softfloat.dat gcc-3.4.5-glibc-2.3.6.dat sh all.sh -notest/这行是默认的工具链的版本号(最新的),我就是用这一行,也可以选别的。根据你所选的工具链的版本号,打开相应的.dat 文件。7、修改 gcc-3.4.5-glibc-2.3.6.datBINUTILS_DIR=binutils-2.15GCC_DIR=g
16、cc-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.68、执行命令./demo-arm-softfloat.sh。这个过程较长(半个小时左右)等待一段不长不短的时间编译就会完成了,编译完成后应该在你所设的工作目录下的 /home/neo/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin 中找到 arm-softfloat-linux- gnu-gcc。 10、修改环境变量:$export PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/a