收藏 分享(赏)

第七节系统启动过程分析.ppt

上传人:j35w19 文档编号:8221835 上传时间:2019-06-15 格式:PPT 页数:40 大小:214.50KB
下载 相关 举报
第七节系统启动过程分析.ppt_第1页
第1页 / 共40页
第七节系统启动过程分析.ppt_第2页
第2页 / 共40页
第七节系统启动过程分析.ppt_第3页
第3页 / 共40页
第七节系统启动过程分析.ppt_第4页
第4页 / 共40页
第七节系统启动过程分析.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、第七节 系统启动过程分析,(1)程序的编译与链接 (2)代码下载方式分析 (3)启动过程与Bootloader技术 (4)PC机扩展BIOS实例(基于BIOS的网络下载方法),1、程序的编译与链接,编译与链接过程 Makefile作用 程序定位方式,一般来说,无论是C、C+、还是pas,首 先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行 文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对

2、于后者,通常是需 要告诉编译器头文件的所在位置,只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件。 链接时,主要是链接函数和全局变量,链接器并不管函数所在的源文件,只管函数的中间目标 文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件 ,在UNIX下,是Archive File,也就是 .a 文件。,Makefile,一个工

3、程中的源文件很多,其按类型、 功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要 先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作, makefile带来的好处就是 “自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C+的nmake,Linux下GNU的make。,make命令执行时,需要一个 Makefile 文件,以告诉make命

4、令需要怎么样的去编译和链接 程序。 target . : prerequisites . command . . target也就是一个目标文件,可以是Object File,也可以是执行文件。 prerequisites就是要生成那个target所需要的文件。 command也就是make需要执行的命令。 这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。即prerequisites中如果有一 个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则

5、。 实例,程序定位方式: 编译时定位:ORG xxxx,绝对定位。编译器以此地址为首地址,连续、顺序的存放代码或数据。程序员必须熟悉硬件资源,模块化编程差,工程化不支持 链接时定位:SECTION,相对定位。通过SECTION伪指令区分不同的代码块或数据块,每遇到一个SECTION,从0地址重新开始一个代码块或数据块,链接器将同名的SECTION合并并按.cmd文件中的SECTION命令重新定位。程序员不必熟悉硬件资源,模块化编程强,工程化管理支持。 加载时定位:编程、编译和链接时均未进行绝对定位,程序运行前由操作系统对程序进行定位并加载到存储器空间。必须有操作系统支持,模块化编程强,工程化管

6、理支持。,.text:程序代码和常量,只读 .sbss:为未初始化的数据;存储小数据,变量拥有的尺寸只适合于体系结构的特殊的大小,编译器和汇编器可以产生更小和更有效的访问这些数据的代码。 .bss :未存放初始化数据 .sdata和.data:包含初始化的数据项。,编译器通过.cmd文件获得编译信息将输出段定位到实际的存储器空间: MEMORY描述系统硬件资源 MEMORYROM:origin=0x00000h,length=0x00100hFLASH: origin=0x00110h,length=0x04000hRAMB0: origin=0x05000h,length=0x020000h

7、RAMB1: origin=0x25000h,length=0x200000h SECTION命令描述段如何定位到恰当的硬件资源 SECTION.rodata :ROM_loader :FLASH_wflash : FLASH_monitor:RAMB0sbss (ALIGN 4) :RAMB0sdata (ALIGN 4) :RAMB0.text :RAMB1.bss (ALIGN 4) :RAMB1.data (ALIGN 4) :RAMB1 ,参考资料: TMS320C28X系列DSP指令和编程指南 TMS320F28x Assembly Language Tools Users Gui

8、de TMS320F28x Optimizing CC+ Compiler Users Guide makefile,2、代码下载方式分析,成品时的IMAGE和调试时的IMAGE: 成品时的IMAGE有两种运行模式:ROM-resident image:程序在ROM中运行;ROM-based image:程序在RAM中执行, 压缩和非压缩两种类型 调试时的Image:先由引导代码把ROM Boot Program搬到RAM中,Boot Program初始化调试下载通道和调试信息输出通道。被调试的IMAGE通过Host与Target之间的某种耦合方式download到Target的RAM中,然后

