1 / 10
文档名称:

Vxworks的引导过程.doc

格式:doc   大小:54KB   页数:10页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Vxworks的引导过程.doc

上传人:知识徜徉土豆 2025/5/13 文件大小:54 KB

下载得到文件列表

Vxworks的引导过程.doc

相关文档

文档介绍

文档介绍:该【Vxworks的引导过程 】是由【知识徜徉土豆】上传分享,文档一共【10】页,该文档可以免费在线阅读,需要了解更多关于【Vxworks的引导过程 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
VxWorks的引导过程
此文为学录,非正式文档
相关术语说明如下:
Boot: 引导或加载
Boot ROM : 用来存放boot程序的ROM, boot程序首先对硬件作必要的基本的始化后搬运boot程序到RAM空间。然后启动加载程序通过网口、串口或者扩展FLASH加载VxWorks系统。Boot ROM程序可看作是一个独立的系统,具有自加载功能和通过串口、网口或扩展FLASH加载VxWorks系统的功能.
RAM_HIGH_ADRS:拷贝boot ROM映像的目标地址
RAM_LOW_ADRS:VxWorks映像的起始地址:
1启动过程
以下启动过程是通过串口或者网口加载VxWorks系统的过程,并不代表所有的加载过程.
上电复位后第一条被执行的指令位置0xfff00100(针对MPC8240)
ROM空间内。
完成启动所必要的初始化
设置状态字并创建一个哑堆栈(dummy stack)
2)初始化存储器接口
2. 跳到C程序的入口地址
第一个被执行的C程序是romStart()。
程序首先拷贝boot ROM内的部分boot程序到RAM空间。(我认为这以后程序都在RAM中运行). 然后根据哑堆栈中的参数决定是否清零内存RAM(如是冷启动(cold start)则清零),再把ROM段的剩余部分拷贝到RAM 的RAM_HIGH_ADRS地址(如果ROM代码是压缩的,还要解压)。
处理器跳到RAM的入口地址 RAM_HIGH_ADRS(bootConfig。c)。
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
在这里执行的程序是usrInit();
使cache无效,清零bss段,初始化向量表,进行板级初始化。
启动多任务内核
VxWorks的boot ROM本身就是一个独立的应用。到此步为止可看作是boot ROM内的这个独立系统已经被加载且运行起来了。
加载VxWorks系统
通过串口、网口或者从扩展FLASH中加载系统,VxWorks被加载到RAM的地端地址,起始地址为RAM_LOW_ADRS。
应用程序加载
各步所调用函数先后顺序如下:
上电复位-—》romInit()——》romStart()—-》usrInit()—-》initVectBaseSet()——》sysHwInit()——》usrKernelInit() -—》kernelInit()-—》usrRoot()(启动串口或者网口加载程序)-—》(完成对VxWorks系统的加载) --》sysInit()——》usrInit()——》initVectBaseSet()—-》sysHwInit()——》usrKernelInit() --》kernelInit()——》usrRoot()(和前一个usrRoot()不一样,这里启动用户程序)
romInit():
这是上电复位后首先执行的程序
(a)设置哑堆栈,初始化CPU内的寄存器,无效Cache,禁止中断;
(b)保存启动类型,启动类型分为冷启动和热启动
(c)硬件初始化,主要是初始化存储器接口。
(d)调用romStart();
romStart():
这是第一个被执行的C程序。
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
BootROM程序分为两个部分,第一部分是上电复位后的首先执行的程序,完成硬件的必要初始化和搬运程序到RAM,如果第二部分的程序被压缩这部分程序还包括解压程序;第二部分是Boot ROM的其余部分程序,完成加载VxWorks系统的功能。这部分程序是可被压缩的。如果第二部分程序没有被压缩,则在搬运时可把bootROM内的程序一次搬运到RAM中。下面的步骤是针对第二部分程序被压缩的情况。
完成功能如下:
搬运bootROM的第一部分程序到RAM。
如果是冷启动则需要一些存储区清0,这些存储区是除了堆栈区(为启动所设的哑堆栈)和(a)步所搬运程序覆盖的区域外的其他存储区。
解压并搬运bootROM的其余程序到RAM
跳至被解压的程序的入口点执行,即执行usrInit();
usrInit():
这是运行在VxWorks下的第一个C程序
完成功能如下:
设置Cache模式,禁止Cache
对bss段清0
保存启动类型
调用函数intVecBaseSet()设置中断式量表基本地址
调用sysHwInit()初始化硬件到静止状态(Quiescent State),这主要是让可能产生中断的设备复位和禁止其产生中断.
调用usrKernelInit(),根据定义的的常数选择适当的初始化函数完成初始化。
调用kernelInit(),初始化多任务环境,孵化任务usrRoot(),此函数不返回。
UsrRoot():
完成功能如下:(有些步骤根据需要选择)
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
初始化系统时钟
初始化I/O系统和驱动
Console设备的建立
标准输入输出的配置
例外处理的安装
管道驱动的初始化
标准I/O的初始化
文件系统设备的建立和磁盘驱动的安装.
性能监控的设置
目标机管理的初始化
用户特定的代码,例如网口加载程序
可以在usrRoot()添加网口或者串口加载程序来加载VxWorks系统。加载VxWorks系统后,程序进入sysInit()中执行。
SysInit():
这是依赖特定系统的汇编代码模块,它是VxWorks的入口点,执行完后会跳至usrInit()(所以usrInit()是VxWorks下的第一个执行的C代码).
完成功能如下:
锁住中断,无效Cache
初始化处理器的寄存器(包括C堆栈指针)到默认值
清除所有悬置的中断
调用usrInit()
usrInit()调用kernelInit()孵化任务usrRoot(),usrRoot()完成应用程序执行前所必要的初始化.
以上步骤适用于通过串口或者网口加载VxWorks系统的过程。在开发阶段通常采用这种方式。实际的产品是可能是从
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
FLASH加载VxWorks系统的。一个可能的过程如下:
上电复位——》romInit()——》romStart()(此处把bootROM的内容和FLASH内的系统程序都加载到RAM,VxWorks的加载在此步就完成了)--》sysInit()—-》usrInit()——》initVectBaseSet()-—》sysHwInit()——》usrKernelInit() ——》kernelInit()——》usrRoot()(启动用户应用程序)
另外:
对于程序驻留在ROM中运行的方式,在加载时只需要加载数据段。

