vxWorks/BootROM Imageq启动顺序详解

VxWorks image
    分为在ROM中运行和在RAM中运行两种,两者启动顺序的区别在于sysInit()函数的调用,该函数在RAM运行的VxWorks中初始化RAM。
 
1.ROM中运行的VxWorks :
    VxWorks在ROM中运行,即写入ROM中的VxWorks是非压缩的,不需要解压,系统直接跳到ROM的首地址运行VxWorks。注意:ROM运行的VxWorks并不支持所有的主扳,应以主板手册为准。
1.1执行顺序
romInit.s中的romInit()-->
bootInit.c中的romStart()-->
usrConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()-->KernelInit(usrRoot,...)
1.2优点
   VxWorks在ROM中运行主要是为了节省RAM空间,以便应用程序有更大的空间运行。只把VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS,text部分留在ROM并在ROM中执行。
1.3缺点
ROM中运行的VxWorks缺点是运行速度慢。
 
2. RAM中运行的VxWorks
    VxWorks在RAM中运行,即写入ROM中的Boot或VxWorks Image是压缩的,需要先解压copy所有的text和data到RAM的LOCAL_LOW_ADRS中。下面sysInit()主要是初始化RAM用的,系统直接跳到RAM的首地址运行VxWorks。usrInit()前面不压缩,即romInit()、romStart()不能压缩。
2.1程序执行顺序
romInit.s中的romInit()-->
bootInit.c中的romStart()-->
sysaLib.s中的sysInit()-->
usrConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()-->KernelInit(usrRoot,...)

BootROM image
    BootROM image 最少的系统初始化,主要用于启动装载VxWorks image。一般有压缩和不压缩两种形式,如bootrom和boot_uncmp。与VxWorks image的区别在于一个Bootrom调用bootConfig.c,而VxWorks调用usrConfig.c。
 
1.1程序执行顺序
romInit.s中的romInit()-->
bootInit.c中的romStart()-->
bootConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()-->KernelInit(usrRoot,...)
 
其中/target/config/all/bootConfig.c是Boot ROM设置模块,用于通过网络加载VxWorks image。
usrRoot()-->bootCmdLoop(void)命令行选择,或autobooting-->bootLoad(pLine, &entry)加载模块到内存(网络,TFFS,TSFS...)-->netifAttach()-->go(entry)-->(entry)()从入口开始执行,不返回.
 
1.2各个函数的主要作用
romInit()---
    power up,disable interrupt,put boot type on the stack,clears caches.
romStart()---
    load Image Segments into RAM.
usrInit()---
    Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot(),This task completes the start up.
sysHwInit()---
    Interrupt locked,Initializes hardware,registers,activation kernel
KernelInit(usrRoot,...)---
    Initializes and starts the kernel.
    Defines system memory partition.
    Activates a task tUsrRoot to complete initalization.
    Unlocks inierrupts.
    Uses usrInit()stack.
usrRoot()---
    初始化内存分区表(memory partition library)
    初始化系统系统时钟(system clock)
    初始化输入输出系统(I/O system)----可选
    Create devices----可选
    设置网络(Configure network)--------可选
    激活WDB目标通信(Activate WDB agent)---------可选
    调用程序(Activate application)

Boot或VxWorks image的text段或data段会从ROM复制到RAM,在RAM中运行。其中usrRoot()是VxWorks启动的第一个任务,由它来初始化 driver、network等描述。romInit.s first execute in flash,minal initiliz,then jump to romStart。romStart() 开始装载和解压image到RAM,sysaLib.s是在RAM中执行的第一个函数。
  
VxWorks 在ROM中的情况
ROM 低地址位为没有压缩的romInit.s和romStart()在ROM的起始位置,系统power up后,从这个起始位开始执行,即执行romInit(),起始位置由硬件定义,一般为0x00000000。ROM 高地址位为压缩的VxWorks Imgage
其中 RAM_LOW_ADRS, RAM_HIGH_ADRS 等一些地址在makefile 和BSP config.h中定义。

vxWorks/BootROM Imageq启动顺序详解的更多相关文章

  1. Tomcat5的web应用启动顺序详解

    Tomcat5的web应用启动顺序详解 [收藏此页] [打印]   作者:佚名  2007-07-17 内容导航: 第1页   [IT168技术文档]摘要: 应用Tomcat对于我们来讲实在是司空见惯 ...

  2. Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  3. Linux启动过程详解

    Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...

  4. linux 开机启动过程详解

    Linux开机执行内核后会启动init进程,该进程根据runlevel(如x)执行/etc/rcx.d/下的程序,其下的程序是符号链接,真正的程序放在/etc/init.d/下.开机启动的程序(服务等 ...

  5. Linux开机启动程序详解

    Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. ...

  6. Linux开机启动程序详解[转]

    Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤 ...

  7. linux系统设置服务开机启动3种方法,Linux开机启动程序详解

    linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图     方法2:利用命令行chkconfig命令进行设置 简要说明 ...

  8. Linux启动流程详解【转载】

    在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...

  9. Linux如何实现开机启动程序详解(转)

    Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. ...

随机推荐

  1. python3操作socketserver

    socketserver是标准库中的一个高级模块,用于网络客户端与服务器的实现.模块中,已经实现了一些可供使用的类. 在python3中,导入socketserver模块使用的命令: import s ...

  2. ConcurrentHashMap、CopyOnWriteArrayList、LinkedHashMap

    HashMap中未进行同步考虑,而Hashtable在每个方法上加上了synchronized,锁住了整个Hash表,一个时刻只能有一个线程操作,其他的线程则只能等待,在并发的环境下,这样的操作导致H ...

  3. 为什么webstrom无法格式化代码?

    用过webstrom的童鞋都知道格式化代码需要按快捷键:ctrl+Alt+L:可是我最近发现这个快捷键不管用,今天终于知道了原因, 是后台网易云音乐没有关,和网易云音乐的快捷键冲突了,就是这么神奇没办 ...

  4. POJ 1625 Censored! [AC自动机 高精度]

    Censored! Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9793   Accepted: 2686 Descrip ...

  5. JavaScript命名整理

    .container { width: 720px; background: #fafafa; border: 2px dashed #999; padding: 10px; float: left ...

  6. go 开发环境安装教程 windows

         首先进入go 语言官网下载最新安装包,我目前安装的版本是 1.8.3版本:go1.8.3.windows-amd64.msi 如果下载慢,这个是百度云地址:https://pan.baidu ...

  7. bzoj1555 KD之死 贪心+堆优化

    1555: KD之死 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 124  Solved: 54[Submit][Status][Discuss] D ...

  8. js获取对象长度和名称

    1.对象的长度不能用.length获取,用js原生的Object.keys可以获取到 var obj = {'name' : 'Tom' , 'sex' : 'male' , 'age' : '14' ...

  9. Qt msvc 乱码如何解决?

    #ifdef Q_OS_WIN #pragma execution_character_set("UTF-8") #endif

  10. 【BZOJ2959】长跑 (LCT+并查集)

    Time Limit: 1000 ms   Memory Limit: 256 MB Description 某校开展了同学们喜闻乐见的阳光长跑活动.为了能“为祖国健康工作五十年”,同学们纷纷离开寝室 ...