嵌入式系统体系结构.pps

上传人:s****8 文档编号:66210892 上传时间:2022-12-14 格式:PPS 页数:75 大小:901.50KB
返回 下载 相关 举报
嵌入式系统体系结构.pps_第1页
第1页 / 共75页
嵌入式系统体系结构.pps_第2页
第2页 / 共75页
点击查看更多>>
资源描述

《嵌入式系统体系结构.pps》由会员分享,可在线阅读,更多相关《嵌入式系统体系结构.pps(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、过系统软件发挥作用。他和具体的应用领域无关,如编译系统和操作系统等。语言处理系统:把软件语言书写的各种程序处理成可在计算机上执行的程序。软件语言:用于书写软件的语言。它主要包括需求定义语言,功能性语言,设计性语言,程序设计语言以及文档语言。预处理器编译器汇编器装配连接编辑骨架程序 源程序 目标汇编程序 可重定位机器代码 绝对机器码可重定位目标文件库语言处理过程语言处理过程语言转(变)换系统C+编译器C+CJavaBytecodeJava编译器术语编译程序(compiler)编译程序的源语言(源程序)(sourcelanguage)(sourceprogram)编译程序的目标语言(目标程序)(o

3、bjectortargetlanguage)(objectortargetprogram)编译程序的实现语言(implementationlanguage)语言处理程序(languageprocessor)语言转(变)换(languagetransformation)编译过程和编译程序的结构编译逻辑过程词法分析语法分析语义分析中间代码生成代码优化目标代码生成词法分析从左至右读字符流的源程序、识别(拼)单词例:position:=initial+rate*60;词法分析position:=initial+rate*60;单词类型单词类型单词值单词值标识符1(id1)position算符(赋值):

4、=标识符2(id2)initial算符(加)+标识符3(id3)rate算符(乘)*整数60分号;又如一个C源程序片断:inta;a=a+2;词法分析后可能返回:单词类型单词类型单词值单词值保留字int标识符(变量名)a界符;标识符(变量名)a算符(赋值)=标识符(变量名)a算符(加)+整数2界符;语法分析功能:层次分析.依据依据源程序的语法规则语法规则把源程序的单词序列组成语法短语(表示成语法树).position:=initial+rate*60;规则规则:=“:=”:=“+”:=“*”:=“(”“)”:=:=:=赋值语句标识符表达式表达式+表达式表达式标识符整数标识符:=表达式*id1:

5、=id2+id3*N:=+N 60*id1 Positionid2 initialid3 rate语义分析语义审查(静态语义)上下文相关性类型匹配类型转换例:Program p();Var rate:real;procedure initial;position:=initial +rate*60/*error*/*error*/*warning*/;又如:intarr2,abc;abc=arr*10;Programp();Varrate:real;Varinitial:real;Varposition:real;position:=initial+rate*60语义分析(semantican

6、alysis)60:=+*Id1 positionId2 initialId3 rateinttoreal中间代码生成(intermediatecodegeneration)源程序的内部(中间)表示三元式、四元式、P-Code、C-Code、U-Code、bytecode(*id3t1t2)t2=id3*t1t2:=id3*t1中间代码生成id1:=id2+id3*60(1)(inttoreal,60-t1)(2)(*,id3t1t2)(3)(+,id2t2t3)(4)(:=,t3-id1)代码优化id1:=id2+id3*60(1)(inttoreal60-t1)(2)(*id3t1t2)(

7、3)(+id2t2t3)(4)(:=t3-id1)变换变换 (1)(*id360.0t1)(2)(+id2 t1id1)代码优化(codeoptimization)t1=b*ct1=b*ct2=t1+0t2=t1+t1t3=b*ca=t2t4=t2+t3a=t4目标代码生成(*,id360.0t1)(+,id2t1id1)movfid3,R2mulf#60.0,R2movfid2,R1addfR2,R1movfR1,id1符号表管理(symboltable)记录源程序中使用的名字收集每个名字的各种属性信息类型、作用域、分配存储信息Const1常量值:35Var1变量类型:实层次:2出错处理(e

8、rrorhandling)检查错误、报告出错信息、排错、恢复编译工作编译程序结构(components)词法分析程序语法分析程序语义分析程序中间代码生成程序代码优化程序目标代码生成程序符号表管理程序出错处理程序出错处理语法分析程序语义分析程序目标代码生成程序词法分析程序中间代码生成程序代码优化程序表格管理编译阶段的组合分析,综合(synthesis)源程序的分析线性分析层次分析语义分析目标程序的综合编译的前端(frontend)编译的后端(backend)遍(趟)遍(趟)从头到尾扫描源程序(各种形式)一遍遍(pass)高级语言解释系统(interpreter)功能让计算机执行高级语言(basi

9、c,Matlab,prolog)与编译程序的不同1)不生成目标代码2)能支持交互环境(同增量式编译系统)源程序初始数据解释系统直接对源程序中的语句进行分析,执行其隐含的操作。如:b:=2;a:=b+2;编译程序writea;解释程序直接将4的值输出(显示)编译阶段和运行阶段存储结构名字表目标代码缓冲区编译用源程序中间表示各种表格目标代码区数据区源程序缓冲区编译技术的发展和应用功能:程序集成环境实现方式手工机器语言汇编系统程序设计语言自动构造工具lexyaccgcc编译程序的发展语言范型(paradigms)命令式(imperativelanguage)应用式(applicative)基于规则的