2.1 函数sysHwInit()
从上面的启动过程可以注意到硬件初始化的一个主要函数是sysHwInit().
下面以BigHammer中扣板的BSP为例来分析一下该函数。
该函数完成如下功能:
调用sysMemMapDetect()检测存储映射配置,然后对相关的全局变量赋相应的值。可以不检测而直接赋值。
记录物理存储区的长度,计算sysPhysMemDesc的入口数
调用ppc8240pciInit()初始化8240 PCI接口
配置CPLD内的寄存器(与扣板相关,可参看扣板的硬件设计文档)
初始化寄存器EUMBBAR,此寄存器的值决定了EPIC,DMA等的相关寄存器的基本地址.
确认所用的CPU类型
调用sysEpicInit()完成EPIC(嵌入式中段控制器)初始化
调用GnetPciHwInit()初始化Galnet48303的PCI
调用sysSerialHwInit()初始化串口
调用sysNetHwInit()初始化网络接口
下面的内容引自一已有文档
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
3.1件和程序说明
romInit。S: romInit()
关中断,把启动类型(cold/warm)入栈,清零cache后跳到romStart的入口.
:romStart()
把ROM代码和数据段拷贝并重定位到RAM,清零RAM的未用部分,需要的话要进行解压缩,然后跳到sysInir()的入口地址。
拷贝的过程如下:
A,代码段不是驻留在ROM中,要拷贝代码段和数据段;
B,如代码段是驻留在ROM中的,则只拷贝数据段;
C,未用的内存清零;
D,需要时,要进行解压缩。
sysALib。S:sysInit()
sysInit()是VxWorks映像的入口地址,起始地址由RAM—LOW-ADR定义。它首先关中断,使cache无效,初始化处理器的寄存器为缺省值,使tracing无效,清除中断寄存器,初始化usrInit()的堆栈并激活usrInit().
注意,在sysInit()中必须重新初始化在romInit()中所做的硬件初始化。
and :usrInit()
它是VxWorks运行的第一个C代码,在supervisor ,存储有关启动类型(boot type)的信息,在VxWorks内核运行前进行必要的初始化.
A,初始化cache的模式,设置为安全状态,在usrInit()结束时使cache有效;
B,清零系统bss段;
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
C,初始化中断向量表,调用VectBaseSet(),exeVectInit();
D,初始化系统硬件,但使之无效(Quiescent State),调用sysHwInit(),这是一个与硬件有关的过程,是我们要针对不同的目标板进行修改的重要部分,其中涉及到串口,网口的初始化,CONSOLE的配置等;
E,调用usrKernelInit(),并使能cache;
F,调用kernelInit(),创建usrRoot()。
usrKernel。C:kernelInit()
初始化内核可选组件(kernel facility)。
:usrKernelInit()
初始化多任务环境。
调用intLockLevelSet(),使时间片(round-robin)方式无效,在内存的高端创建中断堆栈,ROOT堆栈和TCB,创建usrRoot(),中断usrInit()的运行,然后打开中断,注意要清除中断寄存器。
and :usrRoot()
初始化I/O系统,驱动器,设备().
3.2 程序列表
对于硬件初始化的顺序,大致可按下表中形式进行:
函 数
函 数 功 能
所 在 文 件
sysInit()
(a)锁住中断;(b)禁用缓冲;
(c)用缺省值初始化系统中断表(仅i960);
sysALib。s
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(d)用缺省值初始化系统错误表(仅i960);
(e)初始化处理器寄存器到一缺省值;
(f)使回溯失效;(g)清除所有悬置中断;
(h)激活usrInit(),指明启动类型.
usrInit()
(a)对bss赋零;
(b)保存bootType于sysStartType;
(c)调用excVecInit(),初始化所有系统和缺省中断向量;
(d)依次调用sysHwInit(), usrKernelInit(),kernelInit()。

