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中有该操作系统的登录用 ...
随机推荐
- android中与Adapter相关的控件----ExpandableListView
ExpandableListView(可折叠的列表) 一.ExpandableListView(可折叠的列表)和ListView有很多地方差不多的,使用也差不多,只是他们使用适配器不一样的,Expan ...
- Liunx 重新mount
https://zhidao.baidu.com/question/349907351.html
- POJ 2411 Mondriaan's Dream [经典状态压缩dp]
题意:略. 思路:这一题开始做的时候完全没有思路,便去看了别人的题解. 首先,对于这个题目解法想有一个初步的了解,请看这里:http://www.2cto.com/kf/201208/146894.h ...
- Android OkHttp经验小结
OkHttp应该是目前最完善,也是相当流行的一个底层网络请求库.Google都在用,所以有必要深入了解一下,刚好最近在重构公司项目的网络层,就顺便梳理一下.———–12.29————最近暂时没有时间详 ...
- 评分条RatingBar Android
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- ylb:SQL 表的高级查询-多表连接和子查询
ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_three.html 第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实 ...
- 2016.6.20 tomcat安装出现No Java Virtual Machine found in..
安装tomcat时,选择安装路径为自定义路径,但是出现提示: No Java Virtual Machine found in.. 心想这和java虚拟机什么关系啊.百度了之后发现,安装过程中有一步是 ...
- T4模板编辑器
一 二.工具 (T4模板编辑器) 使用效果 1.tangibleT4EditorPlusModellingToolsVS2013.msi 2.devart T4 Editor for Visual ...
- linux下内存
MMU由一个或一组芯片组成.其功能是把逻辑地址映射为物理地址,进行地址转换(MMU是CPU的一部分) 机器指令仍然用逻辑地址指定一个操作数的地址或一条指令的地址 每个逻辑地址都由一个段选择符(16位) ...