016交叉工具链

1、什么是交叉工具链:

  从两个层次理解,第一个层次,交叉工具,第二个层次,链;

  链是集合的意思,合并到一起,交叉工具链就是一系列交叉工具的集合;

2、嵌入式开发模型——交叉开发

  在嵌入式开发里面,有一种非常重要的模型叫交叉开发模型;

  在这个模型中,有宿主机,目标机(开发板),宿主机和目标机的硬件平台是不一样的,宿主机一般都是X86平台,目标机有ARM等,X86很少,如果在宿主机上面编译程序,仅仅编译在x86平台上使用,显然放到目标机上面就运行不了了,那么就必须编译出在目标机上面运行的程序,但是宿主机又是x86平台,所以就会存在一种在x86平台上产生出一种用于其他硬件平台上面运行的程序,这种开发模式就叫做交叉开发模式;

  在嵌入式开发中,有宿主机和目标机的角色之分:宿主机是执行编译,链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。

3、常用交叉工具:

  (1)交叉编译器:arm-linux-gcc

  gcc是从/usr/include中寻找头文件的,arm-linux-gcc可以用参数-print-serach-dirs查看;

  (2)交叉链接器:arm-linux-ld

  从一个编辑好的程序到一个可以运行的程序,经过了编译和链接;

  ld就是完成链接的作用,链接成能够在ARM平台上运行的程序;

  范例:arm-linux-gcc -g -c led.S

     arm-linux-ld -Tled.lds -o led.elf led.o

     首先是工具的名字,然后如果要用到链接器脚本,使用-T指明链接器脚本,使用-o指明链接之后程序的名字,最后指明这个程序是由哪些中间文件链接而成的;

  (3)交叉转换器:arm-linux-objcopy

  链接出来的程序都是elf格式的,这种格式的文件不能直接在ARM处理器上运行,在开发板上的Linux系统上运行时,首先会由Linux系统所带的elf解析器把它解析成二进制文件,然后再去运行的,在ARM处理器或其他处理器上能够运行的程序一定是二进制格式的程序;

  怎么把elf格式的文件转换成二进制文件呢?

  由arm-linux-objcopy来做:

  范例:arm-linux-objcopy -O binary led.elf led.bin

    -O指明输出的格式   然后跟上输入文件和输出文件的名字

    bin文件能在ARM处理器上直接运行的,因为烧写到nand flash中,并没有Linux系统的支持,就没有人去帮你把elf转换成二进制,所以要在烧写之前用objcopy转换成二进制,才能在ARM处理器上运行;

  

  (4)交叉ELF文件工具:arm-linux-readelf

    不管是arm-linux-gcc直接编译链接出来的程序,还是通过arm-linux-ld间接链接出来的程序,最终得到的程序都是elf格式;

    arm-linux-readelf -a led.elf可以查看elf文件的信息;

    

    

    用arm-linux-gcc编译一个程序:arm-linux-gcc hello.c -o hello

    把这个应用程序放到开发板上去运行,运行不了,可能的情况:第一,应用程序根本就不是运行在ARM平台上的,怎么检查?可以使用命令file hello,

    

    第二,大小端不对,可以使用arm-linux-readelf -a led.elf查看大小端对不对;ARM一般是小端模式;

    还有一种情况就是库信息不对,一个应用程序是要用到一些库的,在你的开发板上有没有这些库?就得去检查了!

    可以使用:arm-linux-readelf -d hello,查看需要哪些库;

    

    

  (5)交叉反汇编器arm-linux-objdump

    反汇编器在底层的开发中是非常有用的工具,当我们编写一个程序放到开发板上运行,效果不是自己想要的,就可以去查看汇编代码,看是不是在汇编一级出现了错误。

    范例:arm-linux-objdump -D -S hello ->dump(将信息输出到dump文件中)

       让输出的信息变得简单点:

        arm-linux-gcc -g hello.c -o hello  

        然后再进行反汇编:arm-linux-objdump -D -S ->dump

        可以在vim中查找main()函数,做比较!

   

    加上--help可以查看用法!

    我们关注的只是最后的名字ld/gcc,前面的arm是指明平台,后面的是本质!

  

时间: 2024-11-04 23:33:37

016交叉工具链的相关文章

[国嵌笔记][016][交叉工具链]

交叉工具链 1.交叉工具是编译在arm平台上运行程序的工具,交叉工具链是交叉工具的集合 2.file filename 通过file命令可以查看程序运行的平台等相关信息 3.交叉开发 1.在x86平台上产生其他平台上运行程序的模式叫做交叉开发 2.宿主机是产生嵌入式软件的平台,目标机是运行嵌入式软件的平台 常用的交叉工具 1.交叉编译器 arm-linux-gcc 相同之处 arm-linux-gcc file.c -o file 与gcc用法上一样 不同之处 gcc从 /usr/include

