`
jsntghf
  • 浏览: 2542454 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

arm-linux交叉编译工具链的制作(基于S3C2440)

阅读更多

制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便,但是制作会受到一些限制,使用crosstool最多只能编译gcc4.1.1、glibc2.x的版本,无法编译版本高于2.6.29的linux内核。crosstool-NG是新的用来建立交叉编译工具链的工具,它是crosstool的替代者。crosstool-NG有更好的定制性,并且一直保持着更新,对新版本的编译工具链的支持比较好,当然也带来了一些麻烦,它并不是下载下来就可以使用的,必须先配置安装。我们这里选用crosstool-NG来制作编译工具链。

 

本文使用的系统是Ubuntu Kylin(3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux),建议都使用Ubuntu系统,安装软件比较方便。

 

一、安装crosstool-NG

1、建立arm-linux-tools目录,并进入该目录

$ mkdir arm-linux-tools
$ cd arm-linux-tools

 

2、获取crosstool-NG的源码

$ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.20.0.tar.bz2

 

3、解压crosstool-NG的源码

$ tar xvjf crosstool-ng-1.20.0.tar.bz2

考虑到后续将要使用到的各种目录,在这里先建立好后续所需的目录。

$ mkdir crosstool-build crosstool-install src

 

4、配置并进行依赖检测

$ cd crosstool-ng-1.20.0
$ ./configure --prefix /home/eric/arm-linux-tools/crosstool-install/

 

在配置之前,需要确保以下软件已经安装

1)gperf

2)bison

3)flex

4)texinfo

5)gawk

6)libtool

7)automake

8)libncurses5-dev

9)g++

 

在进行配置时,会进行依赖检测,如果存在包缺失的现象,安装好之后再执行配置即可。

成功配置之后会自动创建我们需要的Makefile文件。

 

5、编译并安装

$ make
$ make install

 

6、配置环境变量

$ export PATH=$PATH:/home/eric/arm-linux-tools/crosstool-install/bin/

 

7、检查crosstool-NG是否安装成功

$ ct-ng -v


 

二、配置交叉编译工具链

在crosstool-NG中有很多已经做好的默认配置(位于crosstool-ng-1.20.0/samples目录下),这里只需要进行修改就可以了。因为是制作arm-linux的交叉编译工具链,所以选择arm-unknown-linux-gnueabi进行配置。

 

1、将arm-unknown-linux-gnueabi文件夹复制到crosstool-build目录下

$ cd samples
$ cp -r arm-unknown-linux-gnueabi/ ../../crosstool-build/ 

 

2、将默认配置文件拷贝到crosstool-build目录下并改名为.config

$ cd ~/arm-linux-tools/crosstool-build
$ cp arm-unknown-linux-gnueabi/crosstool.config .config

 

3、执行ct-ng menuconfig进入配置界面进行配置

$ ct-ng menuconfig

配置界面如下图所示:

 

(1)设定源码包路径和交叉编译器的安装路径

1)源码包路径:设置Paths and misc options下的Local tarballs directory为/home/eric/arm-linux-tools/src

2)交叉编译器的安装路径:设置Paths and misc options下的Prefix directory为/home/eric/arm-linux-tools/x-tools/${CT_TARGET}

 

(2)修改交叉编译器针对的架构

1)设置Target options下的Architecture level为armv4t

2)设置Target options下的Emit assembly for CPU为arm9tdmi

3)设置Target options下的Tune for CPU为arm920t

 

以上这几个参数是如何得出来的,可以参考gcc的man手册。你可以在下载的gcc-4.9.1.tar.bz2解压后的文件夹中找到(gcc-4.9.1/gcc/doc/gcc.1)

执行以下命令打开gcc.1

$ man ./gcc.1

你可以在其中看到下面这段:

......
 ARM Options
......
-march=name
           This specifies the name of the target ARM architecture.  GCC uses
           this name to determine what kind of instructions it can emit when
           generating assembly code.  This option can be used in conjunction
           with or instead of the -mcpu= option.  Permissible names are:
           armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
           armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7,
           armv7-a, armv7-r, armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a+crc,
           iwmmxt, iwmmxt2, ep9312.
		      
-mtune=name
           This option specifies the name of the target ARM processor for
           which GCC should tune the performance of the code.  For some ARM
           implementations better performance can be obtained by using this
           option.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
           arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di,
           arm7dmi, arm70, arm700, arm700i, arm710, arm710c, arm7100, arm720,
           arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm710t, arm720t,
           arm740t, strongarm, strongarm110, strongarm1100, strongarm1110,
           arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
           arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi,
           arm1020t, arm1026ej-s, arm10e, arm1020e, arm1022e, arm1136j-s,
           arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s, arm1156t2f-s,
           arm1176jz-s, arm1176jzf-s, cortex-a5, cortex-a7, cortex-a8,
           cortex-a9, cortex-a12, cortex-a15, cortex-a53, cortex-a57,
           cortex-r4, cortex-r4f, cortex-r5, cortex-r7, cortex-m4, cortex-m3,
           cortex-m1, cortex-m0, cortex-m0plus, marvell-pj4, xscale, iwmmxt,
           iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626, fa726te.
		   
		   Additionally, this option can specify that GCC should tune the
		   performance of the code for a big.LITTLE system.  Permissible names
		   are: cortex-a15.cortex-a7, cortex-a57.cortex-a53.
		      
-mcpu=name
           This specifies the name of the target ARM processor.  GCC uses this
           name to derive the name of the target ARM architecture (as if
           specified by -march) and the ARM processor type for which to tune
           for performance (as if specified by -mtune).  Where this option is
           used in conjunction with -march or -mtune, those options take
           precedence over the appropriate part of this option.

           Permissible names for this option are the same as those for -mtune.

           -mcpu=generic-arch is also permissible, and is equivalent to
           -march=arch -mtune=generic-arch.  See -mtune for more information.

           -mcpu=native causes the compiler to auto-detect the CPU of the
           build computer.  At present, this feature is only supported on
           Linux, and not all architectures are recognized.  If the auto-
           detect is unsuccessful the option has no effect.
......

-march=name对应Architecture level

-mtune=name对应Tune for CPU

-mcpu=name对应Emit assembly for CPU

 

(3)设置编译时的并行进程数

1)设置Paths and misc options下的Number of parallel jobs为4

这个数值不宜过大,应该为CPU核心数量的两倍。

 

(4)设置编译器前缀

1)设置Toolchain options下的Tuple's vendor string为S3C2440,这样生成的编译器的前缀就是arm-S3C2440-linux-gnueabi-

 

4、安装termcap

$ cd /tmp
$ wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
$ tar xvzf termcap-1.3.1.tar.gz
$ cd termcap-1.3.1
$ ./configure --prefix=/usr
$ make
$ make install

 

5、编译

在crosstool-build目录下执行以下命令进行编译

$ ct-ng build.4

 

整个编译过程时间比较长,crosstool-ng会自动下载相应的包和内核文件,然后解压、配置、编译、链接,但有个别包在自动下载过程中会出错,例如duma_2_5_15和expat-2.1.0,需要手动下载这两个包放入Local tarballs directory指定的目录(这里为/home/eric/arm-linux-tools/src),然后再重新执行编译即可。

 

编译过程中,在安装到cross-gdb时,出现configure: error: expat is missing or unusable的错误,安装libexpat1-dev即可。

编译过程中,出现g++: Internal error: Killed (program cc1plus)的错误,尝试着将可用内存加大。

 

如下图所示,代表安装成功了。

 

6、配置环境变量

$ echo "PATH=$PATH:/home/eric/arm-linux-tools/x-tools/arm-S3C2440-linux-gnueabi/bin" >> ~/.bashrc
$ source ~/.bashrc

 

7、确认安装完成

$ arm-S3C2440-linux-gnueabi-gcc -v

 

8、编译成功后的交叉编译器路径

(1)编译器路径:/home/eric/arm-linux-tools/x-tools/arm-S3C2440-linux-gnueabi/bin

(2)库文件路径:/home/eric/arm-linux-tools/x-tools/arm-S3C2440-linux-gnueabi/arm-S3C2440-linux-gnueabi/lib

 

三、编译测试

1、写一个简单的C程序:Hello, World

#include <stdio.h>

int main() {
    printf("Hello, World\n");

    return 0;
}

 

2、编译

$ arm-S3C2440-linux-gnueabi-gcc -o hello hello.c

 

3、上传至目标板并执行

$ chmod +x ./hello
$ ./hello

 

如上图所示,创建的交叉编译链可以成功编译成目标板能够识别的指令。

 

关于crosstool-ng的详细介绍和使用,请参考:http://www.crifan.com/files/doc/docbook/crosstool_ng/release/htmls/index.html

需要的依赖包下载:http://download.csdn.net/detail/jsntghf/8198753

编译后的交叉编译工具链下载:http://download.csdn.net/detail/jsntghf/8206693

分享到:
评论

相关推荐

    交叉编译工具链制作

    GNU 工具链软件包可以生成针对不同体系结构的交叉编译工具链,例如 arm-linux-gcc、mips-linux-gcc 等。 BINUTILS BINUTILS 是二进制程序处理工具,包括连接器、汇编器等目标程序处理的工具。BINUTILS 是 GNU 工具...

    S3C2440 C++4.9.1 arm-S3C2440-linux-gnueabi

    标题中的"S3C2440 C++4.9.1 arm-S3C2440-linux-gnueabi"指的是一个针对S3C2440处理器的、基于C++11标准的、版本为4.9.1的交叉编译工具链。这个工具链是用于在Linux操作系统上开发和编译应用,目标平台是S3C2440 ARM...

    s3c2440最新交叉编译工具11.2.0,arm-linux-gnueabi-11.2.0

    "s3c2440最新交叉编译工具11.2.0,arm-linux-gnueabi-11.2.0" 提供了针对S3C2440处理器的开发环境,它允许开发者在非ARM平台(如x86架构的个人电脑)上编译运行在ARM芯片上的Linux应用程序。这个工具集基于GCC(GNU ...

    ucosii mini2440 arm-linux-gcc 编译

    Mini2440是一款基于S3C2440A ARM9处理器的开发板,广泛用于嵌入式教学和项目开发。它拥有丰富的外设接口,如串口、GPIO(通用输入/输出)等,适合进行各种硬件实验。 接下来,我们要使用arm-linux-gcc,这是一个...

    基于ARM-Linux下交叉编译的手持医疗终端项目

    由于开发环境(通常是x86架构的PC)与目标硬件(ARM架构的Mini2440)架构不同,我们需要在PC上使用交叉编译工具链来生成能在ARM板上运行的代码。这包括设置正确的编译器、链接器和其他工具,确保生成的二进制文件与...

    在RedHat 9.0下建立ARM-Linux交叉编译环境

    ### 在RedHat 9.0下建立ARM-Linux交叉编译环境 #### 一、概述 在RedHat 9.0环境下搭建ARM-Linux交叉编译环境是一项重要的工作,尤其对于那些希望在ARM架构上开发嵌入式系统的开发者来说更是如此。通过本文档,您将...

    arm-linux-gcc_4.9.1

    “arm-S3C2440-linux-gnueabi” - 这个名称揭示了工具链是针对特定的ARM处理器系列S3C2440设计的,这是三星公司生产的一款基于ARM920T内核的微处理器,常用于嵌入式系统。"linux-gnueabi"部分表明它是遵循GNU标准的...

    arm-linux-gcc 裸机程序

    2. **运行在Mini2440**:Mini2440是一款基于S3C2440 ARM9处理器的嵌入式开发板,广泛用于教学和实验。它拥有丰富的外围接口,适合进行硬件驱动和系统级编程。 3. **移植了u-boot启动代码**:u-boot是开源的微控制器...

    uart.rar_ARM Linux UART_S3C2440 gcc_s3c2440 arm-gcc_s3c2440 uart

    ARM Linux UART_S3C2440 gcc_s3c2440 arm-gcc_s3c2440 uart"表明这是一个关于S3C2440微处理器在ARM Linux系统中使用UART(通用异步收发传输器)的资源包,其中包含了使用arm-linux-gcc编译工具链的代码。这个压缩包...

    arm-linux-gcc-4.9.1

    使用这种交叉编译工具,开发者能够在一台运行不同架构或操作系统的主机上构建和调试适用于ARM Linux设备的软件,而无需在目标硬件上实际运行编译过程。这在开发过程中节省了大量时间和资源,因为高性能的工作站或...

    基于ARM-Linux和S3C2440的嵌入式Linux内核设计.pdf

    【基于ARM-Linux和S3C2440的嵌入式Linux内核设计】主要涉及的是在嵌入式系统领域中,如何基于ARM架构的处理器S3C2440设计和移植Linux内核的过程。S3C2440是一款由三星公司生产的ARM9微处理器,广泛应用于嵌入式设备...

    基于S3C2440的嵌入式Linux开发实例pdf书籍

    《基于S3C2440的嵌入式Linux开发实例》是一本专注于ARM9处理器,特别是S3C2440芯片的嵌入式系统开发教程。这本书籍旨在为读者提供一个深入理解如何在S3C2440平台上进行嵌入式Linux开发的实践指南。S3C2440是三星公司...

    基于arm-linux平台的mini2440开发板的MP3项目

    这通常涉及到设置交叉编译工具链,例如arm-linux-gcc。 3. **MP3文件传输**:将MP3文件通过USB、网络或其他方式传输到开发板上。这可能需要用到scp、sftp等工具,或者直接在开发板上创建一个共享文件夹进行访问。 ...

    arm-linux-gcc 裸机程序(Nandflash启动)

    `arm-linux-gcc`是用于ARM架构Linux系统的一种交叉编译工具链,它允许在非ARM平台(如x86 PC)上构建针对ARM处理器的代码。`Mini2440`是一款基于Samsung S3C2440处理器的开发板,广泛用于嵌入式系统学习和开发。Nand...

    crosstool-ng_for_s3c2440

    本文将详细讲解如何使用crosstool-ng工具为基于S3C2440芯片的开发板编译交叉编译工具链,并根据所需特性选择合适版本的组件。 首先,我们需要了解什么是S3C2440。S3C2440是三星电子推出的一款基于ARM920T内核的32位...

    基于S3C2440的Linux内核移植和yaffs2文件系统制作

    - 准备工作:确保开发环境正确设置,包括交叉编译工具链,S3C2440的硬件描述文件等。 - 修改源码:根据S3C2440的特性调整内核配置,如处理器类型、中断控制器、内存管理等。 - 配置内核:通过`make menuconfig`或`...

    s3c2440A linux内核移植步骤

    ### S3C2440A Linux内核移植步骤详解 #### 一、环境搭建与配置 在进行S3C2440A Linux内核移植之前,首先需要准备一个良好的开发环境。以下为环境搭建的基本步骤: 1. **安装交叉编译工具链**: - 创建一个工作...

    adc.rar_adc linux_arm-linux-gcc 4.4.3

    6. **嵌入式Linux开发环境**:设置和配置开发环境,包括交叉编译工具链、调试工具(如gdb)等。 7. **GPIO和中断处理**:可能涉及配置GPIO引脚作为ADC的输入,以及处理ADC转换完成的中断。 8. **模拟信号处理**:...

    基于S3C2440 2.6.28内核的Mplayer移植

    ### 基于S3C2440 2.6.28内核的Mplayer移植 #### 环境准备与配置 本篇主要介绍如何将最新版本的Mplayer成功移植到S3C2440处理器,并在内核版本为2.6.28的环境下进行编译与配置。此过程对于嵌入式开发人员以及多媒体...

Global site tag (gtag.js) - Google Analytics