2022年BSP基本概念[整 .pdf
1BSP概述BSP即Board Support Package,板级支持包。它来源于嵌入式操作系统与硬件无关的设计思想, 操作系统被设计为运行在虚拟的硬件平台上。对于具体的硬件平台,与硬件相关的代码都被封装在BSP中,由 BSP向上提供虚拟的硬件平台,BSP与操作系统通过定义好的接口进行交互。 BSP是所有与硬件相关的代码体的集合。一个成熟的商用操作系统,其被广泛应用的必要条件之一就是能够支持众多的硬件平台,并实现应用程序的硬件无关性。一般来说,这种无关性都是由操作系统实现的。但对于嵌入式系统来说,它没有像PC机那样具有广泛使用的各种工业标准、统一的硬件结构。 各种嵌入式系统各不同的应用需求就决定了它一般都选用各自定制的硬件环境,每种嵌入式系统从核心的处理器到外部芯片在硬件结构上都有很大的不同。这种诸多变化的硬件环境就决定了无法完全由操作系统来实现上层软件与底层硬件之间的无关性。因此各种商用实时操作系统,都采用了分层设计的方法,它将系统中与硬件直接相关的一层软件独立出来,称之为Board Support Package,简称为 BSP 。顾名思义, BSP 是针对某个特定的单板而设计的。如果没有单板支持软件包,则操作系统就不能在单板上运行。并且它对于用户 (指开发者) 也是开放的, 用户可以根据不同的硬件需求对其作改动或二次开发。 BSP在嵌入式系统中的角色,很相似于在PC 系统中的 BIOS和驱动程序的地位。BSP 的具体结构和组成根据不同的嵌入式操作系统而不同。BSP 的开发要求设计人员具备软硬件方面的综合知识。BSP软件与其他软件的最大区别在于BSP软件有一整套模板和格式,开发人员必须严格遵守, 不允许任意发挥。在 BSP软件中, 绝大部分文件的文件名和所要完成的功能都是固定的。所以, BSP软件的开发一般来说都是在一个基本成型的BSP软件上进行修改,以适应不同单板的需求。针对某类 CPU的硬件单板, 嵌入式操作系统( 如 vxWorks) 通常提供有其DEMO板的 BSP, 这些程序位于指定的目录之下。也就是我们所说的最小系统BSP 。一般来说,我们在硬件系统设计好之后,都会先找到一个与自己系统相近的DEMO 板 BSP (最起码是使用相同的 CPU ) 。并以此为基础, 开发自己单板的BSP 。?定义BSP就是为软件操作系统正常运行提供最基本、最原始的硬件操作的软件模块,它和操作系统息息相关,但又不属于操作系统的一部分。BSP可以分为三大部分:1:系统上电时的硬件初始化。2:为操作系统访问硬件驱动程序提供支持。3:集成的硬件相关和硬件无关的操作系统所需的软件模块。?BSP 的表现形式BSP主要以两种形式来表现:1:源代码( C代码、汇编代码) 、系统编译连接依靠文件。2:二进制的目标代码和目标代码库。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 31 页 - - - - - - - - - ?BSP 在软件系统中的位置BSP 在软件系统中的位置可以用下图来表示,BSP 为操作系统和硬件设备的互操作建了一个桥梁,操作系统通过BSP 来完成对指定硬件的配置和管理。和硬件无关的系统软件模块I/O 系统文件系统TCP/IP MUX 操作系统库硬件相关的系统软件模块Flash/SCSI Driver 操作系统内核Lan Driver BSP 硬件SCC Timer Lan 控制器Flash/SCSI Controller BSP 向上层提供的接口有与操作系统内核的接口(如报告DRAM 大小、修改中断屏蔽级别等)与操作系统的I/O 系统的接口与应用程序的接口? CPU 最小系统BSP 的定义广义上讲,单板中所有需要CPU控制的硬件的程序,都属于单板BSP ,但是,为了调试方便和软件的模块化,我们通常就将与此单板最小系统相关的程序简称为BSP ,而将其他程序称为驱动程序。对于嵌入式系统来说,所谓最小系统就是一个包含:CPU, Bootrom, RAM, 系统时钟,网口,串口的计算机运行环境。这样,最小系统BSP就包含了 CPU系统的初始化程序以及网口,串口,系统时钟等设备名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 31 页 - - - - - - - - - 的驱动程序。? BSP 的主要功能BSP 的主要功能在于配置系统硬件使其工作于正常的状态,完成硬件与软件之间的数据交互,为OS 及上层应用程序提供一个与硬件无关的软件平台。因此从执行角度 来说,其可以分为两大部分:1)目标板启动时的硬件初始化及多任务环境的初始化2)目标板上控制各个硬件设备正常运行的设备驱动程序,由它来完成硬件与软件之间的信息交互通常我们认为BSP 是 为 OS 服务 的,但实际上,BSP 软件包中的部分程序对OS也并不是必须的,从这个角度,又可以将BSP 划分为两部分:1)最小系统BSP,即我们通常所称的BSP2) 设备驱动程序?开发 BSP 需要的条件目标硬件:硬件调测完毕,经过必要的软件测试必要的硬件设计文档:如地址空间的分布,CPU 和其他芯片的工作模式等。操作系统交叉开发工具:编译器、汇编器、链接器等下载机制: bootrom 或仿真器等2BSP实际开发的主要过程1.掌握开发中使用的操作系统,和在这种操作系统下开发BSP 的要求。2.研读所选CPU的资料。3.研读硬件设计文挡。4.研读电路板中器件的资料。5.找一个 BSP模板,熟悉它并在此基础上开发自己的BSP 。从头研制BSP工作量极大,也没有必要。6.利用仿真器进行调试,开发最小BSP系统。7.在最小 BSP的基础上,利用Tornado 集成开发环境,进一步调试外围设备,配置、完善系统。8.调试单板上的设备驱动程序。3BSP的调试方法(最小系统的调试和设备驱动程序的调试)3.1 仿真器调试方式:在串口和网口初始化及发挥功能以前,用仿真器调试是一种相对来讲很方便的手段。BSP软件的调试通常需要利用仿真器来进行。目前市场上的大多数仿真器都能支持 JTAG接口。典型的仿真器调试环境如下图所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 31 页 - - - - - - - - - 调试计算机仿真器目标板RS232RS232ENETJTAG调试计算机通过 RS232接口与仿真器相连,完成对仿真器的初始化配置工作,通常这项工作只在第一次使用仿真器时进行,配置结果一般会被仿真器存储起来。仿真器通过以太网口与调试计算机相连,通过JTAG接口与目标板相连,利用这条通路,仿真器就可将计算机上的程序下载到目标板上进行调试。目标板上的串口和以太网口为被调试的对象,和调试计算机相连,主要是可以通过调试计算机检验目标板上的接口是否工作正常。在仿真器环境下, 既可以调试 vxWorks映象,也可以调试 bootrom 映象。当调试 BootRom映象时,需要修改CONFIG.H和 MAKEFILE 文件将这段代码定位到RAM 中,然后通过仿真器下载到目标板上的RAM 中进行调试。目前常用的有两类仿真器,一是JTAG 仿真器,二是全功能在线仿真器。前者是利用处理器中的调试模块的功能,通过其 JTAG 边界扫描口来与仿真器连接。这种方式的仿真器比较便宜, 连接比较方便。但由于仅通过十几条线来调试,因而功能有局限。对于全功能在线仿真器来说,由于其仿真头完全取代目标板上的CPU,因而功能非常强大。这类仿真器为了能够全速仿真时钟速度高于100MHz 的处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。3.2 “黑”调在没有仿真器的情况下一般使用“黑”调,具体的方法是加“指示灯”、用示波器测量硬件信号等, 目的是打通串口,达到宿主机与目标机的通信。这种调试方法无法跟踪软件的运行这种调试方法要求所使用的BSP模板与自己的单板基本一致。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 31 页 - - - - - - - - - “黑”调的工程步骤: BSP完成烧 ROMBuild 最简IMAGEBuildBSPlibModifyBSP最小系统OK?Bsp其他部分okdownloadBuild ram类型imageBuild image验证其他部分增加bsp其他部分STARTNO“黑”调YESye sNO名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 31 页 - - - - - - - - - 3.3 使用集成开发环境在进行 VxWorks 下 BSP 开发时, 如果最小系统的BSP 已经能够正常运行,则可以使用VxWorks 的集成开发环境Tornado。 Tornado II 工具提供一个高度可视化和自动化的开发环境,加快了基于VxWorks 的应用开发。这样,不论对于初次使用还是有经验的开发者,使用 Tornado II 开发其应用是快速而方便的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 31 页 - - - - - - - - - 4中断处理4.1 采用中断处理方式的原因:保证处理的实时性、减少CPU 的消耗。4.2 中断的处理流程中断处理程序首先切换到中断堆栈,保存程序计数器和寄存器等中断现场状态,然后对中断进行处理, 中断处理过程中必须要及时清除中断源,最后要恢复中断前的程序计数器和寄存器等现场状态,由中断处理程序返回。Interrupt Service Code 实时系统中的中断处理非常重要,系统通常通过中断获取外部事件。为了尽可能块的响应中断, VxWorks 中的 ISRs 运行在特定的上下文(非任务上下文),中断处理无需任务的上下文切换。我们可以使用除了VxWorks 系统使用的之外的系统硬件中断,VxWorks 提供了例程intConnect( )用于将 C程序与任何中断相连接。VxWorks 的 ISRs 运行在特定的上下文(x86中断使用当前被中断掉的任务的堆栈,PPC有单独的全局中断堆栈)因而中断处理没有任务的上下文切换。4.3 中断的堆栈大部分系统规定(如PowerPC ) :所有的中断使用同一个专用堆栈,这个堆栈在系统启动时根据特定的配置参数由系统来分配和初始化。要求堆栈足够大来处理最坏的中断嵌套。然而有一些系统不允许有单独的中断堆栈(如x86) ,在这种情况下,中断使用当前被中断掉的任务的堆栈。如果使用这种结构,必须给每个任务开足够大的任务堆栈来处理最坏的中断嵌套和调用嵌套。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 31 页 - - - - - - - - - 可以在开发中使用 checkStack()来查看在栈空间中任务和中断的堆栈是如何分布的。4.4 ISR 的一些限制1、 ISR 要尽量的短,能在任务中完成的工作就不要放在ISR 中。2、 ISR 不能调用将会导致阻塞的子程序。3、 ISR 不能 take 信号量,但是ISR 可以 give 信号量。4、 由于子程序malloc () 、free ()使用了信号量,ISR 不能调用它们。5、 ISR 不能通过 VxWorks 的驱动执行I/O 。6、 ISR 不能调用使用了浮点协处理器的子程序。在 ISR 中不能调用的函数列表参见:VxWorks Programmer Guide 中 2.5.3 Special Limitations of ISRs。4.5 中断服务程序与任务的通信由于中断事件通常涉及到任务级代码,因此必须提供中断服务程序和一般任务的通信机制。 VxWorks 提供的中断服务程序和一般任务的通讯机制有:? 共享存储区和环形缓冲? 信号量:中断服务程序能够释放信号量(不包括互斥信号量和VxMP 共享信号量),任务能够等待该信号量。? 消息队列,中断服务程序能够向消息队列发送消息,任务能够从消息队列里接收消息。? 管道:中断服务程序可以向管道写数据,任务可以从管道读取数据。? 信号灯:中断服务程序能够通过发信号通知任务,触发相应的信号处理程序的异步调度。5常用总线协议:? HDLC 、High-level data link control (HDLC) is one of the most common protocols in the data link layer, layer 2 of the OSI model. ? UART 、universal asynchronous receiver transmitter (UART) protocol is commonly used to send low-speed data between devices. ? Ethernet/IEEE 802.3 、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 31 页 - - - - - - - - - ? ATM 、? PCI、? I2C、? SPI(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 总线简介PCI:周边器件互联(Peripheral Component Interconnect )。目前最新版本2.2,但很多器件还只支持2.1。PCI与器件的基本关系。?Host/PCI 北桥:连接主处理器总线到PCI 总线?PCI/ISA 南桥:连接 PCI总线到 ISA(或 EISA)总线,南桥通常含IDE 控制器、中断控制器、 USB 主控制器、 DMA 控制器。?PCI/PCI :连接 PCI总线到 PCI总线设备和功能:支持 256个PCI总线。每条 PCI总线上最多可以有32个设备(最多56个比较合适)。每个设备可以有1 8个功能。性能:33M,32bit 传输速率 132MB 33M,64bit 传输速率 264MB 66M,32bit 传输速率 264MB 66M,64bit 传输速率 528MB 6单板的硬件组成BSP 与单板密切相关,要开发BSP 就要了解单板的硬件组成,单板一般由CPU 最小系统和一些外围硬件设备构成。CPU 最小系统:CPU 、内存、内存控制器、调试串口、调试网口、系统时钟、桥片、外围芯片(包括)、实时时钟、定时器、FPGA 、部分嵌入式系统也包括软硬盘控制器、显卡、键盘。不同单板使用不同的专用设备芯片:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 31 页 - - - - - - - - - DMA 控制器、 E1 传输芯片、光接口芯片、时隙交换、FLASH 、 host/pci 桥片pci/pci 桥片、以太网口芯片 (如 intel 的 82559、 realtek 的 8139) 、 以太网口交换芯片 (BCM5616 ) 、 CSM5000 、CSM5500、看门狗、专用FPGA逻辑等等。典型的单板组成示意图:? IS95/1X 中的 SVICM 单板组成示意图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 31 页 - - - - - - - - - ? 3G 系统中的 CPU 最小系统结构示意HOST/PCIPCI接口PMC P11/P12?33MHz-32bitPCI总线PCI? -ETHERNET接口转换芯片RJ45CORE ? ? ? ? RS232OSCOSCUART控制器BOOT LASH512KBSDRAMFLASHEPLD监控LED/CS_UART/CS_BOOT/RCS0 、LOCAL ADDRESSCPUPMC P14连接器名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 31 页 - - - - - - - - - ?3G系统中的 CCM 单板结构示意7处理器:我们目前经常使用的处理器:POWERPC 、ARM 、MIPS、x86 等系列处理器?POWERPC: Mpc860、Mpc8260、Mpc850、Mpc8250、Mpc755、Mpc8245 、Mpc7450 、IBM750 ?ARM :IXP1200 、IXC1100 ?X86 :(PIII 处理器)各处理器的特点 (见硬件相关文档) : 嵌入式系统使用的CPU 一般具有低功耗、 体积小、集成度高等特点,而且一般内部集成了内存控制器、串口控制器、以太网口控制器等芯片。例如:MPC8260 POWERQUICC 是一个功能强大的嵌入式通讯处理器,它集成了一个64-bit 高性能的PowerPC 系列的RISC 微处理器和一个32-bit的 RISC 通讯处理器。同MPC860 一样, MPC8260 由三个主要功能块组成,但它具有更强大的功能:一个64-bit 的内核,是PowerPC MPC603e 微处理器的变种。它的处理速度可达100200MHz ,并支持 L2 cache。一个系统接口单元(SIU) 。它具有一个更加灵活的存储器控制器,可以与几乎所有类型的存储器接口。并支持JTAG 控制器IEEE 1149.1 测试端口( TAP) 。一个通信处理模块。它不仅包含了MPC860 上的所用通信外围控制器,还增加了三个高性能通信通道(FCC)支持新的高速协议,两个多通道控制器(MCC )可支持128名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 31 页 - - - - - - - - - 个串行全双工通道。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 31 页 - - - - - - - - - 8BSP提供的 vxWorks 下的设备驱动BSP的另一项主要任务是为操作系统访问硬件设备驱动程序提供支持。所谓设备是指独立于处理器内核之外的,能够接收CPU的输入数据和 / 或向 CPU提供数据输出的硬件单元。8.1 网口、串口的设备驱动对于一些通用的设备,如网口、串口,由于包含在BSP最小系统内, vxWorks 都会提供基本的驱动程序。常用的串口设备驱动程序参见目录tornadotargetsrcdrvsio ,网口设备驱动程序参见目录tornadotargetsrcdrvend 。这些驱动程序仅与设备本身的硬件特性密切相关,如配置一些必须的设备控制寄存器,中断寄存器,初始化设备驱动结构等。具体的这些寄存器,驱动结构的值是什么,这些与用户的实际应用密切相关的信息放在各单板BSP 目录下的 sysXXX.c 文件中,如串口配置源文件sysSerial.c(定义了用作串口的UART 设备的基 地 址 , 寄 存 器 数 据 位 数 , 使 用 的 缺 省 波 特 率 , 晶 振 频 率 等 ) , 网 口 配 置 源 文 件sysFei82557End.c(定义了 82559 网口芯片的PCI 基地址, EEPROM 中的 MAC 地址等 )。大多数应用只需要修改sysXXX.c 中的配置参数就可以了。VxWorks已经为网口和串口设备驱动提供了标准的库函数,用于将与硬件相关的设备驱动加载到硬件无关的I/O 层,使得应用层不必关心具体的硬件驱动实现,直接调用统一的 Socket 接口函数或I/O 接口函数就可以正常的收发数据,执行查询、控制操作。由 vxWorks 或设备供应商提供的网口,串口驱动已经包含了较为完备的设备驱动接口,完成设备的初始化、数据收发, 中断服务程序连接与中断使能。实际应用时,做相应的修改就可以了。详细步骤可以参见相关的最小系统详细设计文档。8.2 一般硬件的设备驱动一般硬件是指除BSP 最小系统之外的各应用使用的硬件设备。这些设备的供应商可能不会提供专用的设备驱动程序,或是提供的设备驱动程序无法满足实际应用的需要。因此,必须由BSP 开发人员编写相应的设备驱动程序,为操作系统访问硬件设备驱动程序提供支持。BSP 提供的设备驱动接口大致有以下几类:8.2.1设备初始化接口所有的设备驱动程序都应该提供设备初始化接口。该接口实现主要包含以下内容:1、保存应用程序传入的正常回调函数指针。 该回调函数在设备正常的收发中断中调用,用于向操作系统的驱动任务传递收发事件消息,触发驱动任务开始收发数据,使得系统尽快退出中断,真正的数据收发都在驱动任务中完成,接受OSS 的调度,提高CPU 的利用率。对于没有收发事件的设备,如Plx9030、Bcm5616 ,就无需这个函数指针。2、保存应用程序传入的异常回调函数指针。设备出现异常状况通常也会引起中断,在异常中断中调用异常回调函数,将设备出错信息传给OSS 的实时控制进程,由该进程对设备的异常情况进行处理,有必要的话, 可以报告给后台告警。通常一个实时控制进程负责监名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 31 页 - - - - - - - - - 控单板上所有设备的异常状况,因此应对给设备的异常状况统一编码,实时控制进程根据不同的告警码来判断何种设备出现了异常。3、进行必要的硬件初始化。4、使用系统函数intConnect() 将设备中断服务程序连接到中断向量表中。1、 使用系统函数intEnable() 使能设备连接的CPU 中断。对于具有数据收发功能的设备,如UART 、HDLC ,应提供数据收、发接口。8.2.2设备发送数据接口设备发送数据接口用于将上层应用的数据输出到设备,再由设备输出。 该接口的入参应包括待输出用户数据缓存的指针,数据长度。8.2.3设备接收数据接口设备接收数据接口用于将设备接收到的数据传递给上层应用。该接口的入参应包括用于接收数据的用户缓存的指针,用户缓存的长度。输出参数包括实际接受到的数据长度。8.2.4设备控制接口上层应用调用设备控制接口完成对设备的设置和查询。如可以调用UART的控制接口查询或重新设置波特率,查询发送、接收缓存是否为空等。该接口的入参应包括查询码,用于区分不同的操作。对于查询操作, 输出参数为查询的结果,对于控制操作,入参还应包括相应的设置参数。8.2.5中断服务程序中断服务程序属于BSP 的内部接口,在设备初始化时被连接到中断向量表中。当CPU检查该中断时, 就会根据中断向量表中填写的中断服务程序指针调用该函数,完成相应的操作。在实时应用中, 中断服务程序应当尽可能的简短。其主要任务就是检查产生中断的原因,根据不同的中断原因调用相应的回调函数,通知相应的任务去处理中断事件。8.3 BSP 同其他软件的关系BSP 同硬件和上层软件系统的关系,以及BSP 内部模块之间的关系图示如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 31 页 - - - - - - - - - 9以太网口驱动以太网口驱动采用标准的END 接口。vxWorks 里如何使用END network :vxWorks 里使用两种类型的网络设备驱动,一种是BSD4.3 network drivers,它和 IP 协议结合紧密,使用不灵活;另一种就是SENS(scalable enhanced network stack), 它在硬件driver 和协议 driver 之间插入了MUX 这一层功能实体,如图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 31 页 - - - - - - - - - 这样,高层协议和底层驱动间就可灵活配置,MUX 的作用如下图:既然 MUX 介于这二层之间,它就需要和这二层打交道,它提供了一个结构体来作这方面的工作 : XX_DRV_CTRL,它又包含了几个结构。下面我们看这几个结构:END_OBJ :END 对象结构,它是XX_DRV_CTRL结构的基类DEV_OBJ :包含了设备的具体信息;NET_FUNCS :包含设备驱动函数的指针NET_PROTOCOL: 设备同上层协议的接口;这些结构的关系如图所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 31 页 - - - - - - - - - 利用 MUX 层提供的函数来创建这些结构,(vxworks 里使用 END,必须执行下面的三个函数)叙述如下:muxDevLoad() : loading a Device into the MUX; 它实际是调用了底层driver 的 xxload(), 它返回 END_OBJ, 并填充了 DEV_OBJ 和 NET_FUNCS; muxDevStart() : starting a driver; 它调用了NET_FUNCS的(*start)( ); 主要是连接ISR( xxInt )和启动设备;muxBind() :将上层的 protocol driver 绑定到 MUX 上;创建 NET_PROTOCOL 结构;此函数最关键的是指明了MUX层在收到网络包时,调用上层协议的哪个函数。(函数的使用参见ref 手册)我们看三层协议间的函数调用关系:在接收数据包时,整个过程如图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 31 页 - - - - - - - - - 设备产生中断,执行xxInt(), 中断服务程序调用netjobAdd() 将 xxReceive 挂到os tNetTask 队列中执行, xxReceive()调用 muxReceive(),后者再调用protocol 里的接收函数,象上面提到的EpStackRcv. 发送包时如图:VxWorks BSP 的目录结构:BSP文件主要位于Tornado 安装之后的Target 目录下,具体目录结构如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 31 页 - - - - - - - - - ? config目录:用于vxWorks 核心的配置及编译的文件。其中又包含多个子目录。all目录:通用的配置文件 comps目录:用于 Tornado 工程管理工具配置的源文件 bspname目录:每个单板都有一个相应目录,命名可根据单板而定,其中包含有关此单板BSP的代码文件, 目标文件及编译文件等,这也就是我们通常所说的单板BSP 。? h 目录:其中包含所有vxWorks 操作系统的头文件及通用编译文件。其中的各个子目录表示了 vxWorks 中不同模块的头文件。? lib目录:由vxWorks 为不同平台提供的库文件及目标文件。? src目录: vxWorks 提供的部分硬件芯片驱动程序的源代码文件,其又包含多个子目录: config目录:有关vxWorks 操作系统的一些通用的源代码文件。drv 目录: vxWorks 中一些硬件芯片的通用驱动程序源代码文件,其根据不同功能的芯片分为若干个子目录,例如end 表示网口驱动,sio 表示串口驱动等? unsupported目录:其中包含一些较古老的硬件BSP代码。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 31 页 - - - - - - - - - 3三种不同的 VxWorks 映象比较理解 VxWorks映象是开发 VxWorks BSP的基础。VxWorks映象通常由三个部分组成: BSP 、操作系统内核和上层应用。 从文件的组织形式上可以将映象分为三段:BSS段、Data 段和 Text 段。其中, BSS段存放的是未初始化的全局变量或静态变量,Data 段存放的是已经初始化的全局变量或静态变量, Text 段存放的是可执行的代码。根据应用场合的不同, VxWorks映象可分为三类:Loadable images Rom-based images Rom-resident images 其中,Loadable images 通过烧写在ROM 中的 Bootrom 装载到 RAM 中来启动; Rom-based images 使用自身带的启动代码把自己装载到RAM 中来启动; 而 Rom-resident images 在 ROM中启动,只是把需要动态修改的Data 段和 BSS段装载到RAM 中去。9.1 3.1 可加载的 VxWorks 映象这是一种运行于 RAM 的 VxWorks映象。它不包含搬移程序,需要借助于一些外部的程序如 bootRom才能加载到 RAM 的低端 RAM_LOW_ADRS地址处。这是缺省的开发映象。在开发的初期阶段,用户可以根据需要添加或删除一些VxWorks组件,生成自己的可加载的 VxWorks映象,存放在开发主机的某个目录下。目标板上电后,由烧结在 BOOT 中的起始引导程序 (BootStrap Programs)将 BOOT 中的 ROM 引导程序(ROM Boot Programs)拷贝到 RAM 的高端地址 RAM_HIGH_ADRS处,并跳转至该地址执行 ROM 引导程序,配置好所选的加载方式(缺省为网络方式),将指定的主机目录下的可加载的VxWorks映象下载到目标板的RAM 地址 RAM_LOW_ADRS处,并跳转到此处执行。如图1 所示。图 1、可加载的VxWorks映象名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 31 页 - - - - - - - - - 这种映象的优点是生成的VxWorks映象可以存放在开发主机PC机上,不用烧到 BOOT 中,节省了 BOOT 容量,也便于随时修改不同的VxWorks映象,适用于调试的初期阶段。 不足之处是需要在主机上维护一个正确的VxWorks映象,对于调试硬件无关的上层应用程序显得不是很方便。在 Tornado 工作台的 Build 窗口中,选择 Rules 属性页中的 VxWorks即可生成可加载的 VxWorks映象。9.2 3.2 基于 ROM 的 VxWorks 映象这是一种运行于 RAM 中,但起初存放于ROM 中的 VxWorks映象。即该映象需要和搬移程序一起固化在BOOT 中。目标板上电后, 首先运行 BOOT 中的引导搬移程序,将整个 VxWorks映象拷贝到 RAM 地址 RAM_LOW_ADRS处,并跳转到此处执行。如图 2 所示。该映象根据是否被压缩又可分为:基于 ROM 的未压缩的 VxWorks映象,可直接从 ROM 拷贝到 RAM 中基于 ROM 的压缩的 VxWorks映象,这种映象主要是为了节约BOOT 空间,在从 ROM 拷贝到 RAM 的过程中需要解压缩,因此与上述未压缩的映象相比,它的引导过程相对较慢,但两者在RAM 中的运行速度是一样的。9.3 3.3 驻留 ROM 的 VxWorks 映象这种映象起初也和搬移程序一起固化在BOOT中。目标板上电后,首先运行BOOT 中的引导搬移程序,但仅将VxWorks映象的数据段和BSS段拷贝到 RAM 地址 RAM_LOW_ADRS处,映象的代码段仍旧留在ROM 中,从 ROM 中开始执行。如图3 所示。这种映象的优点是具有最快的引导速度,占用最少的RAM 空间,适用于 RAM空间有限的目标板。 但是由于该映象在ROM 中运行,运行速度在三种映象中是最慢的。图 2 基于 ROM 的 VxWorks 映象名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 31 页 - - - - - - - - - 几种不同的 BOOTROM的比较针对上述三种不同的VxWorks 映象, 可以生成以下几种不同的BOOTROM,主要体现在执行搬移程序romStart( )( 位于 bootInit.c文件中 ) 时不同:9.4 4.1 用于可加载 VxWorks 映象的 BOOTROM 由图 1 所示可知,用于可加载VxWorks映象的 BOOTROM包含两部分:起始引导程序( BootStrap Programs) 和 ROM 引导程序( ROM Boot Programs) 。起始引导程序驻留在ROM 中,主要包含:汇编级的硬件初始化程序romInit.s,用于系统的基本初始化,设置一些重要寄存器的初始值,进行存储器的映射搬 移 程序bootInit.c, 将 ROM引导 程 序拷 贝 至 RAM的 高端地 址RAM_HIGH_ADRS,然后跳转到此处执行ROM 引导程序。ROM 引导程序起初存放在ROM 中,初始化时被拷贝到RAM 中,主要用于系统的进一步初始化,并配置加载方式,将VxWorks映象加载至 RAM 。可分为三种不同的类型:压缩的 ROM 引导程序,在拷贝的过程中需要解压缩,在RAM 中执行未压缩的 ROM 引导程序,可直接拷贝,在RAM 中执行驻留 ROM 的 ROM 引导程序,仅拷贝ROM 引导程序的数据段,代码段仍旧在 ROM 中执行在 Tornado 开发环境中,通过在主窗口点击Build|Build Boot ROM 可以选择生成以上三种 BOOTROM, 分别为: bootrom_uncmp.hex( 未压缩的 BOOTROM), bootrom.hex (压缩的 BOOTROM),bootrom_res.hex (驻留的 BOOTROM) 。图 3 驻留 ROM 的 VxWorks映象名师资料总结 - - -精品资料欢迎下载 - - - - - - -