10、(rule-based)面向对象的(object-oriented)编译程序执行环境批处理交互环境嵌入系统环境研究领域并行编译技术交叉编译技术硬件描述语言及其编译技术并行化编译技术目的:提高并行计算机体系结构的性能。超大规模计算的日益增长的需求高性能计算机并行软件并行体系结构单机速度并行体系结构途径1途径2并行体系结构编译技术支持串行程序并行化编译技术支持并行程序设计语言编译依赖于目标机的优化(低层)由于目标机指令系统与宿主机的指令系统不同,编由于目标机指令系统与宿主机的指令系统不同,编译时将应用程序的源程序在宿主机上生成目标机代译时将应用程序的源程序在宿主机上生成目标机代码,称为交叉编译。码

11、,称为交叉编译。SOIOAB交叉编译器硬件描述语言及其编译技术电路设计依据验证结果如:VHDL嵌入式开发工具基本概念嵌入式系统和系统软件级的开发所需的计算机知识较多,而首当其冲的是嵌入式开发工具的学习,首先我们需要清楚的是为什么我们需要嵌入式开发工具:在嵌入式系统开发中目标机与宿主机是分离的,它们之间往往具有不同的组织结构,例如:我们在研究过程中宿主机一般均为,而目标机为不同的开发板,这些开发板和具有不同的体系结构,而我们为了使在上运行的程序在目标机上能够运行就需要将源程序编译成相应的目标代码,而这就是我们需要嵌入式开发工具的主要原因嵌入式开发工具简介(一)在众多嵌入式开发工具中GNUTool

12、s(基于OpenSource的软件)是Linux环境下最重要的开发工具集,为了有效的开发嵌入式系统,至少需要了解和掌握如下几类工具:(1)编译开发工具:即能够把一个源程序编译生成一个可执行的软件,如gcc等。(2)调试工具:即能够对执行程序进行源码或汇编级调试的软件,如gdb。(3)软件工程工具:用于协助多人开发或大型软件项目的管理的软件,如make,cvs。嵌入式开发工具简介(二)在GNUTools中最基本的一些工具就包括:ld(链接器),as(汇编器),gcc(C语言编译器),glibc(包含各种基本函数实现的软件库)上述大部分软件均可以在ftp:/ftp.gnu.org/gnu/上下载。

13、嵌入式开发工具简介(三)binutils是一组二进制工具程序集,它主要包括链接器,汇编器和其它用于处理目标文件和档案的工具。其中链接器为ld,它的主要作用是把各种目标文件(O文件和)和库文件链接在一起,并根据定位数据和函数的地址,最终生成执行程序。汇编器主要是AS:是GNU编译器的汇编器(Assembler),负责把.S或.s为后缀的汇编文件编译成.以.o为后缀的目标文件处理目标文件和档案的主要工具是ar,它用于建立,修改和提取归档文件。一个归档文件是包含多个被包含文件的单个文件程序员可以从归档文件中检索并得到原始的被包含文件的内容,模式,时间戳,所有者和组等属性嵌入式开发工具简介(四)gli

14、bc是GNU的C语言标准程序库,C语言将部分函数留给操作系统来实现,当我们的程序需要调用时,就要通过操作系统提供的C程序库来取得这些服务。程序库与应用程序的链接方式可分为静态与动态链接两种方式,当应用程序需要一个动态链接库时就需要我们自己安装一个动态库在Linux操作系统中。嵌入式开发工具简介(五)Gcc编译工具:gcc是一个强大的工具集合,它主要为GNU提供C编译器,现在Gcc也开始支持多种工具语言,如JAVA,FORTRAN等。如果能较好的掌握它,我们就能够通过它提供的足够多的参数来全面控制代码的生成。GNUTools的安装(一)在安装GNUTools之前你需要注意的有两个问题:(一)需要

