第二节: VxWorks启动流程
此节主要参考:http://www.docin.com/p-602555316.html,欲了解VxWorks映像及启动流程详情,也可访问本链接.
在了解VxWorks启动流程前,需要先了解VxWorks的几种映像(镜像?Image)。VxWorks镜像用于引导目标系统,类似于我们常见的Windows操作系统或Linux内核,镜像启动后应用程序才可能被加载启动。根据应用场合不同,VxWorks映像分为三种:可加载的VxWorks映像、基于ROM的VxWorks映像和驻留ROM的VxWorks映像。
可加载的VxWorks映像:这是一种运行于RAM的可加载的VxWorks映像,它不包含搬移程序,需要借助一些外部的程序如bootRom才能加载到RAM的低端RAM_LOW_ADRS地址处,这是缺省的开发映像,目前FH的PON单盘基本都是使用这种开发映像。在开发的初期阶段,用户可以根据需要添加或删除一些VxWorks组件,生成自己的可加载的VxWorks映像,存放在开发主机的某个目录下。目标板上电后,由烧结在BOOT中的起始引导程序(BootStrap Programs)将BOOT中的ROM引导程序(ROM Boot Programs)拷贝到RAM的高端地址RAM_HIGH_ADRS处,并跳转至该地址执行ROM引导程序,配置好所选的加载方式(缺省为网络方式),将指定的主机目录下的可加载的VxWorks映像下载到目标板的RAM地址RAM_LOW-ADRS处,并跳转到此处执行。[注:可联想到本地升级,进入boot后选择网络模式并传输写入文件,文件写完后再选择go加载映像]
基于ROM的VxWorks映像:这是一种运行于RAM中,但起初存放于ROM中的VxWorks映像,该映像需要和搬移程序一起固化在BOOT中。目标板上电后,首先运行BOOT中的引导搬移程序,将整个VxWorks映像拷贝到RAM地址RAM_LOW_ADRS处,并跳转到此处执行。
驻留ROM的VxWOrks映像:这种映像起初也和搬移程序一起固化在BOOT中,目标板上电后,首先运行BOOT中的引导搬移程序,但仅将VxWorks映像的数据段和BSS段拷贝到RAM地址RAM_LOW_ADRS处,映像的代码段仍然留在ROM中,从ROM中开始执行。
以上各种VxWorks映像中都有一个概念搬移程序,即romStart(),定义在工程的romStart.c(有一些系统为bootInit.c,来自互联网举例)中。
各种映像的BOOTROM及加载方法(启动)也各不相同。
可加载VxWorks映像的BOOTROM包含两部分:起始引导程序(Boot Strap Program)和ROM引导程序(ROM Boot Program)。起始引导程序驻留在ROM中,主要包含:汇编级的硬件初始化程序romInit.s,用于系统的基本初始化,设置一些重要寄存器的初始值,进行存储器的映射搬移程序romStart.c(bootInit.c),将ROM引导程序拷贝至RAM的高端地址RAM_HIGH_ADRS,然后跳转到此处执行ROM引导程序。ROM引导程序用于系统的进一步初始化,并配置加载方式,将VxWorks映像加载至RAM。
在基于ROM的VxWorks映像BOOTROM中,搬移程序负责将VxWorks映像的文本段和数据段搬移到用户定义的低端内存地址RAM_LOW_ADRS,再启动VxWorks映像。
对于驻留ROM的VxWorks映像的BOOTROM,VxWorks系统文本段驻留在ROM,搬移程序负责将数据段和bss短搬移到RAM_LOW_ADRS,再直接启动VxWOrks映像(含符号表)。RAM_LOW_ADRS是VxWorks映像的加载点,也是VxWorks数据段的起始点。
以可加载的VxWorks映像为例,说明系统启动流程:
本小结总结:usrAppInit()在内核初始化完成后调用。