当前位置:文档之家› 嵌入式系统体系结构

嵌入式系统体系结构

Linux 的软件开发环境编译原理Linux 环境下的GCC 及ARM交叉编译器的概念和使用调试技术内核编译、裁减以及Linux 的移植从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序.术语编译程序的源语言(源程序)编译程序的目标语言(目标程序)编译程序的实现语言S OI高级语言书写的程序编译程序低级语言程序S TI分类软件系统软件语言处理系统操作系统编译系统裸机软件:计算机系统中的程序及其文档 系统软件:居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。

他和具体的应用领域无关,如编译系统和操作系统等。

语言处理系统:把软件语言书写的各种程序处理成可在计算机上执行的程序。

软件语言:用于书写软件的语言。

它主要包括需求定义语言,功能性语言,设计性语言,程序设计语言以及文档语言。

预处理器编译器汇编器装配连接编辑骨架程序源程序目标汇编程序可重定位机器代码绝对机器码可重定位目标文件库语言处理过程(变)换系统C++CC++编译器Java BytecodeJava编译器编译程序(compiler)编译程序的源语言(源程序) (source language)(source program)编译程序的目标语言(目标程序) (object or target language)(object or target program) 编译程序的实现语言(implementation language)语言处理程序(language processor)语言转(变)换(language transformation)编译逻辑过程★词法分析★语法分析★语义分析★中间代码生成★代码优化★目标代码生成从左至右读字符流的源程序、识别(拼)单词例:position := initial + rate * 60;position := initial + rate * 60;单词类型单词值标识符1(id1)position算符(赋值):=标识符2(id2)initial算符(加)+标识符3(id3)rate算符(乘)*整数60分号;C源程序片断:int a;a = a + 2;词法分析后可能返回:单词类型单词值保留字int标识符(变量名)a界符;标识符(变量名) a算符(赋值)=标识符(变量名) a算符(加)+整数2界符;功能:层次分析.依据源程序的语法规则把源程序的单词序列组成语法短语(表示成语法树).position := initial + rate * 60 ;规则<赋值语句>::=<标识符>“:=”<表达式><表达式>::=<表达式>“+”<表达式><表达式>::=<表达式>“*”<表达式><表达式>::=“(”<表达式>“)”<表达式>::=<标识符><表达式>::=<整数><表达式>::=<实数>赋值语句标识符表达式表达式+表达式表达式标识符整数标识符:=表达式*:=+N 60*id1 Positionid2 initialid3 rate语义审查(静态语义)上下文相关性类型匹配类型转换例:Program p();Var rate:real;procedure initial;…position := initial + rate * 60/* error */ /* error */ /* warning */;…:int arr [2],abc;abc = arr * 10;…Program p();Var rate:real;Var initial :real;Var position :real ;…position := initial + rate * 60(semantic analysis)60:=+*Id1 positionId2 initialId3 rateinttoreal(intermediate code generation)源程序的内部(中间)表示三元式、四元式、P-Code、C-Code、U-Code、bytecode( *id3t1t2)t2 = id3 * t1t2 := id3 * t1id1:= id2 + id3 * 60(1)(inttoreal,60-t1)(2)(*,id3t1t2)(3)(+,id2t2t3)(4)(:=,t3-id1)id1:= id2 + id3 * 60(1)(inttoreal60-t1)(2)( *id3t1t2)(3)( +id2t2t3)(4)( :=t3-id1)变换(1)( *id360.0t1)( 2)(+id2 t1id1)(code optimization)t1 = b* c t1 = b* ct2 = t1+ 0 t2 = t1 + t1 t3 = b* c a = t2t4 = t2 + t3a = t4(*,id360.0t1) (+,id2t1id1)movf id3,R2mulf#60.0,R2movf id2,R1addf R2,R1movf R1,id1(symbol table)记录源程序中使用的名字收集每个名字的各种属性信息 类型、作用域、分配存储信息Const1常量值:35Var1变量类型:实层次:2(error handling)检查错误、报告出错信息、排错、恢复编译工作(components)词法分析程序语法分析程序语义分析程序中间代码生成程序代码优化程序目标代码生成程序符号表管理程序出错处理程序出错处理语法分析程序语义分析程序目标代码生成程序词法分析程序中间代码生成程序代码优化程序表格管理分析,综合(synthesis)源程序的分析线性分析层次分析语义分析目标程序的综合编译的前端(front end)编译的后端(back end)遍(趟)从头到尾扫描源程序(各种形式)一遍(pass)(interpreter)功能让计算机执行高级语言(basic,Matlab,prolog) 与编译程序的不同1)不生成目标代码2)能支持交互环境(同增量式编译系统)源程序初始数据直接对源程序中的语句进行分析,执行其隐含的操作。