15、了解宿主机和目标机的体系结构。这是因为不同的体系结构所需的开发工具的版本是不同的。(二)不同开发工具之间版本的控制。GNUTools的安装(二)此图列出了到目前为止成功的版本配置宿主机目标机OS内核 Binutils GccGlibcI386i386Linux2.4.x2.14.90 3.3.12.3.2i386ppcLinux2.4.x2.10.12.95.32.2.1i386armLinux2.4.x2.13.90 3.2.12.3.1i386mipsLinux2.4.x2.8.1Egcs-1.1.22.0.6sparcppcLinux2.4.x2.10.12.95.22.1.3ppcar

16、mLinux2.4.x2.10.12.95.32.2.3i386strongarmLinux2.6.x2.14.13.3.32.3.2i386xscaleLinux2.6.x2.14.13.3.32.3.2GNUTools的安装(三)对于每个单独的工具软件包,它的配置/编译/安装过程一般包括如下几步:(1)下载并解压软件包;(2)配置软件包;(3)编译软件包;(4)安装软件包;为了安装某些GNUTools,可能还需要对Linux内核的include文件进行配置,这主要是由于glibc的安装是与Linux内核相关的。Bootloader概念(一)在专用的的嵌入式板上运行linux已经获得了越来越

17、广泛的应用,一个嵌入式linux系统从软件的角度看通常可以分为4个层次(1)引导加载程序;(2)linux内核.特定于嵌入式板子的定制内核以及内核的启动参数;(3)文件系统;(4)用户应用程序。bootloader软件正是属于引导加载程序的一部分。Bootloader概念(二)在一般的PC 中开机过程可分为BIOS和BootManger两步:1.BIOS(Baisc input output system),它存在于主板的flashRom上,负责硬件初始化的程式2.BootManager:它不象BIOS那样与硬件结合的如此紧密.例如一套BootManager在X86系统上写好后,就可在所有的X

18、86机上使用.BootManager 的工作是负责将Kernel载入,有时它还负责从多个硬盘分区载入OS,例如在同一台PC上同时有linux和windows,我们就靠着在MBR上的BootManager来选择要载入windows或是linux,同时BootManager也要负责一系列的初始化动作.Bootloader概念(三)在嵌入式系统中通常是没有BIOS那样的固件程序的因此整个系统加载启动任务就完全由Bootloader 来完成.虽然有很多种Bootloader,但大多Bootloader可以分为两个步骤来完成:Stage1:(1)硬件设备初始化(如I/O口,存储器和时钟).(2)为加载B

19、ootloader的stage2准备好RAM空间.(3)复制Bootloader的到RAM空间中.(4)设置好堆栈.(5)跳转到stage2的C入口点.Stage2:(1)初始化本阶段要使用的硬件设备.(2)检测系统的内存映射.(3)将kernel映像和根文件系统映像从Flash上读到RAM空间中.(4)从内核设置启动参数.(5)调用内核.Bootloader的安装步骤根据我们以前介绍的知识我们在编译安装一个bootloader到目标板时首先需要找到一个适合目标板的bootloader软件,接着我们就需要为编译安装这个软件到目标板准备必要的工具软件,最后才是将编译好的bootloader软件下

20、载到目标板上。bootloader软件的选择目前应用的比较广泛的bootloader软件有ARMboot,Redboot,U-boot等,这些软件支持的CPU和所需要的开发环境各不相同,其中ARMBOOT支持基于ARM720T,ARM920T等CPU的开发板。而U-boot是迄今为止功能更为强大的开源bootloader软件,它支持多种处理器平台,包括PPC,ARM,X86以及MIPS等。交叉编译工具的选择(一)在安装交叉编译环境之前你首先需要清楚你宿主机和目标机的体系结构,以一套宿主机为安装有Linux-2.4.20.8的以X86结构为基础的PC机,宿主机是以在安装交叉编译环境之前你首先需要

21、清楚你宿主机和目标机的体系结构,以一套宿主机为安装有Linux-2.4.20.8的以X86结构为基础的PC机,宿主机是以ARM9内核为基础的InteiPXA255开发板。交叉编译工具的选择(二)我们首先要找到交叉编译环境中几个重要的部分:针对目标系统的编译器GCC;针对目标系统的二进制工具binutils;目标系统的标准C库glibc。交叉编译工具的选择(三)通过查询资料可知最新的一套适合i386arm体系的交叉编译工具集是:binutils-2.14.tar.gzgcc-3.3.2.tar.gzglibc-2.2.5.tar.gzglibc-linuxthreads-2.2.5.tar.gz