9、接受控制权,实现调试。 代码执行方式: (a)映像在ROM中执行的启动原理 (b)映像从ROM中拷贝到RAM中执行 (c)从宿主机上传输映像后从RAM上执行,装载器程序(Loader):在开发的早期,为目标板开发装载器程序(Loader),并使用装载器从宿主机下载映像。在完成装载器编写后,将其编成到ROM中,同一ROM芯片的一部分被启动映像占据。启动映像至少由系统加电时执行的代码组成,这段代码初始化目标机到已知的状态,为系统执行装载器作准备。在启动代码完成基本的初始化工作后,装载器开始执行。具有闪存编程能力的装载器也可以直接将映像写到闪存上。,嵌入式监视器(monitor):在系统加电时执行,

10、并进行系统初始化(包括初始化中断控制器和安装缺省的中断)。具有启动映像和装载器相结合的功能,还具有交互调试的功能,在新下载的映像运行时,监视器仍然在工作,宿主机上的特殊键(如Ctrl+D)可以中断程序的运行,并重新激活监视器,这样就可以进行交互调试。监视器定义一组命令,允许开发者进行以下一些操作: 下载映像;对系统内存进行读写;对系统寄存器进行读写;设置和清除不同类型的断点;单步执行程序;复位系统。 目标机调试代理(target debug agent):类似监视器monitor,另外可视化源代码级调试(source-level)。与RTOS集成,提供更多的信息。,(a)映像在ROM中执行的启

11、动原理,引导程序在ROM中执行,数据在RAM中。堆栈在RAM中。, CPU的IP通过硬件线执行内存中的第一条指令(复位向量)。 复位向量跳转到引导映像.text节的第一条指令。.text节仍然留在ROM中,CPU执行.text,代码初始化内存系统,包括RAM。 引导映像的.data(初始化的数据节,全局变量和静态变量的初始值)节复制到RAM中,因为它是可读可写的。, 在RAM中为引导映像的.bss(未初始化的数据节,为空)节保留空间,因为它是可读可写的,没有需要传输的东西,因为.bss是空的。 对于.Data和.bss来说,节分配的信息如节的大小和节的运行地址是节头的一部分,装载过程中从节头部

12、检索此信息并在RAM中分配同样大小的内存并根据地址在RAM中分配空间。 在RAM中保留栈空间。 CPU的SP寄存器被设定指向新创立的栈的开始。 程序代码.text一直都在ROM中执行。,(b)映像从ROM中拷贝到RAM中执行,程序从ROM拷贝到RAM中执行。 大的程序以压缩的形式存在ROM中,减少空间要求,必须解压缩;附加压缩算法和压缩信息。 在RAM中执行速度较快。 装载器在ROM中还可以执行。如系统出现错误后可以将指令指针寄存器设置为ROM中装载器开始地址,重新下载映像。 应该检验代码的完整性。,步同前 压缩的映像从ROM复制到RAM。 完成解压缩。 装载器传输控制给映像,运用处理器的ju

13、mp指令,跳转到初始化映像的开始地址。 装载器占据的内存被回收,栈指针被重新初始化,解压缩工作区也被回收在作为可使用的内存空间。,(c)从宿主机上传输映像后从RAM上执行,目标机从主机传送应用程序到RAM中执行。 在开发的后期很典型。当完全实现设备驱动程序后系统可以正确的处理中断和异常。此时开发者主要的精力在应用设计和实现上,而不是底层的硬件驱动。 调试代理使用的内存区域不能回收以便调试代理可以继续与主机通信,实现交互式调试。,调试代理可以与宿主机的调试器通信并通过宿主机的调试器传输目标机的映像。 首先调试代理下载映像到RAM的临时区域,下载完成和验证映像的完整性后,根据程序头部的信息,调试代

14、理初始化映像,然后: 从宿主机下载应用映像。 验证映像的完整性。 如必要,进行解压缩。 调试代理将映像节装载到RAM中相应的地址。 调试代理将控制权传给下载的映像。 调试代理还驻留在内存中完成与调试器的通信,完成对程序的调试。,3、启动过程,最小硬件初始化: 在复位向量上开始执行; 通过设置适当的寄存器,将处理器设置到一个已知状态:获得处理器类型;获得或设置CPU时钟频率 禁止中断和高速缓存; 初始化内存控制器、内存芯片和高速缓存单元,以便得到内存的开始地址和大小,如果必要测试内存。一般用汇编语言编写,以后的初始化代码用C编写。 其余硬件初始化: 初始化中断处理程序; 初始化接口总线; 初始化

