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内核。
VxWorks启动过程具体解释(下)的更多相关文章
- VxWorks启动过程详解(下)
上一节主要是从映像的分类和各种映像的大致加载流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程: 1. Boot Image + Loadable Images: 下 ...
- VxWorks启动过程的详细解释(上)
vxworks有三个图像: VxWorks Image有三种类型的文件 Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压 ...
- VxWorks启动过程详解(上)
vxworks有三种映像: VxWorks Image的文件类型有三种 Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压 ...
- 【转载】Linux启动过程
转自:http://cizixs.com/2015/01/18/linux-boot-process 简介 我们都知道:操作系统运行的代码是在硬盘上的,最终要跑到内存和 CPU 上,才能被我们使用. ...
- 从Linux启动过程到android启动过程
Linux启动过程: 1.首先开机给系统供电,此时硬件电路会产生一个确定的复位时序,保证cpu是最后一个被复位的器件.为什么cpu要最后被复位呢?因为 如果cpu第一个被复位,则当cpu复位后开始运行 ...
- Android深入四大组件(四)Android8.0 根Activity启动过程(前篇)
前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...
- Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法
Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 注:在旧 ...
- 个人从源码理解angular项目在JIT模式下的启动过程
通常一个angular项目会有一个个模块(Module)来管理各自的业务,并且必须有一个根模块(AppModule)作为应用的入口模块,整个应用都围绕AppModule展开.可以这么说,AppModu ...
- [oracle] oracle的三种密码验证机制以及在windows和linux下的不同启动过程
oracle数据库的密码验证机制: ① 操作系统验证 拥有SYSDBA和SYSOPER的用户用该方式验证此时数据库无需启动,也无需开启监听和实例服务. 要求:本地组ora_dba中有该操作系统的登录用 ...
随机推荐
- glRectf(-0.5f, -0.5f, 0.5f, 0.5f)
http://bbs.csdn.net/topics/370049656 x向右,y向上时OPENGL坐标系,z向屏幕外表示正方向(-0.5,-0.5)是左下角坐标,(0.5,0.5)是右上角坐标,, ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---12
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- locust参数关联及批量注册
前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点,需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:http ...
- hdu 2521 反素数(打表)
反素数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- python 安装cx_Oracle模块, MySQLdb模块, Tornado
一,想访问远程Oracle数据库,本地又不想安装几百兆的Oracle Client(也木有root权限),安装python的cx_Oralce 模块需要依赖Oracle Instant Client ...
- Codeforces Round #467 (Div. 2) A. Olympiad[输入一组数,求该数列合法的子集个数]
A. Olympiad time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- 解决百度ueditor配置上传目录为外部目录时,项目启动访问不到图片的问题。
如图所示,公司项目用到了百度的ueditor,配置的上传目录并不在项目根目录下,而是在外部目录中.于是在上传图片时,出现了无法获取图片的问题. 解决方法:添加该目录至tomcat项目部署目录中,如下图 ...
- node.js博客GitHub搭建(hexo)
教程参考官网提供的: https://hexo.io/zh-cn/ 教程: https://hexo.io/zh-cn/docs/ 我的node.js环境: hexo博客全程采用markdown进行编 ...
- 基于WPF系统框架设计(5)-Ribbon整合Avalondock 2.0实现多文档界面设计(二)
AvalonDock 是一个.NET库,用于在停靠模式布局(docking)中排列一系列WPF/WinForm控件.最新发布的版本原生支持MVVM框架.Aero Snap特效并具有更好的性能. Ava ...
- Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新
1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...