usrKernelInit()
依次调用classLibInit(),taskLibInit(),taskHookInit(),semBLibInit(),semMLibInit(),semCLibInit(),semOLibInit(),wdLibInit(),msgQLibInit(),qInit(),workQInit()

kernelInit()
初始化并启动内核。
(a)激活intLockLevelSet();
(b)从内存池顶部创建根堆栈和TCB;
(c)调用taskInit(),taskActivate(),用于usrRoot();
(d)调用usrRoot()。
kernelLib。c
usrRoot()
初始化I/O系统,驱动器,设备(在
usrConfig。c
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
)
(a)调用sysClkConnect(),sysClkRateSet(),
iosInit(),[ttyDrv()];
(b)初始化excInit(),logInit(),sigInit()。
(c)初始化管道,pipeDrv();
(d)stdioInit(),mathSoftInit()或mathHardInit()
(e)wdbConfig():配置并初始化目标代理机
在大多数目标板的板级支持包中,VxWorks的入口点由两个函数:romInit()和romStart()来完成,而非sysInit()。具体基于ROM的VxWorks的初始化过程如下表所示:
函数
函数功能
所在文件
()
()
()
()
(a)禁止中断;
(b)保存启动类型;
(c)硬件初始化;
(d)调用romStart();
(a)将数据段从ROM拷贝到RAM,清内存;
(b)将代码段从ROM拷贝到RAM,有必要的话解
romInit。s


usrKernel。c
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
(完整word版)Vxworks的引导过程
5。kernelInit()
()
routine
压缩;
(c)调用usrInit();
初始化程序
如果相应的配置文件被定义,对应函数被调用
初始化并启动内核
初始化I/O系统,驱动器,创建设备
应用程序代码


Application source file
本文结束

最近更新

推荐:2019年世界粮食日宣传活动总结 4页

第十二讲-古代汉语词类活用 12页

泌尿系结石治疗指南 9页

2017超星尔雅大学生职业生涯规划考试自做试题.. 42页

化学清洗基础知识公开课一等奖课件赛课获奖课.. 34页

交通安全主题班会公开课一等奖课件赛课获奖课.. 21页

中小学建筑设计公开课一等奖课件赛课获奖课件.. 70页

《当幸福来敲门》观后感 3页

破产管理人工作流程及时间要求(2.23) 20页

鲁教版语文三年级下册飞向蓝天的恐龙6公开课一.. 17页

10月自考《行政组织理论》真题(完整试卷) 14页

传染病隔离制度流程 2页

鲁教版五年级下册真理诞生于一百个问号之后1公.. 14页

2019高考语法专题复习单句改错---非谓语动词 5页

宝宝声音秀APP产品说明书 3页

中考英语七上第1课时Units1-4课件人教新目标版.. 57页

思未来-理成资产分析报告 9页

与绳、杆、弹簧模型有关问题的归类分析(经典版.. 6页

语文:第8课《借书不还,天打雷劈》3(北师大版.. 11页

舞蹈课-教案 7页

结构设计教学公开课一等奖课件赛课获奖课件 14页

《跟我学汉语》教案(第一册35、36课) 6页

《图书借阅公约》教学设计-教案设计 5页

《化学是一门以实验为基础的科学》教材详解 7页

2015最新一年级人教版数学上册认识钟表练习题.. 4页

门窗的框与墙体间缝隙 5页

期中考试试题公开课一等奖课件赛课获奖课件 17页

矿权转让合同书(2025版) 15页

油脂过氧化值测定方法优化研究 2页

气候变化对城市影响 36页