15、外设;,80C196启动过程(无RTOS),STARTUP MODULE CMAINRSEG sp EQU 018H:WORDCSEG AT 2018HDCB 11011010BCSEG AT 2080HEXTRN main:NULLEXTRN _main:NULLEXTRN fpinit:NULLcstart:PUBLIC cstartLD sp,#STACKlcall fpinitLJMP _main ; _main calls the others_exit:PUBLIC _exitBR _exitEND,嵌入式系统中的Bootloader技术,嵌入式系统通常分为四个层次:启动模块、操作

16、系统内核、文件系统、用户应用程序。 启动模块是系统加电后运行的第一段代码. PC中的引导程序一般由BIOS和位于MBR的OS Boot loader组成。 嵌入式系统中整个系统的加载启动任务由Boot loader来完成。 Boot loader就是在操作系统内核运行前运行地一段小程序。可以初始化必要的硬件设备,创建内核必要的一些信息并将这些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状态最终调用操作系统内核,起到引导和加载内核的作用。 Boot loader是依赖于硬件而实现的,不同的体系结构需求的Boot loader是不同的;除了体系结构,Boot loader还依赖

17、于具体的嵌入式板级设备的配置。,大多数Boot loader都包含两种不同的操作模式:启动加载模式和下载模式 启动加载模式:这种模式也称为自主模式。即Boot loader从目标机上的某个固体存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入。这种模式是Boot loader的正常工作模式,因此当嵌入式产品发布的时候,Boot loader必须工作在这种模式下。 下载模式:在这种模式下,目标机上的Boot loader将通过串口或者网络连接或者其它通信手段从主机下载文件。从主机下载的文件通常首先被Boot loader保存到目标机的RAM中,然后被Boot loader写到目标机上

18、的FLASH类固态存储设备中。Boot loader的这种模式通常在第一次安装内核与根文件系统时使用;此外,以后的系统更新也会使用Boot loader的这种工作模式。,Boot loader的共性: Boot loader作为引导与加载内核镜像的“工具”,系统加电后,CPU将首先执行Boot Loader程序。 Boot loader的启动过程可以是单阶段的,也可以是多阶段的。通常多阶段的Boot loader能提供更为复杂的功能,以及更好的可移植性。因此大多数Boot Loader都分为stagel和stage2两大部分。 Stagel:依赖于CPU体系结构的代码,比如设备初始化代码等,而

19、且通常都用汇编语言来实现,以达到短小精悍的目的。 而stage2则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。,Boot Loader的stagel通常包括以下步骤: 1、 屏蔽所有的中断。为中断提供服务通常是OS设备驱动程序的责任,因此在Boot Loader的执行全过程中可以不必响应任何中断。 2、设置CPU的速度和时钟频率。 3、RAM初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等。,4、初始化LED。通过GPIO来驱动LED,其目的是表明系统的状态是OK还是Error.如果板子上没有LED,那么也可以通过初始化UART

20、向串口打印Boot Loader的Log。字符信息来完成这一点。 5、关闭CPU内部指令/数据cache.为加 载 stage2准备RAM空间 6、为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载Boot Loader的stage2准备好一段可用的RAM空间范围。由于 stage2通常是C语言执行代码,因此在考虑空间大小时,除了stage2可执行映象的大小外,还必须把堆栈空间也考虑进来. 7、 Boot loader拷贝stage2到RAM中,可以通过修改PC寄存器跳转到stage2的C入口,Boot Loader的stage2通常包括以下步骤: stage2

21、的代码通常用C语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通C语言应用程序不同的是,在编译和链接Boot Loader这样的程序时,不能用库函数。 如何跳转进main()函数:直接把main O 函数的起始地址作为整个stage2执行映像的入口点或许是最直接的想法。但是这样做有两个缺点:1)无法通过main()函数传递函数参数;2)无法处理main()函数返回的情况。 一种更为巧妙的方法是利用trampoline(弹簧床)的概念。也即,用汇编语言写一段trampoline小程序,并将这段trampoline小程序来作为stage2可执行映象的执行入口点。然后我们