【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

安装交叉工具链

实验平台: redhat 6    以安装 安装步骤: (1):在网上找到自己想要的交叉工具链安装包 (2):解压自己的安装包   ; tar -xzvf arm-linux-gcc-4.3.2.tar.gz   -C /     解压到或目录 或tar  -xjvf   arm-linux-gcc-3.4.5.tar.bz2   -C / 在解压的过程中我们可以看到,其可执行程序,被解压到/usr/local/arm/3.4.5/bin, (4):修改配置文件 vim  /etc/profil

编译裸机程序以及交叉工具链

把链接器脚本led.lds.源文件led.S以及Makefile给出 1.arm-linux-gcc -g -c led.S -o led.o 编译不链接且包含调试信息 2.arm-linux-ld -Tled.lds -o led.elf led.o 使用链接器脚本led.lds来进行链接 3.arm-linux-objcopy -O binary led.elf led.bin 将elf格式转换为bin 4.将生成的.bin文件烧写到开发板. 交叉工具链 1.交叉编译器 arm-linux-

ubuntu下stm32交叉工具链 构建过程1

说实话,这个过程将是十分折腾的过程,而且不一定成功,所以,我的很多朋友在听到我说要做这件事情的时候,都给我泼冷水. 但是,我还是想努力,因为这次我是下决心,非要反微软到底. 就算这个过程再难——我脑海里经常闪现起 勇敢的心 里 华伦士 最后受尽极性 仍然高喊 自由的情景. 我对自己说,也是激励自己:只有这样的人才有权利追求和获得自由. 这件事,难就难在我发现我光是为了获取一个可用的gcc编译器,在codesourcery codebench上下载下来都这么费劲. 我的网络速度相当快,但不知为什么

2.交叉工具链

2.交叉工具链 一.交叉工具链: 交叉工具链,其实他有两个含义,一个就是交叉工具,所谓的交叉工具就是运行的环境和编译的环境不是在一体的.就像我们现在,编译裸机程序是在pc机上面执行的.可我们运行程序是在开发板.链,就是很多的意思,就是一个工具的集合.在我们前面配置arm-linux-gcc的工具中.在/usr/local/arm/4.3.2/bin的目录下有很多编译工具.例如图1-1: 图1.-1 交叉工具链 下面我们来写一个简单的程序,用这些工具编译. Hello.c: #include <s

自己制作ARM-Linux交叉工具链

学习嵌入式嘛,就得自己多动手,多实践.入门的话,自己配置开发环境,移植内核这些.开发环境就不说了,移植内核首先就得编译内核.就得有编译器.由于ARM cpu的体系结构与x86不一样.通常的做法就是在 x86 开发平台使用ARM交叉编译器来编译内核,再移植到开发板上.制作交叉工具链是个仔细的活,既繁琐又有难度.网上推荐的做法是新手使用别人制作好的工具链,等以后经验多了,再来仔细研究这个.不知道为什么我就硬着头皮上了,结果花了一个星期还是倒腾出来了,算是有收获.所以这篇博文就简单记录一下,内容不涉及

交叉工具链的搭建方法(测试成功)

之前安装了一个rehat6的linux系统,把交叉编译搭建给忽视了,结果在编译uboot的时候出现问题,显示找不到arm-linux-gcc.于是自己来搭建交  叉编译环境.出现好多错.先是解压时没在后边加 -C/,后是直接自己创建了个目录,把解压后的bin目录复制到自己创建的目录.还是出现问题.但  最后我还是成功了的,直接给出操作过程: **把arm-linux-gcc复制到linux任意目录,比如是study,建议是自己创建的工作目录,便于你之后删除该压缩包. #cd study #ls

交叉工具链的用途及使用方法

交叉工具链.链即为集合,交叉工具链也就是交叉工具的集合.平时在电脑上写程序然后再进行编译链接等操作最后生成一个可执行程序,该文件都只能在X86架 构硬件上运行,而不能在我现在使用的开发板,也就是ARM架构上运行.所以进行ARM的裸机程序开发要有一套自己的工具.交叉工具链的安装和环境变量的配 置昨天学过了,现在已经忘得差不多了,但是以后会补上的.废话少说,下面开始记录今天学到的东西. 1.交叉编译器  顾名思义,就是将写好的C程序代码编译为ARM架构下的可执行文件.以前在电脑上使用的gcc,编译后