无法嵌入互操作类型 请改用适用的接口_嵌入式系统第12次课
视频:复习第3章嵌入式编程基础第4章嵌入式系统开发和调试技术嵌入式系统开发的第一步就是要搭建交叉编译环境,以建立宿主机-目标机的开发和调试模式。ARM交叉编译工具是一个包含包括准库、编译器、链接器、汇编器和调试器的开发工具包。在嵌入式开发中,使用make和Makefile工具能简洁明快地处理各个源文件之间复杂的相互关系,提供项目的开发效率。4.1 ARM开发环境的搭建由于嵌入式系统的系...
视频:复习第3章嵌入式编程基础
第4章嵌入式系统开发和调试技术
嵌入式系统开发的第一步就是要搭建交叉编译环境,以建立宿主机-目标机的开发和调试模式。ARM交叉编译工具是一个包含包括准库、编译器、链接器、汇编器和调试器的开发工具包。在嵌入式开发中,使用make和Makefile工具能简洁明快地处理各个源文件之间复杂的相互关系,提供项目的开发效率。
4.1 ARM开发环境的搭建
由于嵌入式系统的系统资源十分有限,程序员无法在上面直接进行嵌入式软件开发。通用PC机器上运行的集成开发环境,也不可能原封不动的移植到嵌入式系统的平台上。因此,在嵌入式开发中,必须在PC机器平台上建立一个交叉开发环境,建立宿主机-目标机的开发和调试模式。通过该环境就可以生成能在ARM平台上执行的程序。
4.1.1 交叉开发环境概述
交叉编译和本地编译是相对的概念。
本地编译是指在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译。比如,在X86(PC)平台上,编写程序并编译成可执行程序。这种方式下,使用x86平台上的工具,开发针对x86平台本身的可执行程序,这个编译过程称为本地编译。
交叉编译是在一种平台上编译出能在另一种平台(体系结构不同)上运行的程序。例如,在X86上,使用交叉编译工具,编译出运行在ARM平台上的程序。交叉编译得到的程序在X86平台上不能运行,必须放到ARM平台上才能运行。
用来实现交叉编译的工具称为交叉编译器。交叉编译器只是交叉开发环境的一部分,完整的交叉开发环境是指包含交叉编译、交叉链接、交叉调试在内的一整套的嵌入式应用软件开发环境。为了不与本地编译器混淆,交叉编译器的名字一般都有前缀,例如,gcc是x86平台的本地编译器,而arm-none-Linux-gnueab-gcc是交叉编译器。
交叉编译的过程如下图,教材第90页,图4-1。
视频:解析交叉编译过程
交叉编译过程
首先在宿主机上使用代码编辑器进行源文件的编写,比如C语言源程序.c文件、汇编语言.S文件;然后使用交叉编译器生成目标文件,再使用交叉链接器将目标文件链接成可以在目标机平台上可以运行的二进制可执行文件;接着下载到目标平台上运行,最后再利用宿主机上的调试工具对目标板上运行的程序进行远程调试。
将在在宿主机平台上编译好的可执行文件下载到目标机平台上,可以采用串行接口、以太网接口、USB接口、SD卡和JTAG接口。
4.1.3 Windows平台交叉开发环境搭建
在Windows平台下进行嵌入式开发有很多集成的编译环境。
(2)Eclipse CDT +YAGARTO
Eclipse CDT是Eclipse的插件,它将把Eclipse转换为功能强大的C/C++集成开发环境。它将JAVA开发人员喜爱的许多Eclipse优秀功能提供给C/C++开发人员,例如项目管理、集成调试、类向导、自动构建、语法着色和代码完成。CDT将利用标准的C/C++工具与Eclipse相集成,例如g++、make和gdb。
YAGARTO(Yet another GNU ARM toolchain)是一个开源的GNU开发工具链。YAGARTO和Eclipse CDT结合起来可以提供一个比较好的开源Cortex-A8开发环境。
Eclipse的优点是源代码编辑环境非常友好,可以加快源代码的编辑速度。缺点是对C/C++的开发支持不是很友好,C/C++源代码编辑环境不如JAVA方便。在Eclipse中安装GNU ARM Eclipse插件、配置编译与调试环境比较繁琐,很容易出错。
4.2 ARM 交叉编译工具
交叉编译工具主要包括标准库、编译器、链接器、汇编器和调试器。这些工具主要由glibc、gcc、binutils和gdb四个软件包提供。
1、glibc标准库
glibc(GNU C Library),是GNU发布的公开源码、免费的libc库,即c运行库。glibc是Linux系统中最底层的API(ApplicationProgramming Interface,应用程序编程接口),几乎其它任何运行库都会依赖glibc。glibc是ARM GNU交叉编译工具链的关键组件,用于和二进制工具和编译器一起使用,为目标架构生成用户空间的应用程序。
glibc除了封装Linux操作系统所提供的系统服务外,它本身也提供了许多其他功能的函数。
2、gcc编译工具
3、binutils工具
binutils是一组针对目标系统的二进制开发工具,其中包括链接器、汇编器和其他用于目标文件和档案的工具。
直接使用链接脚本来设置起始地址。
例如,以下命令中有个链接脚本:
ld –T timer.lds –o timer_elf a.o b.o
视频:分析链接脚本含义
4.3 Makefile简介
make工具可自动完成工程的编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译,有效的利用make和makefile工具能大大提高项目开发的效率。
Makefile文件确定了整个工程的编译规则。一个工程中的源文件有很多,按类型、功能、模块分别放在若干个目录中。Makefile定义通过一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,还有更复杂的功能操作。Makefile最大的优势就是可以进行自动化编译,文件一旦写好,只需要一个make命令,整个工程完全自动编译。
请同学们认真听课,并做好笔记,有疑问,请在班级群里交流。边听边写笔记,不懂的,群里问,认真学习,差不多要1个半小时。
下面是作业,请记得抄题目,结尾写上班级,名字,学号最后两位,拍照私发给老师。
第12次课作业
1、简述嵌入式系统交叉编译过程。
2、在嵌入式交叉编译中,宿主机和目标机有哪几种通信方式,各有什么特点?
3、下面的连接脚本的含义是什么?
ENTRY(begin)
SECTION
{
.=0x30000000;
.text:{*(.text)}
.data:{*(.data)}
.bss:{*(.bss)}
}
更多推荐
所有评论(0)