如:… …b := 2 ;a := b+2 ; 编译程序write a ;… …解释程序直接将4的值输出(显示)名字表目标代码缓冲区编译用源程序中间表示各种表格目标代码区数据区源程序缓冲区功能:程序集成环境实现方式手工机器语言汇编系统程序设计语言自动构造工具lex yacc gcc语言范型(paradigms)命令式(imperative language)应用式(applicative)基于规则的(rule-based)面向对象的(object-oriented) 编译程序执行环境批处理交互环境嵌入系统环境并行编译技术交叉编译技术硬件描述语言及其编译技术目的:提高并行计算机体系结构的性能。

超大规模计算的日益增长的需求高性能计算机 并行软件并行体系结构单机速度并行体系结构途径1途径2编译技术支持串行程序并行化编译技术支持并行程序设计语言编译依赖于目标机的优化(低层)由于目标机指令系统与宿主机的指令系统不同,编译时将应用程序的源程序在宿主机上生成目标机代码,称为交叉编译。

S OI OA B嵌入式操作系统 宿主机操作系统及支撑环境编辑器连接器交叉调试器仿真器下载器交叉编译器代码优化器嵌入式应用电路设计依据 验证结果如:VHDL嵌入式系统和系统软件级的开发所需的计算机知识较多,而首当其冲的是嵌入式开发工具的学习,首先我们需要清楚的是为什么我们需要嵌入式开发工具:在嵌入式系统开发中目标机与宿主机是分离的,它们之间往往具有不同的组织结构,例如:我们在研究过程中宿主机一般均为PC,而目标机为不同的开发板,这些开发板和PC具有不同的体系结构,而我们为了使在PC上运行的程序在目标机上能够运行就需要将源程序编译成相应的目标代码,而这就是我们需要嵌入式开发工具的主要原因.在众多嵌入式开发工具中GNU Tools(基于Open Source的软件)是Linux环境下最重要的开发工具集,为了有效的开发嵌入式系统,至少需要了解和掌握如下几类工具:(1)编译开发工具:即能够把一个源程序编译生成一个可执行的软件,如gcc等。

(2)调试工具:即能够对执行程序进行源码或汇编级调试的软件,如gdb。

(3)软件工程工具:用于协助多人开发或大型软件项目的管理的软件,如make,cvs。

在GNU Tools中最基本的一些工具就包括: ld(链接器),as(汇编器),gcc(C语言编译器),glibc(包含各种基本函数实现的软件库)上述大部分软件均可以在ftp:///gnu/上下载。

binutils是一组二进制工具程序集,它主要包括链接器,汇编器和其它用于处理目标文件和档案的工具。

其中链接器为ld,它的主要作用是把各种目标文件(.O文件和)和库文件链接在一起,并根据定位数据和函数的地址,最终生成执行程序。

汇编器主要是AS: 是GNU编译器的汇编器(Assembler),负责把.S或.s为后缀的汇编文件编译成. 以.o为后缀的目标文件处理目标文件和档案的主要工具是ar,它用于建立,修改和提取归档文件。

一个归档文件是包含多个被包含文件的单个文件程序员可以从归档文件中检索并得到原始的被包含文件的内容,模式,时间戳,所有者和组等属性glibc是GNU的C语言标准程序库,C语言将部分函数留给操作系统来实现,当我们的程序需要调用时,就要通过操作系统提供的C程序库来取得这些服务。

程序库与应用程序的链接方式可分为静态与动态链接两种方式,当应用程序需要一个动态链接库时就需要我们自己安装一个动态库在Linux操作系统中。

Gcc编译工具:gcc是一个强大的工具集合,它主要为GNU提供C编译器,现在Gcc也开始支持多种工具语言,如JAVA,FORTRAN 等。

如果能较好的掌握它,我们就能够通过它提供的足够多的参数来全面控制代码的生成。

在安装GNU Tools之前你需要注意的有两个问题:(一)需要了解宿主机和目标机的体系结构。

这是因为不同的体系结构所需的开发工具的版本是不同的。

(二)不同开发工具之间版本的控制。

此图列出了到目前为止成功的版本配置宿主机目标机OS内核Binutils Gcc Glibc I386i386Linux 2.4.x 2.14.90 3.3.1 2.3.2 i386ppc Linux 2.4.x 2.10.1 2.95.3 2.2.1 i386arm Linux 2.4.x 2.13.90 3.2.1 2.3.1 i386mips Linux 2.4.x 2.8.1Egcs-1.1.2 2.0.6 sparc ppc Linux 2.4.x 2.10.1 2.95.2 2.1.3 ppc arm Linux 2.4.x 2.10.1 2.95.3 2.2.3 i386strongarm Linux 2.6.x 2.14.1 3.3.3 2.3.2 i386xscale Linux 2.6.x 2.14.1 3.3.3 2.3.2的安装(三)对于每个单独的工具软件包,它的配置/编译/安装过程一般包括如下几步:(1)下载并解压软件包;(2)配置软件包;(3)编译软件包;(4)安装软件包;为了安装某些GNU Tools,可能还需要对Linux内核的include文件进行配置,这主要是由于glibc的安装是与Linux内核相关的。

相关主题