`
duyouhua1214
  • 浏览: 238168 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

arm-linux-gcc 4.3.3 Illegal instruction 及制作文件系统

 
阅读更多

4.3.3这个编译器是带EABI的,也就是说具有突出的浮点预算性能,就是Float Point Performance,它使用Vector Float Point(矢量浮点),因此可以极大提高涉及到浮点运算的程序 。而现在手头既有6410又有2410,这个EABI对这两个处理器编译出来的程序有什么不同么?

一、预先了解它会做什么首先我们就先弄清楚它是什么:

arm-linux-gcc --help 提示中有一个值得注意:

-print-libgcc-file-name  Display the name of the compiler's companion library

这个告诉我们编译器使用的是哪个库,执行结果如下:从中我们可以知道其使用的是mv4t版本的库,其实在/usr/local/arm/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/目录还有一套其它版本的库,

arm-linux-gcc -print-libgcc-file-name
/usr/local/arm/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/armv4t/libgcc.a

 

arm-none-linux-gnueabi-gcc  -print-libgcc-file-name

/usr/local/arm/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/libgcc.a

 

执行下面命令可以看到编译器会搜索的目录,从结果可以看到既会搜索mv4t版本也会搜索更高版本的库。

arm-linux-gcc -print-search-dirs

 

注意:到编译器目录/usr/local/arm/4.3.3/bin/ 我们看一下,发现有如下文件,它们是什么关系?
a.   arm-none-linux-gnueabi-gcc-4.3.3
   arm-none-linux-gnueabi-gcc-4.3.3 与 arm-none-linux-gnueabi-gcc 的内容完全相同

b.   arm-none-linux-gnueabi-gcc

c.   arm-none-linux-gnueabi-g++

A.   arm-linux-g++

#!/bin/sh
arm-none-linux-gnueabi-g++ -march=armv4t $* 

B.   arm-linux-gcc 是一个脚本:

#!/bin/sh
arm-none-linux-gnueabi-gcc -march=armv4t $*

C.   arm-linux-gcc-4.3.3

#!/bin/sh
arm-none-linux-gnueabi-gcc-4.3.3 -march=armv4t $*

 

二、有了基本了解,再了解一下我们的处理器,两个处理器的架构区别:

S3C2410/S3C2440,是ARM920T的核心,架构指令是armv4t

S3C6410 ARM1176JZF-S核心,是armv6架构 :ARM11系列微处理器内核(ARM1156T2-S内核、ARM1156T2F-S内核ARM1176JZ-S内核和ARM11JZF-S内核)

所以如果要编译给6410使用可以改为: -march=armv6  -mcpu=arm1176jzf-s  或者

 

        -march=armv6  -mcpu=arm1176jzf-s -mfloat-abi=softfp -mfpu=vfp $*   (使用VFP)

 

   我们可以用arm-linux-gcc  --target-help命令查看编译器支持的处理器及架构

 

三、问题和程序编译:

如果应用程序出现 Illegal instruction 错误不能执行等类似问题,一种原因是我们文件系统的库选错了(或者是mv4t或者是更高版本库),另一种原因就是编译的时候编译成了另外版本的应用程序。也许有其他版本的编译器默认库是高版本库,那么我们需要-march=armv4t 之类参数来指定。或者直接做个arm-linux-gcc脚本:

exec arm-none-linux-gnueabi-gcc -march=armv4t $*

同样可以解决问题,至于将应用程序编译成静态库去解决这个问题,好像是没有这个必要了。

网上有解决编译busybox问题的方法:

-----------------http://www.arm9home.net/simple/index.php?t2986.html

在busybox的Makefile里面
将ARCH ?= $(SUBARCH)
修改为ARCH ?= armv4t
我看好多资料是将其修改为
ARCH ?= arm
这样是不行的
2440内核使用的是arm920t的内核
就是armv4t体系
修改了效果是一样的

-----------------

 

四、遗留问题,通过执行 arm-linux-gcc –dumpspecs  命令可以看到很多有用的信息,如指定软硬浮点,指定处理器。以及怎么样来制作一个优化的编译器都是值得进一步研究的

 

来源:http://www.cnblogs.com/leaven/archive/2010/10/11/1848138.html

分享到:
评论

相关推荐

    arm-linux-gcc-4.3.3(交叉编译链).zip

    标题中的“arm-linux-gcc-4.3.3(交叉编译链)”指的是一个用于在非ARM架构系统上构建Linux应用程序的工具链。交叉编译是软件开发中的一个重要概念,特别是针对嵌入式系统,因为它允许我们在具有强大硬件资源的主机...

    arm-linux-gcc4.3.3(友善之臂)安装

    解决arm-linux-gcc4.3.3(友善之臂光盘里的)安装出现command not found的问题

    arm-linux-gcc和arm-elf-gcc 区别

    arm-linux-gcc 和 arm-elf-gcc 的主要区别在于使用不同的 C 库文件,arm-linux-gcc 使用 Glibc,而 arm-elf-gcc 使用 uClibc/uC-libc 或者 newlib。开发者可以根据自己的需求选择合适的 GCC 工具链。

    arm-linux-gcc.4.3.2.rar

    第一步:将arm-linux-gcc-4.3.2.bz2拷贝到虚拟机的任意目录 第二步:查看当前系统是否支持arm-linux-gcc 如果不存在 则继续如下步骤: 第三步:在/usr/local创建一个文件夹为arm mkdir /usr/local/arm 第四步:将arm...

    arm-linux-gcc4.3.3

    编译工具,适用于omap3530_linux等,上传做个备份,想学习的朋友可以下载

    arm-linux-gcc-5.4.0.tar.gz

    要安装`arm-linux-gcc-5.4.0`,首先需要解压下载的文件。使用`tar`命令可以做到这一点: ```bash tar -zxvf arm-linux-gcc-5.4.0.tar.gz ``` 解压后,通常会得到一个含有编译器二进制文件的目录结构。为了能够在...

    arm-linux-gcc-3.4.1(交叉编译器)

    Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...

    arm-linux-gcc交叉编译器 4.3.2 part2

    本文件为arm-linux-gcc-4.3.2.tgz的part2 arm-linux-gcc-4.3.2.tgz.ab,需要与arm-linux-gcc-4.3.2.tgz的part1 arm-linux-gcc-4.3.2.tgz.aa 合并成一个文件arm-linux-gcc-4.3.2.tgz 安装方法: 0. cat arm-linux-gcc-...

    arm-linux-gcc-5.4.0.tar.gz交叉编译器

    安装ARM-Linux-GCC 5.4.0通常涉及解压`arm-linux-gcc-5.4.0.tar.gz`文件,然后遵循提供的编译和安装指南。在这个过程中,`arm-linux.txt`文件可能是编译和配置过程的说明文档,详细指导如何设置环境变量、配置选项...

    arm-linux-gcc-4.3.2(交叉编译器)

    Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...

    arm-linux-gcc-5.4.0交叉编译工具.rar

    总结来说,`arm-linux-gcc-5.4.0`是一个强大的工具,使得开发者能够在非ARM设备上构建和测试针对ARM Linux系统的应用。它的重要性在于提高了跨平台开发的效率和灵活性,特别是在处理复杂的项目如QT时,新版本的...

    arm-linux-gcc-4.4.3安装包及安装教程

    1. 将下载的`arm-linux-gcc-4.4.3.tar.gz`文件移动到你的工作目录。 2. 使用`tar -zxvf arm-linux-gcc-4.4.3.tar.gz`命令解压缩文件。 **三、配置编译环境** 1. 进入解压后的目录:`cd arm-linux-gcc-4.4.3` 2. ...

    Ubuntu下安装arm-linux-gcc交叉编译

    首先,需要下载 arm-linux-gcc 的安装包,例如 arm-linux-gcc-4.3.2.tgz。可以从网上下载,例如从 http://download.csdn.net/detail/xinhuameng/2642452 下载。下载完成后,需要将其解压到指定目录下,例如 /usr/...

    arm-linux-gcc-4.5.1(安装包及教程)

    标题中的"arm-linux-gcc-4.5.1(安装包及教程)"指的是一个用于在Ubuntu 14.04 64位操作系统上搭建ARM架构Linux系统交叉编译环境的工具包及其配套教程。这个工具包主要是GCC(GNU Compiler Collection)的一个版本,...

    交叉编译环境的建立arm-linux-gcc-4.3.2的安装

    可以访问官方或者可信的第三方网站下载该版本的源码压缩包,假设下载的文件名为`arm-linux-gcc-4.3.2.tgz`。 2. **解压arm-linux-gcc-4.3.2源码包** 使用命令行工具解压刚刚下载的文件: ```bash tar xvf arm-...

    arm-linux-gcc-4.4.3.tar.gz

    标题中的"arm-linux-gcc-4.4.3.tar.gz"是一个针对ARM架构Linux系统的交叉编译工具链的压缩包,版本为4.4.3。这个工具链包含了用于构建和编译针对ARM处理器应用程序的GCC(GNU Compiler Collection)和其他必要的库和...

    arm-linux-gcc交叉编译器 3.4.1

    Configured with: /opt/crosstool/crosstool-0.28/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/crosstool/arm-linux/gcc-3.4.1-...

    arm-linux-gcc-4.6.4-arm-x86_32.tar

    arm-linux-gcc编译器,32位的4.6.4版本,还有4.6~4.9的版本的arm-linuxgcc编译器在我的资源中可以找到

    arm-linux-gcc-4.6.4-arm-x86-64交叉编译器安装包(含详细安装教程)

    ARM-Linux-GCC-4.6.4-arm-x86_64交叉编译器是为在基于x86架构的主机上构建针对ARM处理器的Linux应用程序而设计的工具链。这个工具链包括了编译器、链接器、库和其他必要的组件,使得开发者可以在不依赖目标硬件的...

    arm-linux-gcc-4.5.1(友善之臂提供的最新交叉编译器)

    ARM-Linux-GCC-4.5.1是友善之臂提供的一个特定版本的交叉编译器,主要用于在非ARM架构的主机上构建针对ARM架构的Linux应用程序。交叉编译器是一种特殊的编译器,能够在一种处理器平台上生成适用于另一种处理器平台的...

Global site tag (gtag.js) - Google Analytics