vxWorks/BootROM Imageq启动顺序详解

简介: <div class="Blog_wz1" style="word-wrap:break-word"> <div>vxWorks/BootROM Imageq启动顺序详解</div> <div><br></div> <div>VxWorks image</div> <div>    分为在ROM中运行和在RAM中运行两种,两者启动顺序的区别在于sysInit()函数的调用,该函数在
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中定义。
相关文章
|
7月前
|
存储 Linux 芯片
【启动】芯片启动过程全解析
【启动】芯片启动过程全解析
165 0
|
8月前
|
算法 Linux 调度
内核编译,进程调度
内核编译,进程调度
83 0
|
Ubuntu Linux 开发工具
E2000 UEFI使用设备树方式启动linux系统
E2000 UEFI使用设备树方式启动linux系统
2190 0
E2000 UEFI使用设备树方式启动linux系统
|
芯片
BIOS启动过程分析
1        引言 1.1    文档目的 对于电脑用户来说,打开电源启动电脑几乎是每天必做的事情,但计算机在显示这些启动画面的时候在做什么呢?大多数用户都未必清楚了。
1574 0
|
Linux
16.8 Linux启动引导程序加载内核
在刚刚的启动过程中,我们已经知道启动引导程序(Boot Loader,也就是 GRUB)会在启动过程中加载内核,之后内核才能取代 BIOS 接管启动过程。如果没有启动引导程,那么内核是不能被加载的。
265 0
16.8 Linux启动引导程序加载内核
|
Linux Shell Go
一个设想,在统一bios/uefi firmware,及内存中的firmware中为pebuilder.sh建立不死booter
本文关键字:firmware in RAM' replacements for UEFI firmware,虚拟efi,编译类colinux的linuxboot
260 0
一个设想,在统一bios/uefi firmware,及内存中的firmware中为pebuilder.sh建立不死booter
|
网络协议 C语言
VxWorks启动过程详解(下)
<p class="item-content"><span style="font-size:12px">上一节主要是从映像的分类和各种映像的大致加载流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程:</span></p> <span style="font-weight:bold"></span> <h4 class="item-content">
1894 0

热门文章

最新文章

相关课程

更多