VxWorks启动过程详解.doc_第1页
VxWorks启动过程详解.doc_第2页
VxWorks启动过程详解.doc_第3页
VxWorks启动过程详解.doc_第4页
VxWorks启动过程详解.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

vxworks有三种映像:VxWorks Image的文件类型有三种 Loadable Images:由BootROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压缩):即将Image直接烧入ROM,运行时将Image拷入RAM中运行。ROM-Resident Images:Image的指令部分驻留在ROM中运行,仅将数据段部分拷入RAM。注意这里说的三种映像都是包含真正操作系统VxWorks的映像,其中后两种可以直接启动并运行起来,但是第一种不行,它必须借助另一个叫做Boot Image的映像(可以在Tornado 中的build-build boot rom中生成)才能运行起来,也就是利用Boot Image引导起来然后通过网口或串口下载真正包含VxWorks的Loadable Image,然后才能运行起来。也就是说Boot Image是和Loadable Image 结合使用的。现在看来一共有四种映像文件,让我们看看它们的组成吧:Boot Image:包含一段叫做BootStrap Programs的程序+一段ROM BOOT Program程序。Loadable Images:有操作系统VxWorks和应用组成的映像。ROM-based Images(压缩/没有压缩):包含一段叫做BootStrap Programs的程序+ Loadable Images(即有操作系统VxWorks和应用组成的映像)ROM-Resident Images:同上通过上面我们可以看出,ROM-based Images,ROM-Resident Images,Boot Image三种映像都包含一段叫做BootStrap Programs的程序,它具有启动功能,可以把ROM中的代码段和数据段拷贝到RAM中;下面让我们看看三种VxWorks的启动过程:Boot ImageLoadable Images:我们说过Loadable Images是依靠Boot Image加载启动的,首先有Boot Image中的程序BootStrap Programs把Boot Program程序加载到RAM中的RAM_HIGH_ADRS处,然后控制权交给Boot Program,由Boot Program负责一系列简单的硬件初始化(网口,串口等),开始下载Loadable Images(即包含应用的VxWorks操作系统)到RAM_LOW_ADRS,然后控制权交给VxWorks操作系统开始执行。下面的图一是一个简单的流程图,后面的图二是更为详细的流程图。图一图二(1)图二(2)ROM-based Images(压缩/没有压缩):这种映像因为其本身就包含BootStrap Programs程序,因此可以直接启动,所以这种映像中也就不需要Boot Programme了,首先BootStrap Programs启动,把映像中的VxWorks加载到内存的RAM_LOW_ADRS处并开始运行。图三是一个简图,图四是更为详尽的流程图。图三图四ROM-Resident Images:这种映像的加载和上一种是基本相同的,只不过是加载的只有data段和bss段而已。上一节主要是从映像的分类和各种映像的大致加载流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程:Boot ImageLoadable Images:VxWorks借鉴了传统PC操作系统的引导原理,其将整个引导过程分为两个阶段:1. BOOTROM启动,2. 通过BOOTROM加载VxWorks内核。下面是具体的流程图: 其中第一阶段的执行流程使用的是上图的左边的源文件中的那些函数(romInit-romStart-usrInit-sysHwinit-usrKernelinit-usrRoot);第二阶段执行流程使用的是上图中右边源文件中的那些函数(sysInit- usrInit-sysHwinit-usrKernelinit-usrRoot-usrAppInit)。下面具体解释:第一阶段: romInit.s:romInit() 系统上电之后,首先调用的函数就是romInit() 禁止中断 把启动类型(冷启动/热启动)放在堆栈上 清除cache 初始化CPU基本寄存器,调用SDRAM初始化函数初始化UPM 直接跳转到bootInit.c:romStart() bootInit.c:romStart() 把代码段和数据段从bootrom复制到RAM当中 完成程序映象的解压缩(如果映象是压缩版本的) 跳转到bootConfig.c:usrInit() bootConfig.c:usrInit() VxWorks 中第一个C语言完成的代码。执行操作系统内核所必须的初始化程序。 Cache程序库的初始化 清零系统的BSS段 初始化中断向量表 使硬件工作在一个“安静”的状态,尽量不产生各种中断或者异常 控制权移交给KernelInit(),产生usrRoot根任务 在usrRoot根任务中解析Bootline,产生bootCmdLoop任务,用于启动、加载VxWorks映像此时,调试超级终端会有如下打印信息:VxWorks System BootCopyright 1984-1998 Wind River Systems, Inc.CPU: MPC860Version: 5.4BSP version: 1.2/0Creation date: Aug 2 2002, 09:19:47Press any key to stop auto-boot. 3此时按任意键可停止自动启动,修改启动行参数VxWorks Boot: pboot device : cpmunit number : 0 processor number : 0 host name : Michelfile name : c:/ftpRoot/vxWorksinet on ethernet (e) : 7:ffffff00host inet (h) : 0user (u) : targetPasswd(pw) : targetflags (f) : 0x0VxWorks Boot: boot device : cpmunit number : 0 processor number : 0 host name : Michelfile name : c:/ftpRoot/vxWorksinet on ethernet (e) : 7:ffffff00host inet (h) : 0user (u) : targetPasswd(pw) : targetflags (f) : 0x0 Attached TCP/IP interface to cpm0.Attaching network interface lo0. done.第二阶段: bootConfig.c: bootLoad( )加载VxWorks映像,并转向它的加载地址,从sysInit入口开始执行VxWorks映像 sysALib.s : sysInit( )与romInit.s : romInit()的初始化过程类似,但不再初始化SDRAM usrConfig.c : usrInit( )设置cache的工作模式,板级硬件初始化,初始化Wind内核,启动usrRoot( )根任务 usrConfig.c : usrRoot( )初始化内存,系统时钟,I/O系统,标准输入输出错,异常处理,添加用户应用程序 此时调试超级终端打印如下信息,Boot引导完成/*VXWORKS Image Getting Loaded*/Loading. 881680Starting at 0x10000Attached TCP/IP interface to cpm unit 0Attaching network interface lo0. done.VxWorksCopyright 1984-1998 Wind River Systems, Inc. CPU : MPC860 vxWorks : 5.4 BSP version: 1.2/0Creation date: Aug 2 2000 WDB : Ready ROM-based Images(压缩/没有压缩):和上面那种启动方式相比,这种启动方式省去了一些步骤,执行完romStart()之后就已经加载VxWorks 到RAM中了,因此,下一步就是把控制权交给VxWorks,有VxWorks从sysInit()开始执行即可。下面是具体的流程: romInit.s:romInit() 系统上电之后,首先调用的函数就是romInit() 禁止中断 把启动类型(冷启动/热启动)放在堆栈上 清除cache 初始化CPU基本寄存器,调用SDRAM初始化函数初始化UPM 直接跳转到bootInit.c:romStart() bootInit.c:romStart() 把代码段(如果是VxWorks_romResident映像,则不拷贝代码段)和数据段从bootrom复制到RAM当中 完成程序映象的解压缩(如果映象是压缩版本的) 跳转到sysALib.s:sysInit() sysALib.s:sysInit() 重新进行CPU内核(主要是cache)的初始化。这些工作在romInit()里面曾经进行过,由于系统刚刚进入RAM中执行,需要再次初始化。 无论使用何种系统(包括仿真器)引导,RAM版本的VxWorks都是从这里开始执行的。 控制权移交给 usrInit() usrConfig.c:usrInit() VxWorks 中第一个C语言完成的代码。执行操作系统内核所必须的初始化程序。 Cache程序库的初始化 清零系统的BSS段 初始化中断向量表 使硬件工作在一个“安静”的状态,尽量不产生各种中断或者异常 控制权移交给KernelInit(),产生usrRoot根任务此时,调试超级终端会有如下打印信息:/*VXWORKS Image Getting Loaded*/Loading. 881680Starting at 0x10000Attached TCP/IP interface to cpm unit 0Attaching net

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论