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. WTF小程序之wxs

    前言 对于从VUE过来的前端同学来说,见到小程序的第一眼一定是熟悉-感觉就像是把vue的单文件拆成了3个文件.但是,随着慢慢入坑.马上会发现,这样怎么不行?wxs文件又是什么鬼?template和vu ...

  2. 图说:为什么Java中的字符串被定义为不可变的

    8张图,看懂Java字符串的不变性 字符串,想必大家最熟悉不过了,通常我们在代码中有几种方式可以创建字符串,比如:String s = "Hollis";这时,其实会在堆内存中创建 ...

  3. 洛谷 [P251] 餐巾计划问题

    有上下界的最小费用最大流 可以联想到供求平衡问题,所以我们要拆点做这道题 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri,费用为0的有向边. 2.从 ...

  4. bzoj 2655: calc [容斥原理 伯努利数]

    2655: calc 题意:长n的序列,每个数\(a_i \in [1,A]\),求所有满足\(a_i\)互不相同的序列的\(\prod_i a_i\)的和 clj的题 一下子想到容斥,一开始从普通容 ...

  5. hdu 4609 3-idiots [fft 生成函数 计数]

    hdu 4609 3-idiots 题意: 给出\(A_i\),问随机选择一个三元子集,选择的数字构成三角形的三边长的概率. 一开始一直想直接做.... 先生成函数求选两个的方案(注意要减去两次选择同 ...

  6. UOJ#219. 【NOI2016】优秀的拆分 [后缀数组 ST表]

    #219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\( ...

  7. CF 716E. Digit Tree [点分治]

    题意:一棵树,边上有一个个位数字,走一条路径会得到一个数字,求有多少路径得到的数字可以整除\(P\) 路径统计一般就是点分治了 \[ a*10^{deep} + b \ \equiv \pmod P\ ...

  8. BZOJ 2809: [Apio2012]dispatching [斜堆]

    题意:主席树做法见上一题 我曾发过誓再也不写左偏树(期末考试前一天下午5个小时没写出棘手的操作) 于是我来写斜堆啦 从叶子往根合并,维护斜堆就行了 题目连拓扑序都给你了... 说一下斜堆的操作: 合并 ...

  9. BZOJ 3544: [ONTAK2010]Creative Accounting [set]

    给定一个长度为N的数组a和M,求一个区间[l,r],使得$(\sum_{i=l}^{r}{a_i}) mod M$的值最大,求出这个值,注意这里的mod是数学上的mod 这道题真好,题面连LaTeX都 ...

  10. Ubuntu下的Samba服务器配置

    一. samba的安装: sudo apt-get insall samba 二. 创建共享目录: mkdir /home/phinecos/share sodu chmod 777 /home/ge ...