《BSP基本概念.pdf》由会员分享,可在线阅读,更多相关《BSP基本概念.pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 BSP概述B S P 即B o a r d S u p p o r t P a c k a g e,板级支持包。它来源于嵌入式操作系统与硬件无关的设计思想,操作系统被设计为运行在虚拟的硬件平台上。对于具体的硬件平台,与硬件相关的代码都被封装在B S P 中,由B S P 向上提供虚拟的硬件平台,B S P 与操作系统通过定义好的接口进行交互。B S P 是所有与硬件相关的代码体的集合。一个成熟的商用操作系统,其被广泛应用的必要条件之一就是能够支持众多的硬件平台,并实现应用程序的硬件无关性。一般来说,这种无关性都是由操作系统实现的。但对于嵌入式系统来说,它没有像P C 机那样具有广泛使用的各
2、种工业标准、统一的硬件结构。各种嵌入式系统各不同的应用需求就决定了它一般都选用各自定制的硬件环境,每种嵌入式系统从核心的处理器到外部芯片在硬件结构上都有很大的不同。这种诸多变化的硬件环境就决定了无法完全由操作系统来实现上层软件与底层硬件之间的无关性。因此各种商用实时操作系统,都采用了分层设计的方法,它将系统中与硬件直接相关的一层软件独立出来,称之为B o a r d S u p p o r t P a c k a g e,简称为B S P。顾名思义,B S P 是针对某个特定的单板而设计的。如果没有单板支持软件包,则操作系统就不能在单板上运行。并且它对于用户(指开发者)也是开放的,用户可以根据
3、不同的硬件需求对其作改动或二次开发。B S P 在嵌入式系统中的角色,很相似于在P C 系统中的B I O S 和驱动程序的地位。B S P 的具体结构和组成根据不同的嵌入式操作系统而不同。B S P 的开发要求设计人员具备软硬件方面的综合知识。B S P 软件与其他软件的最大区别在于B S P 软件有一整套模板和格式,开发人员必须严格遵守,不允许任意发挥。在 B S P 软件中,绝大部分文件的文件名和所要完成的功能都是固定的。所以,B S P 软件的开发一般来说都是在一个基本成型的B S P 软件上进行修改,以适应不同单板的需求。针对某类C P U 的硬件单板,嵌入式操作系统(如 vx W
4、o rk s)通常提供有其DE M O板的B S P,这些程序位于指定的目录之下。也就是我们所说的最小系统B S P。一般来说,我们在硬件系统设计好之后,都会先找到个与自己系统相近的DE M O 板 B S P (最起码是使用相同的C P U)。并以此为基础,开发自己单板的B S P。A定义B S P 就是为软件操作系统正常运行提供最基本、最原始的硬件操作的软件模块,它和操作系统息息相关,但又不属于操作系统的一部分。B S P 可以分为三大部分:1:系统上电时的硬件初始化。2:为操作系统访问硬件驱动程序提供支持。3:集成的硬件相关和硬件无关的操作系统所需的软件模块。BSP的表现形式B S P
5、主要以两种形式来表现:1:源 代 码(C代码、汇编代码)、系统编译连接依靠文件。2:二进制的目标代码和目标代码库。ABSP在软件系统中的位置B S P在软件系统中的位置可以用下图来表示,B S P为操作系统和硬件设备的互操作建了一个桥梁,操作系统通过BSP来完成对指定硬件的配置和管理。BSP向上层提供的接口有 与操作系统内核的接口(如报告DRAM大小、修改中断屏蔽级别等)与操作系统的I/O系统的接口 与应用程序的接口CPU最小系统BSP的定义广义上讲,单板中所有需要CPU控制的硬件的程序,都属于单板B S P,但是,为了调试方便和软件的模块化,我们通常就将与此单板最小系统相关的程序简称为B S
6、P,而将其他程序称为驱动程序。对于嵌入式系统来说,所谓最小系统就是一个包含:CPU,Bootrom,RAM,系统时钟,网口,串口的计算机运行环境。这样,最小系统BSP就包含了 CPU系统的初始化程序以及网口,串口,系统时钟等设备的驱动程序。BSP的主要功能B S P的主要功能在于配置系统硬件使其工作于正常的状态,完成硬件与软件之间的数据交互,为OS及上层应用程序提供一个与硬件无关的软件平台。因此从执行角度来说,其可以分为两大部分:1)目标板启动时的硬件初始化及多任务环境的初始化2)目标板上控制各个硬件设备正常运行的设备驱动程序,由它来完成硬件与软件之间的信息交互通常我们认为BSP是 为O S服
7、务的,但实际上,BSP软件包中的部分程序对OS也并不是必须的,从这个角度,又可以将BSP划分为两部分:1)最小系统B S P,即我们通常所称的BSP2)设备驱动程序A开 发BSP需要的条件 目标硬件:硬件调测完毕,经过必要的软件测试 必要的硬件设计文档:如地址空间的分布,CPU和其他芯片的工作模式等。操作系统 交叉开发工具:编译器、汇编器、链接器等 下载机制:bootrom或仿真器等2 BSP实际开发的主要过程1.掌握开发中使用的操作系统,和在这种操作系统下开发BSP的要求。2.研读所选CPU的资料。3.研读硬件设计文挡。4.研读电路板中器件的资料 1 15.找一个BSP模板,熟悉它并在此基础
8、上开发自己的BSP。从头研制BSP工作量极大,也没有必要。6.利用仿真器进行调试,开发最小BSP系统。7.在最小BSP的 基 础 匕 利 用Tornado集成开发环境,进一步调试外围设备,配置、完善系统。8.调试单板上的设备驱动程序。3 BSP的调试方法(最小系统的调试和设备驱动程序的调试)3.1 仿真器调试方式:在串口和网口初始化及发挥功能以前,用仿真器调试是一种相对来讲很方便的手段。BSP软件的调试通常需要利用仿真器来进行。目前市场上的大多数仿真器都能支持JTAG接口。典型的仿真器调试环境如下图所示:E N E T调试计算机通过R S 2 3 2接口与仿真器相连,完成对仿真器的初始化配置工
9、作,通常这项工作只在第一次使用仿真器时进行,配置结果一般会被仿真器存储起来。仿真器通过以太网口与调试计算机相连,通 过J T A G接口与目标板相连,利用这条通路,仿真器就可将计算机上的程序下载到目标板上进行调试。目标板上的串口和以太网口为被调试的对象,和调试计算机相连,主要是可以通过调试计算机检验目标板上的接口是否工作正常在仿真器环境下,既可以调试v x W o r k s映象,也可以调试b o o t r o m映象。当调 试B o o t R o m映象时,需要修改C O N F I G.H和M A K E F I L E文件将这段代码定位到R A M中,然后通过仿真器下载到目标板上的R
10、 A M中进行调试。目前常用的有两类仿真器,一 是 JT A G 仿真器,二是全功能在线仿真器。前者是利用处理器中的调试模块的功能,通过其JTAG边界扫描口来与仿真器连接。这种方式的仿真器比较便宜,连接比较方便。但由于仅通过十几条线来调试,因而功能有局限。对于全功能在线仿真器来说,由于其仿真头完全取代目标板上的C P U,因而功能非常强大。这类仿真器为了能够全速仿真时钟速度高于100MHz的处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。3.2“黑”调在没有仿真器的情况下一般使用“黑”调,具体的方法是加“指示灯”、用示波器测量硬件信号等,目的是打通串口,达到宿主机与目标机的通信。
11、这种调试方法无法跟踪软件的运行这种调试方法要求所使用的BSP模板与自己的单板基本致。“黑”调的工程步骤:3.3使用集成开发环境在进行VxWorks下 BSP开发时,如果最小系统的BSP已经能够正常运行,则可以使用VxWorks的集成开发环境Tornado。Tornado II工具提供一个高度可视化和自动化的开发环境,加快了基于VxWorks的应用开发。这样,不论对于初次使用还是有经验的开发者,使m Tornado II开发其应用是快速而方便的。WindPower ToolsThirty-Party ToolsH O STTornado PluflnsIn-Line Hypertextffind
12、SKttindViewWindConficemulation EnvironmedV x S INCrossVindBroserEthernetTarget M W orksScacable RuntimeReal-Time Em beddedApplicationNetworks FileSubsystem SystemI/O T arset _,Dependent,MtemTools.POSIimraryP ow erP CS tron cA E MM IP SIntelW indI Micrc-KHiTiel I4中断处理4.1 采用中断处理方式的原因:保证处理的实时性、减少C P U
13、的消耗。4.2 中断的处理流程中断处理程序首先切换到中断堆栈,保存程序计数器和寄存器等中断现场状态,然后对中断进行处理,中断处理过程中必须要及时清除中断源,最后要恢复中断前的程序计数器和寄存器等现场状态,由中断处理程序返回。InterruptVector TableInterrupt ServiceRoutine(ISR)User ISRvectornumber“hardwareRETI n t er r u p t S er v ice C o d e实时系统中的中断处理非常重要,系统通常通过中断获取外部事件。为了尽可能块的响应中断,V x W o r k s 中的I S R s 运行在特定
14、的上下文(非任务上下文),中断处理无需任务的上下文切换。我们可以使用除了 V x W o r k s 系统使用的之外的系统硬件中断,V x W o r k s 提供了例程in t C o n n ect ()用于将C程序与任何中断相连接。V x W o r k s 的 I S R s 运行在特定的上下文(x 8 6中断使用当前被中断掉的任务的堆栈,P P C 有单独的全局中断堆栈)因而中断处理没有任务的上下文切换。4.3 中断的堆栈大部分系统规定(如 P o w er P C):所有的中断使用同一个专用堆栈,这个堆栈在系统启动时根据特定的配置参数由系统来分配和初始化。要求堆栈足够大来处理最坏的
15、中断嵌套。然而有一些系统不允许有单独的中断堆栈(如 x 8 6),在这种情况下,中断使用当前被中断掉的任务的堆栈。如果使用这种结构,必须给每个任务开足够大的任务堆栈来处理最坏的中断嵌套和调用嵌套。可以在开发中使用checkStackO来查看在栈空间中任务和中断的堆栈是如何分布的。4.4 IS R的一些限制1、ISR要尽量的短,能在任务中完成的工作就不要放在ISR中。2、ISR不能调用将会导致阻塞的子程序。3、ISR不能ta k e 信号量,但 是 ISR可以give信号量。4、由于子程序malloc 0、free()使用了信号量,ISR不能调用它们。5、ISR不能通过VxWorks的驱动执行I
16、/O。6、ISR不能调用使用了浮点协处理器的子程序。在 ISR 中不能调用的函数列表参见:VxWorks Programmer Guide中 2.5.3 Special Limitations ofISRso4.5中断服务程序与任务的通信由于中断事件通常涉及到任务级代码,因此必须提供中断服务程序和一般任务的通信机制。VxWorks提供的中断服务程序和一般任务的通讯机制有:A 共享存储区和环形缓冲A 信号量:中断服务程序能够释放信号量(不包括互斥信号量和VxMP共享信号量),任务能够等待该信号量。A 消息队列,中断服务程序能够向消息队列发送消息,任务能够从消息队列里接收消息。A 管道:中断服务程
17、序可以向管道写数据,任务可以从管道读取数据。A 信号:中断服务程序能够通过发信号通知任务,触发相应的信号处理程序的异步调度。5常用总线协议:AHDLC、High-level data link control(HDLC)is one of the most common protocols in the data linklayer,layer 2 of the OSI model.8 bits 16 bits 8 bits 8n bits 16 bits 8 bitsOpening FlagAddressControlInformation(Optional)CRCClosing FlagF
18、igure 21-1.HDLC Framing StructureAUART、universal asynchronous receiver transmitter(UART)protocol is commonly used tosend low-speed data between devices.Ethernet/IEEE 802.3、Frarro Length is 64-1518 BylesPreairtleStart FrameCteliritecD&stin疝onAddressSourceAiireBSType;LenhDataFrame ChadSequence7 Bytes
19、GBytes GByles 2 Bys 4G-1500 Bylee 4 ByleeNOTE The Isb of each octet B transmiued firstFigure 24-1.Ethernet Frame StructureAATM、PCkI2CSPI(motorola:Serial Peripheral Interface)exchange data between cpu and peripheral devices(such as EEPROMs,real-time clocks,A/D)converters,and ISDN devices.5.1 PCI总线简介P
20、CI:周边器件互联(Peripheral Component Interconnect)目前最新版本2.2,但很多器件还只支持2.1。PCI与器件的基本关系。Host/PCI北桥:连接主处理器总线到PCI总线 PCI/ISA南桥:连接PCI总线到ISA(或EISA)总线,南桥通常含IDE控制器、中断控制器、USB主控制器、D M A 控制器。A PCI/PCI:连接PCI总线到PCI总线设备和功能:支持256个PCI总线。每条PCI总线上最多可以有32个设备(最多56个比较合适)。每个设备可以有18个功能。性能:33M,32bit 传输速率 132MB33M,64bit 传输速率264MB66
21、M.32bit 传输速率264MB66M,64bit 传输速率 528MB6单板的硬件组成BSP与单板密切相关,要开发BSP就要了解单板的硬件组成,单板一般由CPU最小系统和一些外围硬件设备构成。CPU最小系统:CPU、内存、内存控制器、调试串口、调试网口、系统时钟、桥片、外围芯片(包括)、实时时钟、定时器、FPGA、部分嵌入式系统也包括软硬盘控制器、显卡、键盘。不同单板使用不同的专用设备芯片:DMA控制器、E l传输芯片、光接口芯片、时隙交换、FLASH、host/pci桥 片 pci/pci桥片、以太网口芯片(如 intel的 82559realtek的 8139)、以太网口交换芯片(BC
22、M5616)、CSM5000、CSM 5500,看门狗、专用FPGA逻辑等等。典型的单板组成示意图:AIS95/1X中的SVICM单板组成示意图(VP)BO O T|R E S E T|S D R AM 一jMPC8rA3G系统中的CPU最小系统结构示意/RCSO、LOCAL ADDRESS监控LEDA/CS_BOOTPMC P14连接器FLASHSDRAMUART控制器BOOT LASH512KB1/CSJJARTCPUP-T EOW c UPCI 接口由HOST/PCI那通GdllqzTZHKeePMC P11/P12A-1WZE-RS232-PCIIZ260U-IETHERNET 接口转
23、换芯片A 3G系统中的C C M 单板结构示意7处理器:我们目前经常使用的处理器:POWERPC、ARM、MIPS、x86等系列处理器 POWERPC:Mpc860、Mpc8260、Mpc850、Mpc8250、Mpc755、Mpc8245、Mpc7450、IBM750ARM:IXP1200、IXC1100X86:(Pill 处理器)各处理器的特点(见硬件相关文档):嵌入式系统使用的CPU 一般具有低功耗、体积小、集成度高等特点,而且一般内部集成了内存控制器、串口控制器、以太网口控制器等芯片。例如:MPC8260POWERQUICCH是一个功能强大的嵌入式通讯处理器,它集成了一个64-bit高
24、性能的PowerPC系 列 的 RISC微处理器和一个32-bit的 RISC通讯处理器。同MPC860一样,MPC8260由三个主要功能块组成,但它具有更强大的功能:一个64-bit的内核,是 PowerPC MPC603e微处理器的变种。它的处理速度可达100200MHz,并支持 L2 cache 一个系统接口单元(SIU)它具有一个更加灵活的存储器控制器,可以与几乎所有类型的存储器接口。并支持JTAG控 制 器 IEEE 1149.1测试端口(TAP)。一个通信处理模块。它不仅包含了 MPC860上的所用通信外围控制器,还增加了三个高性能通信通道(FCC)支持新的高速协议,两个多通道控制
25、器(MCC)可 支 持 128个串行全双工通道。Figure 1-1.MPC8260 Block Diagram8 BSP提供的vxWorks下的设备驱动BSP的另一项主要任务是为操作系统访问硬件设备驱动程序提供支持。所谓设备是指独立于处理器内核之外的,能够接收CPU的输入数据和/或向CPU提供数据输出的硬件单元。8.1 网口、串口的设备驱动对于一些通用的设备,如网口、串口,由于包含在BSP最小系统内,vxWorks都会提供基本的驱动程序。常用的串口设备驱动程序参见目录tornadotargetsrcdrvsio,网口设备驱动程序参见目录tornadotargetsrcdrvend。这些驱动程
26、序仅与设备本身的硬件特性密切相关,如配置一些必须的设备控制寄存器,中断寄存器,初始化设备驱动结构等。具体的这些寄存器,驱动结构的值是什么,这些与用户的实际应用密切相关的信息放在各单板B S P目录下的sysXXX.c文件中,如串口配置源文件sysSerial.c(定义了用作串口的UART设备的基 地 址,寄 存 器 数 据 位 数,使 用 的 缺 省 波 特 率,晶 振 频 率 等),网口配置源文件sysFei82557End.c(定义了 82559网口芯片的PCI基地址,EEPROM中的MAC地址等)。大多数应用只需要修改sysXXX.c中的配置参数就可以了。VxWorks己经为网口和串口设
27、备驱动提供了标准的库函数,用于将与硬件相关的设备驱动加载到硬件无关的I/O 层,使得应用层不必关心具体的硬件驱动实现,直接调用统一的 Socket接口函数或I/O 接口函数就可以正常的收发数据,执行查询、控制操作。由vxWorks或设备供应商提供的网口,串口驱动已经包含了较为完备的设备驱动接口,完成设备的初始化、数据收发,中断服务程序连接与中断使能。实际应用时,做相应的修改就可以了。详细步骤可以参见相关的最小系统详细设计文档。8.2 一般硬件的设备驱动一般硬件是指除BSP最小系统之外的各应用使用的硬件设备。这些设备的供应商可能不会提供专用的设备驱动程序,或是提供的设备驱动程序无法满足实际应用的
28、需要。因此,必须由B SP开发人员编写相应的设备驱动程序,为操作系统访问硬件设备驱动程序提供支持。BSP提供的设备驱动接口大致有以下几类:8.2.1 设备初始化接口所有的设备驱动程序都应该提供设备初始化接口。该接口实现主要包含以下内容:1、保存应用程序传入的正常回调函数指针。该回调函数在设备正常的收发中断中调用,用于向操作系统的驱动任务传递收发事件消息,触发驱动任务开始收发数据,使得系统尽快退出中断,真正的数据收发都在驱动任务中完成,接受OSS的调度,提高CPU的利用率。对于没有收发事件的设备,如 P1X9030、Bcm5616,就无需这个函数指针。2、保存应用程序传入的异常回调函数指针。设备
29、出现异常状况通常也会引起中断,在异常中断中调用异常回调函数,将设备出错信息传给O SS的实时控制进程,由该进程对设备的异常情况进行处理,有必要的话,可以报告给后台告警。通常一个实时控制进程负责监控单板上所有设备的异常状况,因此应对给设备的异常状况统一编码,实时控制进程根据不同的告警码来判断何种设备出现了异常。3、进行必要的硬件初始化。4、使用系统函数intConnect。将设备中断服务程序连接到中断向量表中。1、使用系统函数intEnable。使能设备连接的CPU中断。对于具有数据收发功能的设备,如 UART、H D LC,应提供数据收、发接口。8.2.2 设备发送数据接口设备发送数据接口用于
30、将上层应用的数据输出到设备,再由设备输出。该接口的入参应包括待输出用户数据缓存的指针,数据长度。8.2.3 设备接收数据接口设备接收数据接口用于将设备接收到的数据传递给上层应用。该接口的入参应包括用于接收数据的用户缓存的指针,用户缓存的长度。输出参数包括实际接受到的数据长度。8.2.4 设备控制接口上层应用调用设备控制接口完成对设备的设置和查询。如可以调用UART的控制接口查询或重新设置波特率,查询发送、接收缓存是否为空等。该接口的入参应包括查询码,用于区分不同的操作。对于查询操作,输出参数为查询的结果,对于控制操作,入参还应包括相应的设置参数。8.2.5 中断服务程序中断服务程序属于BSP的
31、内部接口,在设备初始化时被连接到中断向量表中。当 CPU检查该中断时.,就会根据中断向量表中填写的中断服务程序指针调用该函数,完成相应的操作。在实时应用中,中断服务程序应当尽可能的简短。其主要任务就是检查产生中断的原因,根据不同的中断原因调用相应的回调函数,通知相应的任务去处理中断事件。8.3 BSP同其他软件的关系BSP同硬件和上层软件系统的关系,以及BSP内部模块之间的关系图示如下:9以太网口驱动以太网口驱动采用标准的END接口。vxWorks 里如何使用 END network:vxWorks里使用两种类型的网络设备驱动,一种是BSD4.3 network drivers,它 和 IP协
32、议结合紧密,使用不灵活;另一种就是SENS(scalable enhanced network stack),它在硬件driver和协议driver之间插入了 MUX这一层功能实体,如图:protocolprotocol这样,高层协议和底层驱动间就可灵活配置,M UX的作用如下图:既然M UX介于这二层之间,它就需要和这二层打交道,它提供了一个结构体来作这方面的工作:XX_DRV_CTRL,它又包含了儿个结构。下面我们看这几个结构:END_OBJ:END对象结构,它是XX_DRV_CTRL结构的基类DEV_OBJ:包含了设备的具体信息;NET_FUNCS:包含设备驱动函数的指针NET_PROT
33、OCOL:设备同上层协议的接口;这些结构的关系如图所示:NET_FUNCS*start().NET_PROTOCOL*stackRcvRtn(),.利用MUX层提供的函数来创建这些结构,(vxworks里使用E N D,必须执行下面的三个函数)叙述如下:muxDevLoad():loading a Device into the M UX;它实际是调用 了底层 driver 的 xxload。,它返回 END_OBJ,并填充了 DEV_OBJ 和 NET.FUNCS;muxDevStart():starting a driver;它调用了 NET_FUNCS 的(*$1211)();主要是连接
34、 ISR(xxln t)和启动设备;muxBind():将上层的 protocol driver 绑定到 MUX 上;创建 NET_PROTOCOL 结构:此函数最关键的是指明了 M U X 层在收到网络包时,调用上层协议的哪个函数。(函数的使用参见ref手册)我们看三层协议间的函数调用关系:在接收数据包时,整个过程如图:read()-1 Buffer k 4.一 ProtocolNETPROTOCOLIm uxR eceive()receiveR tn()END_OBJ_t _ xxR eceive()netJobAdd()l r r-1-1 -*-I Device 1-a Buffer i
35、.xx ln t();互多一 丁 然:恪 济偿第。礴 奉 二 笔设备产生中断,执 行 xxlnt(),中断服务程序调用netjobAdd。将 xxReceive挂 到 ostNetTask队列中执行,xxReceive。调 用 muxReceive。,后者再调用protocol里的接收函数,象上面提到的EpStackRcv.发送包时如图:write()Device;*Buffer!xxlnt()VxWorks BSP的目录结构:BSP文件主要位于Tornado安装之后的T arg et目录下,具体目录结构如下:s e tu p安装程序include工具头文件.src VxColordemo源程
36、序Tornadoh o st-host-os 主机相关工具b i n可执行文件lib tornado 工具库resource GUI,Tel,Help支持文件tel 标准Tel发布s h a r e共享的XDR代码(在主机和目标机传输文件的一种格式)d o c s在线H T M L文件帮助-c o n f ig配置、端译vxworks内核的文件a l l总的配置文件_bspName 各自 BSP-comps vxworks蛆件描述文件_proj 包含vxworks bootable 工程-h vxworks头文件-lib vxMorks提供的库文件-s r c部分vxworks源文件-unsu
37、pported 工具,驱动 co n fig 目录:用于vxWorks核心的配置及编译的文件。其中又包含多个子目录。a l l 目录:通用的配置文件comps目录:用于Tornado工程管理工具配置的源文件bspname目录:每个单板都有一个相应目录,命名可根据单板而定,其中包含有关此单板BSP的代码文件,目标文件及编译文件等,这也就是我们通常所说的单板BSP。h 目录:其中包含所有vxWorks操作系统的头文件及通用编译文件。其中的各个子目录表示了 vxWorks中不同模块的头文件。l i b 目录:由vxWorks为不同平台提供的库文件及目标文件。s r c 目录:vxWorks提供的部分
38、硬件芯片驱动程序的源代码文件,其又包含多个子目录:co n fig 目录:有关vxWorks操作系统的一些通用的源代码文件。d rv 目录:vxWorks中一些硬件芯片的通用驱动程序源代码文件,其根据不同功能的芯片分为若干个子目录,例如e n d 表示网口驱动,s io 表示串口驱动等,unsupported目录:其中包含一些较古老的硬件BSP代码。3 三种不同的VxWorks映象比较理解V x W o r k s 映象是开发V x W o r k s BS P 的基础。V x W o r k s 映象通常由三个部分组成:B SP、操作系统内核和上层应用。从文件的组织形式上可以将映象分为三段:
39、B SS段、D a t a 段和Te x t 段。其中,B SS段存放的是未初始化的全局变量或静态变量,D a t a 段存放的是已经初始化的全局变量或静态变量,Te x t 段存放的是可执行的代码。根据应用场合的不同,Vx W o r k s 映象可分为三类:Lo a d a b l e i m a g e sRo m-b a s e d i m a g e sRo m-r e s i d e n t i m a g e s其中,Loadable images通过烧写在ROM中的Bootrom装载到RAM中来启动;Rom-basedimages使用自身带的启动代码把自己装载到RAM中来启动;
40、而Rom-resident images在R O M中启动,只是把需要动态修改的Data段和BSS段装载到RAM中去。9.1 3.1可加载的VxWorks映象这是一种运行于RA M的Vx W o r k s 映象。它不包含搬移程序,需要借助于一些外部的程序如b o o t Ro m 才能加载到RA M的低端RA M_ LOW _ A D RS地址处。这是缺省的开发映象。在开发的初期阶段,用户可以根据需要添加或删除一些Vx W o r k s 组件,生成自己的可加载的Vx W o r k s 映象,存放在开发主机的某个目录下。目标板上电后,由烧结在B OOT中的起始引导程序(B o o t s
41、t r a p Pr o g r a m s)将 B OOT中的ROM引导程序(ROM B o o t Pr o g r a m s)拷贝到RA M的高端地址RA M_ HIGH_ A D RS处,并跳转至该地址执行ROM引导程序,配置好所选的加载方式(磁省为网络方式),将指定的主机目录下的可加载的Vx W o r k s 映象下载到目标板的RA M地址RA M_ LOW _ A D RS处,并跳转到此处执行。如图1 所示。Loadable VxWorks ImageROM/FlashBootstrapProgramsROMBoot ProgramRAMLOCAL_KEM_L0CAL_ADRS
42、-RAM_LOW_ADRS、VxWorks-F-FREE RAM ADRS-*-RAM_HIGH_ADRSBoot Program图1、可加载的VxWorks映象这种映象的优点是生成的Vx W o r k s映象可以存放在开发主机PC机上,不用烧到B OOT中,节省了 B OOT容量,也便于随时修改不同的Vx W o r k s映象,适用于调试的初期阶段。不足之处是需要在主机上维护一个正确的Vx W o r k s映象,对于调试硬件无关的上层应用程序显得不是很方便。在To r n a d o工作台的B u i l d窗口中,选择Ru l e s属性页中的Vx W o r k s即可生成可加载的
43、Vx W o r k s映象。9.2 3.2 基于 ROM 的 VxWorks 映象这是一种运行于RA M中,但起初存放于ROM中的Vx W o r k s映象。即该映象需要和搬移程序一起固化在B OOT中。目标板上电后,首先运行B OOT中的引导搬移程序,将整个Vx W o r k s映象拷贝到RA M地 址RA M_ LOW _ A D RS处,并跳转到此处执行。如图2所示。ROM-based VxWorks ImageROM/llash RAM图 2 基 于 ROM的 VxWorks映象该映象根据是否被压缩又可分为:基于ROM的未压缩的Vx W o r k s映象,可直接从ROM拷贝到R
44、A M中 基 于ROM的压缩的Vx W o r k s映象,这种映象主要是为了节约B OOT空间,在 从ROM拷贝到RA M的过程中需要解压缩,因此与上述未压缩的映象相比,它的引导过程相对较慢,但两者在R AM中的运行速度是一样的。9.3 3.3 驻留 ROM 的 VxWorks 映象这种映象起初也和搬移程序一起固化在BOOT中。目标板上电后,首先运行BOOT中的引导搬移程序,但仅将V x W o r k s映象的数据段和BS S段拷贝到R AM地址R AM _ L OW _ ADR S处,映象的代码段仍旧留在R OM中,从R OM中开始执行。如图3所示。这种映象的优点是具有最快的引导速度,占
45、用最少的R AM空间,适 用 于R AM空间有限的目标板。但是由于该映象在R OM中运行,运行速度在三种映象中是最慢的。ROM-resident VxWorks ImageROM/Flash RAM图 3 驻 留 ROM的 VxWorks映象几种不同的BOOTROM的比较针对上述三种不同的VxWorks映象,可以生成以下几种不同的BOOTROM,主要体现在执行搬移程序romStart()(位于bootlnit.c 文件中)时不同:9.4 4.1 用于可加载VxWorks映象的BOOTROM由图1所示可知,用于可加载VxWorks映象的BOOTROM包含两部分:起始引导 程 序(Bootstra
46、p Programs)和 ROM 引 导 程 序(ROM Boot Programs)o起始引导程序驻留在ROM中,主要包含:汇编级的硬件初始化程序romlnit.s,用于系统的基本初始化,设置一些重要寄存器的初始值,进行存储器的映射 搬 移 程 序bootlnit.c,将R O M引 导 程 序 拷 贝 至R A M的高端地址RAM.HIGH_ADRS,然后跳转到此处执行ROM引导程序。ROM引殍程序M初存放在ROM中,初始化时被拷贝到RAM中,主要用于系统的进一步初始化,并配置加载方式,将VxWorks映象加载至RAM。可分为三种不同的类型:压缩的ROM引导程序,在拷贝的过程中需要解压缩,
47、在RAM中执行 未压缩的ROM引导程序,可直接拷贝,在RAM中执行 驻 留ROM的ROM引导程序,仅拷贝ROM引导程序的数据段,代码段仍旧在ROM中执行在Tornado开发环境中,通过在主窗口点击Build Build Boot ROM可以选择生成以上三种 BOOTROM,分别为:bootrom_uncmp.hex(未压缩的 BOOTROM),bootrom.hex(压缩的 BOOTROM),bootrom_res.hex(驻留的 BOOTROM)静态连接到可加载的V x W o r k s 映象的系统初始化代码执行并完成整个初始化过程。引导过程成功以后,R AM 中R OM 引导程序占用的空
48、间(从 R AM _ H IG H _ ADR S 开始)可以重新被系统利用。图 1 中所示的各地址含义为:L OCAL _ M EM _ L OCAL _ ADR S 是 R AM 的起始地址 R AM _ L OW _ ADR S 是V x W o r k s 的加载点,也是V x W o r k s 代码段的起始位置 F R EE_ R AM _ ADR S 是 V x W o r k s 映象的结束点。通常也是系统内存池和目标服务舒内凉池的起始地址 R AM J IIG H _ ADR S 是 R OM 引导程序的加载点。它也是R OM 引导程序(除驻留R OM 引鸟程序之外)的代码段
49、的起始位置,或驻留R OM 引导程序数据段的起始位置。9.5 用于基于ROM的VxWorks映象的BOOTROM由图2 所示可知,用于该映象的BOOT R OM 包含两部分:起始引导程序(Bo o t s t r a p Pr o g r a m s)和基于R OM 的V x W o r k s 映象。搬移程序b o o t l n i t.c 负责将V x W o r k s 映象的文本段和数据段搬移到用户定义的低端内存地址R AM _ L OW _ ADR S,如果需要进行必要的解压缩,然后直接启动V x W o r k s 映像。因此BOOT R OM 的容量相对于1 节中描述的BOOT
50、 R OM 要大一些,但无需在主机目录下维护一个可用的V xW o r k s 映象。基于R O M 的 V xW o r k s BO O T R O M 有压缩和未压缩之分。在 T o r n a do 工作台的Bui l d窗口中,选择V xW o r k s 映象R ul es 属性页中的V xW o r k s _ r o m 即可生成基于R O M 的未压缩的 V xW o r k s BO O T R O M,选 卜 V xW o r k s _ r o m C o m p r es s 即可生成基于 R O M的压缩的 V xW o r k s BO O T R O M o9.