vxworks的三种映像形式

        VXWORKS是一种灵活的、可裁剪的嵌入式实时操作系统,用户可以根据需要创建自己的VXWORKS映像,由它来引导目标系统,而后下载并运行应用程序。

        根据应用场合不同,vxworks映像可以分成三类:可加载的映像、基于ROM的映像和驻留ROM映像。

1.1可加载的映像

        该种方式对应vxworks下的image工程,因此在编译image工程时,实际上romInit.s文件并不会被编译,第一个入口文件为sysALib.s

        运行于RAM,不包含搬移程序,需要借助一些外部程序如BOOTROM才能加载到RAM的低端RAM_LOW_ADRS地址处。这是缺省的开发映像。

        目标板上电后,烧写在ROM中的引导程序Bootstrap会被拷贝到RAM的高端地址RAM_HIGH_ADRS处,并跳转至该地址执行ROM引导程序,配置好所选的加载方式(缺省为网络方式),并将指定的主机目录下的可加载的vxworks映像下载到目标板的RAM地址RAM_LOW_ADRS处,并跳转到此处执行操作系统的初始化。

        优点:生成的vxworks映像可以存放在开发主机PC机上,不用烧到ROM中,节省了ROM容量,也便于随时修改不同的映像,适用于调试的初期阶段。不足之处是需要在主机上维护一个正确的映像,对于调试硬件无关的上层应用程序不是很方便。

1.2基于ROM的映像

        该种方式对应vxworks下的"Boot Loader/BSP Project"工程,在该工程的创建过程中,又可根据映像的压缩形式手动选择压缩、非压缩、驻留等,如下图示,在该工程编译过程中romInit.s文件会被编译,且作为其运行的第一个入口文件。


        该映像是一种运行于RAM中,但起初存放于ROM中的映像,即该映像需要和搬移程序一起固化在BOOT中。换句话说,这种方式下不存在引导一说,固化到ROM中的vxworks镜像已经包含了引导相关的内容(romInit.s)。目标板上电后,首先运行BOOT中的引导搬移程序,将整个映像拷贝到RAM地址RAM_LOW_ARDS,并跳转到此处执行。bootstrapboot程序搬移到RAM的高地址,再搬移映像到RAM的低地址并运行)

该映像根据是否被压缩又可分为:

1.2.1 基于ROM的未压缩的vxworks映像

        可以直接从ROM拷贝到RAM中;

1.2.2 基于ROM的压缩的映像

        主要是为了节约ROM空间,在从ROM拷贝到RAM的过程中需要解压缩,因此与上述未压缩的映像相比,它的引导过程相对较慢,但两者在RAM中的运行速度是一样的。

1.2.3 驻留ROM的映像

        起初也和搬移程序一起固化在ROM中,目标板上电后,首先运行BOOT中的引导搬移程序,但仅将映像的数据段和BSS段拷贝到RAM地址RAM_LOW_ADRS处,映像的代码段仍旧留在ROM中(与1.2.1和1.2.2的区别),从ROM中开始执行。

    优点是具有最快的引导速度,占用最少的RAM空间,适用于RAM空间有限的目标板。但由于该映像在ROM中运行,运行速度在三种映像中是最慢的。

番外:

    汇编级的硬件初始化程序romInit.s,用于系统的基本初始化,设置一些重要寄存器的初始值,进行存储器映射

    搬移程序bootInit.c,将ROM引导程序拷贝至RAM的高端地址RAM_HIGH_ADRS,然后跳转到此处执行ROM引导程序。

    ROM引导程序起初存放在ROM中,初始化时被拷贝到RAM中,主要用于系统的进一步初始化,并配置加载方式,将映像加载至RAM。

    引导过程成功以后,RAM中ROM引导程序占用的空间(从RAM_HIGH_ADRS开始)可以重新被系统利用。

    RAM_HIGH_ADRS是ROM引导程序的加载点,RAM_LOW_ADRS是vxworks的加载点。


猜你喜欢

转载自blog.csdn.net/jiangganwu/article/details/80645641
今日推荐