22、交叉编译工具的安装将以上工具集下载到你指定的目录下后,就可解压缩并安装这些文件,需要注意的是在安装完这些文件后,最好在/root/.bashrc文件中指明交叉编译工具的路径,这样你在运行arm-linux-gcc时就可以不考虑目录的路径让shell自动的寻找路径。Bootloader的移植(一)在安装好交叉编译工具后你就可以编译bootloader软件了,一般在bootloader软件的Readme文档中都会有编译步骤,在有些文档中还会有常见错误(commonerror)的解决方法。编译好bootloader后,一般会生成一个。Bin文件,这就是我们要移植到开发板中的二进制文件。Bootloa

23、der的移植(二)在得到.bin文件后我们就可以将它移植到目标板上了,这时我们就需要移植工具来帮助我们,当然针对不同的开发板有不同的移植工具。我们以IntelPXA255开发板为例,此开发板是通过JTAG口来加载bootoader,在连接好JTAG线之后,我们又需要一个JFlash-linux软件,这个工具是一种直接写闪存的软件,通过它我们就可以直接将.bin文件烧写到开发板闪存的0 x00000000位置。Bootloader也就移植成功。GCC命令格式GccoptionfilenameGccoprogmain.csub1.csub2.csub3.coprog:指定输出可执行文件名为prog

24、,缺省时为a.out或先单独编译,然后连接:Gcccmain.cGcccsub1.cGcccsub2.cGcccsub3.cGccoprogmain.osub1.osub2.osub3.oMake和Makefile自动编译,自动确定软件包的哪部分需要重新编译并用特定的命令去编译。Makefile的规则:目标属性分隔符号依赖文件;命令列命令列Prog:main.osubfun.oGccoprogmain.osunfun.oMain.o:main.cmain.hGcccIomain.omain.cSubfun.o:subfun.cGcccosubfun.osunfun.cClean:Rmf*.oG

25、DB调试程序调试程序gdb的功能:监视你程序中变量的值.设置断点以使程序在指定的代码行上停止执行.单步执行代码.为调试编译代码为调试编译代码(Compiling Code for Debugging)为了使gdb正常工作,你必须使你的程序在编译时包含调试信息.调试信息包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号.gdb利用这些信息使源代码和机器码相关联.在编译时用-g选项打开调试选项.gdb基本命令命 令描 述 file装入想要调试的可执行文件 kill终止正在调试的程序list列出产生执行文件的源代码的一部分next执行一行源代码但不进入函数内部step执行一行源代

26、码而且进入函数内部run 执行当前被调试的程序quit终止 gdb watch使你能监视一个变量的值而不管它何时被改变break 在代码里设置断点,这将使程序执行到这里时被挂起make使你能不退出 gdb 就可以重新产生可执行文件shell使你能不离开 gdb 就执行 UNIX shell 命令编译内核编译内核一、升级内核的原因升级内核的原因保持最新的核心版本,更稳定和可靠裁剪核心,提高效率增加对新硬件的支持去除内核 Bug 某些新应用软件需要最新的核心版本支持学习核心设计技术准备工作确定编译目的,升级或修正确定编译目的,升级或修正备份关键数据备份关键数据了解硬件配置了解硬件配置lspci列出

27、所有的pci设备。dmesg也能给出很多有用的信息dmseg了解核心版本号了解核心版本号uname-a获取(下载)最新核心源代码获取(下载)最新核心源代码解压源码到解压源码到/usr/src/linux tarzxvflinux-x.xx.xx.tar.gz编译源码清理环境makeclean;makedep;将原始程序与设备做连接工作,依存关系配置核心makeconfig以命令行形式配置核心makemenuconfig以文本窗口形式配置核心makexconfig同上,但只能在X窗口下进行根据命令行或菜单仔细选择合适的配置,删除你的系统不需要的配置,内核越小,系统运行越快。配置完毕后,存盘退出。

28、编译核心:makebzImage;若配置时使用了核心模块,还需要进行系统模组的编译和安装。makemodules;makemodules_install更换核心,拷贝boot文件cp/usr/src/linux/arch/i386/boot/bzImage/boot/kernel-2.4.19/boot下面的文件名可以随意取配置LILOcd/etc修改lilo.conf,文件结尾处添加:image=/boot/kernel-2.4.19label=linux-2.4.19read-onlyroot=/dev/hda1重新运行lilo重新启动机器,如果能正常运行的话,那么恭喜你,成功了。如果有问题的话,把default修改为旧的内核版本,重新运行lilo就可以。然后,重新编译内核:cd/usr/srcmakeclean重新配置,检查可能存在的问题。安装补丁安装补丁十分的简单,就只要一步:cd/usr/srcpatch-p0patch-2.4.19

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 施工组织

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