当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]与非网(EEFOCUS)电子产业社区平台为中国电子行业首家采用强大技术平台,由专业的电子技术编辑服务,为全球3000家知名半导体厂家及电子技术系统厂商提供技术信息发布、厂商网站、技术社区建设服务,并以电子术语词典,集成电路数据手册查询,电子产品新闻访谈资讯信息以及互动技术交流社区为上百万电子技术工程师以及高校师生提供最完整的电子技术信息查询和交流服务。

通常为了把一个应用程序从源文件转变为可执行的二进制代码,需要以下三个部分:

一、编译器

二、(目标代码)连接器

三、程序库

其中编译器部分还可细分为预处理器,C编译器和汇编编译器等. GCC的功能是C编译器1.Binutils 最重要的成员是汇编编译器和连接器,还包括一些二进制代码工具. 程序库通常是C或C++标准库. 注意这三部分是彼此独立的,也就是说,GCC并不是非要Binutils中的工具,也可以使用其它汇编编译器和连接器,也可以使用其它C程序库.

1.1 GCC

GCC是GNU公社的一个项目。是一个用于编程开发的自由编译器。最初,GCC只是一个C语言编译器,他是GNU C Compiler 的英文缩写。随着众多自由开发者的加入和GCC自身的发展,如今的GCC以经是一个包含众多语言的编译器了。其中包括 C,C++,Ada,Object C和Java等。所以,GCC也由原来的GNU C Compiler变为GNU Compiler Collection。也就是 GNU编译器家族 的意思。

GNU编译器集GCC是通过使用一种叫做“寄存器转换语言”(RTL)的方式实现的。假定现在有一种基本的机器描述性文件,它已经能满足大家的需要。现在要做的仅仅是设置默认情况下使用的参数和如何将文件组合成可执行文件的方式。GNU的文档提供了所有必需的资料,使得用户可以为新型的处理器的指令集合提供支持。如果要针对体系的机器建立一个新的目标机器,那么就必须指定默认编译参数和定制系统的特定参数。对于特定的目标系统,可以使用TARGET_DEFAULT宏来在target.h文件中定义编译器的开关。目标t-makefile段指定了应该构建哪一个额外的例程和其编译的方式。

1.2 GNU binutils简介

GNU 开发工具链(toolchain)主要是指­ GNU Compiler Collection、GNU libc 以及用来编译、测试和分析软件的 GNU binutils三个大的模块。

GNU binutils 是一套用来构造和使用二进制文件所需要的工具。其中两个最为关键的 binutils 是 GNU 链接器——ld 和 GNU 汇编程序——as。这两个工具是 GNU 工具链中的两个完整部分,通常是由 GCC 前端进行驱动的。

binutils包含的程序有:

addr2line:程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。

ar:建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。

As: 主要用来编译GNU C编译器gcc输出的汇编文件,产生的输出文件由连接器ld连接。gasp:是一个汇编语言宏预处理器。

gprof:显示程序调用段各种数据。

ld:把一些目标和归档文件结合在一起,重定位数据,并链接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。

nm :列出目标文件中的符号。

objcopy :把一个目标文件中的内容复制到另一个目标文件。

objcopy使用GNU BFD库来读写目标文件。源文件和目的文件可以是不同的格式。

objdump:显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。

ranlib:产生归档文件索引,并将其保存到这个归档文件中。

readelf:显示elf格式的可执行文件的信息。

size:列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。

Strings:打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符。这个程序对于了解非文本文件的内容很有帮助。

Strip:丢弃某些目标文件中的全部或者特定符号。这些目标文件中可以包括归档文件。它至少需要一个目标文件名作为参数。strip直接修改参数指定的文件,不为修改后的文件重新命名。

1.3 GDB

Gdb:调试器,可使用多种交叉调试方式,gdb-bdm(背景调试工具),gdbserver(使用以太网络调试)。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用

嵌入式开发是一种专门针对特定硬件平台设计和实现软件系统的工程实践,它涵盖了从需求分析、系统设计、编程实现、调试测试直到产品部署及维护的全过程。本文将深入探讨嵌入式开发的主要阶段,分解其流程并阐述每个步骤的关键要点,以便于...

关键字: 嵌入式开发 嵌入式软件
关闭
关闭