22、可以在trampoline汇编小程序中用CPU跳转指令跳入main()函数中去执行;而当main()函数返回时,CPU执行路径显然再次回到我们的rampoline程序。,1、初始化本阶段要使用到的硬件设备通常包括:(1)初始化至少一个串口,以便和终端用户进行输出信息;(2)初始化计时器等。 2、检测系统的内存映射(memorymap) 3、 Boot Loader的stage2必须在它想干点什么(比如,将存储在flash上的内核映像读到RAM空间中)之前检测整个系统的内存映射情况,也即它必须知道CPU预留的全部RAM地址空间中的哪些被真正映射到RAM地址单元,哪些是处于unused状态的。 4

23、、加载内核映像和根文件系统映像 5、设置内核的启动参数,串口控制台参数:波特率等调用内核 6、 Boot Loader调用内核的方法是直接跳转到内核的第一条指令处。,4、PC机扩展BIOS实例,扩展BIOS 在计算机中主要有两大类应用: 一是作为电子盘,其中存储了引导程序和微型操作系统及应用程序,在没有硬盘或者没有操作系统的情况下实现工业控制; 二是作为引导设备,其中存储了引导程序,在计算机引导过程中,抢在操作系统之前对计算机进行控制,如显卡、网卡、病毒卡、硬盘保护卡。,在PC的BIOS自检中,硬件设备检测正常通过后,就开始把系统引导控制权即根据用户指定的启动顺序递交给软盘、硬盘或光驱启动。以

24、从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行最基本的系统文件IO.SYS。 扩展BIOS方法,BIOS下网络下载方法,在网络产品中系统软件一般有3种方案: (1) 固化在ROM里。限制了软件的规模,不便于软件的升级和修改。 (2)存储在自带的存储盘中,需附带操作系统;增加成本,存储盘易出故障 可靠性不高。 (3)从服务器上通过网络下载,便于软件升级,不用带盘、不用操作系统,直接基于BIOS。网络工作不正常或下载服务器出错时,会导致不能正常下载。,步骤: (1)80

25、X86系列的微处理器,通过执行一段位于内存最高端的代码完成启动。对于32位机,内存最高地址为FFFFFFF:0000, 放置一条转向BIOS自检Post起始的调转指令。 (2)执行BIOS Post测试。 (3) Post开始扫描内存映象空间,检查各种适配器的ROM模块,有效的网卡ROM模块必需建立一个标识供Post来识别它。 (4 ) 网卡的ROM程序通过修改引导装入程序INT 19H的中断向量 将自己的下载程序的入口作为INT 19H的中断向量,获得控制权,将自身挂到系统上。当INT19H中断向量设置完成后,ROM应当交还控制权给系统BIOS,继续进行Post的工作。 (5)Post完成后

26、,BIOS调用INT 19H中断,即进入网络下载模块。 INT 18H, Boot Fault Routine :“No boot device available.“ INT 19H, Bootstrap Routine,机器启动时,需从网上获取3种信息:本机的IP地址,下载服务器的IP地址、待下载的系统文件映象名。 采用两步启动过程;第一步:通过BOOTP协议获得待下载软件映象名和所需相关网络信息;第二步:通过TFTP协议下载获取待执行的系统软件映象,并运行。 引导协议能为无盘机获得启动所需的所有信息。在发送BOOTP请求之前,BOOTP客户既不知道自己的地址,也不知道服务器的IP地址,BOOTP必须通过广播方式发送请求。BOOTP服务器收到请求后,根据以太网地址,从下载数据库BOOTPTAB中查出相应的应答表项,构成BOOTP响应来应答。 简易文件传输协议TFTP (Trivial File Transfer Protoco1) 提供单纯的文件传输,不需要可靠流传输服务,而是建立在UDP数据报基础之上,利用确认和超时重传机制保证传输的可靠性这在局域网环境下足够了。因此具有短小实用的特点, 可以放到网卡ROM中。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报