VxWorks启动过程具体解释(下)

上一节主要是从映像的分类和各种映像的大致载入流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程:

1. Boot Image + Loadable Images:

以下是详细的流程图:

当中第一阶段的运行流程使用的是上图的左边的源文件里的那些函数(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 Boot

Copyright 1984-1998  Wind River Systems, Inc.

CPU: MPC860

Version: 5.4

BSP version: 1.2/0

Creation date: Aug 2 2002, 09:19:47

Press any key to stop auto-boot...

 3

 

此时按随意键可停止自己主动启动,改动启动行參数

[VxWorks Boot]: p

boot device          : cpm

unit number          : 0

processor number     : 0

host name            : Michel

file name            : c:/ftpRoot/vxWorks

inet on ethernet (e) : 168.2.7.27:ffffff00

host inet (h)        : 168.2.7.10

user (u)             : target

Passwd(pw)           : target

flags (f)            : 0x0

―――――――――――――――――――――――――――

[VxWorks Boot]: @

boot device          : cpm

unit number          : 0

processor number     : 0

host name            : Michel

file name            : c:/ftpRoot/vxWorks

inet on ethernet (e) : 168.2.7.27:ffffff00

host inet (h)        : 168.2.7.10

user (u)             : target

Passwd(pw)           : target

flags (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... 881680

Starting at 0x10000…

 

Attached TCP/IP interface to cpm unit 0

Attaching network interface lo0... done.

 

VxWorks

Copyright 1984-1998 Wind River Systems, Inc.

         CPU : MPC860

     vxWorks : 5.4

  BSP version: 1.2/0

Creation date: Aug 2 2000

         WDB : Ready

2. 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... 881680

Starting at 0x10000…

 

Attached TCP/IP interface to cpm unit 0

Attaching network interface lo0... done.

 

VxWorks

Copyright 1984-1998 Wind River Systems, Inc.

         CPU : MPC860

     vxWorks : 5.4

  BSP version: 1.2/0

Creation date: Aug 2 2000

         WDB : Ready

3. ROM-Resident Images:

这样的启动方式的流程和上面那种基本同样。仅仅是不须要载入text段到RAM中而已,故在此不作介绍了。

VxWorks借鉴了传统PC操作系统的引导原理。其将整个引导过程分为两个阶段:1. BOOTROM启动。2. 通过BOOTROM载入VxWorks内核。

时间: 2024-10-06 00:10:41

VxWorks启动过程具体解释(下)的相关文章

VxWorks启动过程详解(下)

上一节主要是从映像的分类和各种映像的大致加载流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程: 1. Boot Image + Loadable Images: 下面是具体的流程图: 其中第一阶段的执行流程使用的是上图的左边的源文件中的那些函数(romInit->romStart->usrInit->sysHwinit->usrKernelinit->usrRoot);第二阶段执行流程使用的是上图中右边源文件中的那些函数(sysInit-&

VxWorks启动过程详解(上)

vxworks有三种映像: VxWorks Image的文件类型有三种 Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压缩):即将Image直接烧入ROM,运行时将Image拷入RAM中运行. ROM-Resident Images:Image的指令部分驻留在ROM中运行,仅将数据段部分拷入RAM. 注意这里说的三种映像都是包含真正操作系统VxWorks的映像,其中后两种可以直接启动并运行起来,但是第一种不行,它必须

VxWorks启动过程的详细解释(上)

vxworks有三个图像: VxWorks Image有三种类型的文件 Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压缩):即将Image直接烧入ROM,执行时将Image拷入RAM中执行. ROM-Resident Images:Image的指令部分驻留在ROM中执行.仅将数据段部分拷入RAM. 注意这里说的三种映像都是包括真正操作系统VxWorks的映像,当中后两种能够直接启动并执行起来.可是第一种不行,它必须

linux内核启动过程学习总结

下面是学习linux内核启动过程的记录 平台是:powerpc mpc8548 + linux2.6.23 内核 通用寄存器的作用r0 :在函数开始时使用r1 :存放堆栈指针,相当于ia32架构中的esp寄存器r2 :存放当前进程的描述符的地址r3 :存放第一个参数和返回地址r4-r10 :存放函数的参数r11 :用在指针的调用和当前一些语言的环境指针r12 :用于存放异常处理r13 :保留做为系统线程IDr14-r31 :作为本地变量,具有非易失性 Linux启动过程描述 第一步:使用Boot

【转载】Linux启动过程

转自:http://cizixs.com/2015/01/18/linux-boot-process 简介 我们都知道:操作系统运行的代码是在硬盘上的,最终要跑到内存和 CPU 上,才能被我们使用. 那从摁下电源键到看到系统界面,操作系统是怎么霸占了所有的硬件资源,把自己加载到内存开始运行的呢? 可以想到有两个可能性:操作系统自己实现的,或者有其他贵人帮忙.如果是操作系统自己启动的,就有了一个“鸡生蛋,蛋生鸡”的问题:如果是后者的话,一定有在操作系统启动之前就能工作的神力,把沉睡在硬盘的操作系统

Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法

转自:http://blog.csdn.net/dwt1220/article/details/29373817 Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除  注:在旧版本Xcode创建的工程中,这个配置文件的名字就叫“Info.plist”  项目中其他Plist文件不能带有“Info”这个字眼,不然会被错认为是传说中非常重要的“Info.plis

Cocos2d-x程序在Android下的启动过程

注:原文也在公司内部论坛上发了 本文通过分析cocos2d-x(分析版本为cocos2d-x-2.2.1)自身提供的示例程序HelloLua(在目录$(sourcedir)\samples\Lua\HelloLua\下)来分析cocos2d-x的在android平台下的具体启动过程. 我们知道android平台的游戏是从一个Activity开始的.HelloLua的启动Activity是在文件HelloLua.java中定义的,相关代码如下: public class HelloLua exte

X86下Linux的启动过程

简介 1.系统加电复位阶段 2.BIOS启动.自检 3.加载MBR主引导程序 4.加载GRU次引导程序 5.加载操作系统内核 6.运行操作系统的第一个进程init 第一步.系统加电复位阶段 系统加电或复位后,基于80x86的特性,中央处理器将内存中所有数据清零,并对内存进行校验.如果没有错误,则CS寄存器中全部置1,IP寄存器中全部置0,即CS=FFFF[0]H,而IP=0000[0]H.[CS]:[IP]指向的就是BIOS的入口,由此进入BIOS的启动过程. 在系统加电启动过程中,实际上只有一

linux下 mongodb安装和启动过程

一  转到目录解压缩下载的压缩包 [email protected] server$ tar -zxvf mongodb.tgz 二 安装后查看: [[email protected] mongodb-linux-x86_64-2.4.6]$ cd bin [[email protected] bin]$ ls bsondump  mongodump    mongoimport  mongorestore  mongostat mongo     mongoexport  mongooplog