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. linux启动顺序详解

    POST(加电自检)-->bootsequence(引导次序,BIOS)-->Boot Loader(MBR)-->Kernel+ramdisk(临时根,initrd,initram ...

  2. Linux开启动过程详解

    Linux开启动过程详解 Linux启动过程 前言: Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布.在加上用户空间的应用程序之后 ...

  3. centos7 启动流程图_Linux启动过程详解

    Linux启动过程详解 作者:江远航 一.启动流程图如下 图1 Linux启动流程图 BIOS ---> MBR ---> Kernel---> Init 二.Linux启动顺序 一 ...

  4. SpringBatch 配置并行启动Job详解 (八)

    文章目录 一.创建并行job 前言:在日常业务中可能需要job并行执行,SpringBatch支持job并行步执行,并且配置简单. 代码已上传GitHub上面地址:https://github.com ...

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

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

  6. Spring启动过程详解

    Spring启动过程详解 前言 spring容器启动过程 AnnotationConfigApplicationContext 有参数构造方法 无参数构造 AnnotatedBeanDefinitio ...

  7. U-Boot启动参数详解(U-Boot-2014.07版本)

    1适用性说明 表 1 开发板型号 是否支持本实验 TL437x-EVM 支持 TL437x-EasyEVM 支持 TL437x-IDK 不支持 TL437xF-EVM 支持 2U-Boot启动参数通读 ...

  8. TL138-EVM U-Boot启动方法及启动参数详解

    1U-Boot-2016.05版本适用性说明 表 1 开发板型号 是否支持本实验 TL5728-EasyEVM 支持 TL5728-IDK 支持 TL5728F-EVM 不支持 2U-Boot启动参数 ...

  9. linux efi 启动原理,Linux(RHEL6)启动过程详解

    Linux(RHEL6)启动过程详解 Linux(红帽RHEL6)启动过程详解: RHEL的一个重要和强大的方面是它是开源的,并且系统的启动过程是用户可配置的.用户可以自由的配置启动过程的许多方面,包 ...

最新文章

  1. 赵方庆 北京生科院Computational strategies in exploring circular RNAs 探索环状rna的计算策略
  2. jQuery选择器之可见性过滤选择器
  3. jquery判断页面、图片是否加载完成
  4. pandas读取html并排序,使用pandas怎么实现按照列的值进行排序
  5. how to find data source of F4 help in web client UI
  6. 【图像处理】——图像特效处理(马赛克、图像融合、毛玻璃等)
  7. matlab利用霍夫,基于matlab的霍夫变换
  8. python的字符串内建函数
  9. ajax 如何禁止 预检请求,如何跳过“选项”预检请求?
  10. Silverlight 4新控件PivotViewer介绍
  11. matlab 中 t=0:t:(n-1)t;k=0:n-1,《MATLAB语言与应用》练习题答案
  12. Windows 8 Directx 开发学习笔记(八)要有光
  13. php 改变页面元素,JavaScript动态改变页面元素
  14. java 命令 native2ascii_Java用native2ascii命令做unicode编码转换
  15. 【bootcamp问答系统部署】
  16. 高斯函数表达式C语言,C语言计算高斯核函数
  17. win10 配置flashbuilder debug
  18. selenium配置Edge 全屏 更改ua 等
  19. python新版个人所得税代码_个人所得税计算代码
  20. 解决Hibernate:could not initialize proxy - no Session

热门文章

  1. 迷宫问题-左手和右手法则及递归实现
  2. 实验(七):串行口实验
  3. 实验台在实验室中的应用有哪些
  4. Kubernetes API Server 认证机制
  5. VSCode内网远程连接服务器
  6. Linux命令行界面菱形乱码解决方法
  7. POJ 1265 pick 定理
  8. 查找算法【哈希表】- 散列函数
  9. 【安全牛学习笔记】WPS (WIRELESS PROTECTED SETUP)
  10. 七牛php回调响应,关于直播状态回调