前言:vxworks 的一些文件,如 usrconfig.c 在 config,comp目录中均有出现,因编译方式而选择某一个文件,命令行方式采用 config 目录文件,tornado 图形界面配置选择comp 目录文件。此处采用命令行方式编译。
Bootrom 完成 vxworks 启动前的基本引导工作,如最简初始化硬件,下载映像文件并解压到RAM中等操作。值得一提的是某些型号处理器对 cache 等部件初始化有特殊要求,可能需在 bootrom 中进行特殊处理。
一、vxworks映像类型
Bootrom、vxworks两种映像。
Bootrom 用于引导 vxworks,功能如上所述。该映像直接烧在FLASH中,也可用UBoot代替。
Vxworks 多任务的系统映像文件。
二、Bootrom 启动策略
共三种:bootrom、bootrom_uncmp、bootrom_res。
1、bootrom 压缩型,占用 flash 空间小,其中大部分被压缩过,完成将自身从FLASH中解压并搬运到RAM中的操作,该步骤完成后将跳到RAM中继续执行 bootrom 程序(听起来神奇,看起来挺美)。优点:占用flash小,程序段代码段均在RAM中执行,速度快。
2、bootrom_uncmp 非压缩型,较 bootrom 型占用 flash 大些,完成将自身从flash到ram的搬运过程,无需解压,其后与 bootrom 方式一致。个人认为速度会较 bootrom 方式忙些,因读取 flash 的速度较慢,未压缩,多读取flash时间可能超过 bootrom 方式的解压时间。
3、bootrom_res 驻留flash型,因未经压缩,占用flash空间和 bootrom_uncmp 大小几乎一致。运行时代码段一致在flash中执行,导致速度较上两种慢;数据段将被搬到RAM中。优点:占用RAM小;缺点:较1占用较多flash空间,较1、2的执行速度慢。
注:bootrom 与 vxworks 关系易混淆。vxworks 是真正系统运行时映像,因支持多种启动策略,故由其他模块(bootrom、uboot)完成加载。bootrom 在完成加载使命后将不再被执行。
三、bootrom 启动流程
这里描述的bootrom均由命令行方式编译产生。
1、上电后执行顺序
romInit() (romInit.s)
-->
romStart() (bootInit.c)
-->
usrInit() (bootConfig.c)
     -->
     excVecInit() (target\lib\arm\ARMARCH4\common\libarch.a)
     -->
     sysHwInit() (bootConfig.c)
     -->
     usrKernelInit() (target\src\config\usrKernel.c)
                     (included by bootConfig.c)
     -->
     kernelInit() (target\lib\arm\ARMARCH4\common\libwind.a)
         -->
         usrRoot() (bootConfig.c)
2、romInit() (romInit.s)

初始化中断、时钟、系统总线、内存。非 bootrom_res 型 bootrom,还将 bootrom 的 romInit 函数段从 flash 搬运到 ram 中,地址映射,之后该函数的执行将在 ram 中进行。对于 bootrom_res 型 bootrom 将一直在 flash 中执行。因 vxworks 系统启动后,需对所有硬件重新初始化,该函数仅做必不可少的初始化部分。
注:该函数在 ld 的时候被映射到 RAM_HIGH_ADRS。如下:
ldarm -X -EL -N   -e romInit \

    -Ttext 0C500000   -o bootrom_uncmp romInit.o bootInit_uncmp.o version.o \

     bootConfig.o sysALib.o sysLib.o ne2000End.o   --start-group   -LC:\Tornado2.2_

ARM\target/lib/arm/ARMARCH4/gnu -LC:\Tornado2.2_ARM\target/lib/arm/ARMARCH4/comm

on \

         -lcplus   -lgnucplus   -lvxcom   -larch   -lcommoncc   -ldcc   -ldrv   -lgcc   -

lnet   -los   -lrpc   -ltffs   -lvxfusion   -lvxvmi   -lwdb   -lwind   -lwindview C:\Tor

nado2.2_ARM\target/lib/libARMARCH4gnuvx.a --end-group   -T C:\Tornado2.2_ARM\targ

et/h/tool/gnu/ldscripts/link.RAM
3、romStart() (bootInit.c)
bootrom 型:将 code 段、data 段从 flash 中拷贝到 ram中,清内存,之后对code段进行解压缩。
bootrom_uncmp 型:将 code 段、data 段从 flash 中拷贝到 ram中,清内存。

bootrom_res 型:将 data 段从 flash 中拷贝到 ram。

VxWorks 引导程序的更多相关文章

  1. VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer

    中断服务程序 ISR 硬件中断处理是实时系统的关键,因为它是外部时间通知系统的方式. ISR亦称为中断处理函数,是对中断的正确响应.可以使用任何ISR连接到任何没有被VxWorks使用的中断上.当关联 ...

  2. VxWorks 基本启动方式

    VxWorks 基本启动方式     按VxWorks内核的下载形式,VxWorks启动总体上分为两种方式:下载型和ROM 型.     @下载型启动方式:bootrom+VxWorks.此时boot ...

  3. VxWorks镜像简介

    VxWorks镜像可分为三类:   可加载型VxWorks镜像:存储在开发机上,运行在板上RAM中   基于ROM的VxWorks镜像:存储在板上ROM,运行在板上RAM中   ROM驻留的VxWor ...

  4. 【转】vxworks的default boot line说明

    boot程序的主要功能是引导vxworks 内核,所以boot程序需要知道vxworks的内核存放在何处,通过什么手段去获取.在vxworks缺省的boot程序里有一条内建的default boot ...

  5. 嵌入式实时操作系统VxWorks入门――开发环境构建[转]

    VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通 信.军事.航空.航天等高精尖技术及实时性 ...

  6. vxworks 开发环境搭建

    育儿 分类: 嵌入式开发 VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实操作系统 windriv vxwork时操作系统(RTOS),它以其良好的可靠性和卓越的实 ...

  7. 工控安全入门(六)——逆向角度看Vxworks

    上一篇文章中我们对于固件进行了简单的分析,这一篇我们将会补充一些Vxworks的知识,同时继续升入研究固件内容. 由于涉及到操作系统的内容,建议大家在阅读本篇前有一定操作系统知识的基础,或者是阅读我的 ...

  8. VxWorks环境搭建与学习

    搭建环境所需的所有资源: https://pan.baidu.com/s/1sUF2I_DBHs-86IUJ4Ykn2Q 提取码: t7sj 实时系统vxWorks - Shell命令 https:/ ...

  9. 第14章 Linux启动管理(2)_启动引导程序grub

    2. 启动引导程序grub 2.1 Grub配置文件 (1)grub中分区的表示 硬盘 分区 Linux设备文件名 Grub中设备文件名 第1块SCSI硬盘 第1个主分区 /dev/sda1 hd(0 ...

随机推荐

  1. Jmeter性能测试,新手上路篇

    1. JMeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静 ...

  2. 第一个 HTML5Plus 移动应用

    什么是 HTML5Plus 移动应用 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生 ...

  3. BZOJ 3944: Sum [杜教筛]

    3944: Sum 贴模板 总结见学习笔记(现在还没写23333) #include <iostream> #include <cstdio> #include <cst ...

  4. C语言实现数据结构中的堆创建,堆排序

    #include "stdio.h"#include "stdlib.h"void swap(int *a,int *b)//交换两个数{int t;t=*a; ...

  5. 发送邮件的小功能(.net core 版)

    前言: 使用.net core 开发有一段时间了,期间从.net core 2.0 preview1 到 preview2 又到core 1.1 现在2.0正式版出来了.又把项目升级至2.0了.目前正 ...

  6. WPF ”真正的“高仿QQ

    时常可以在各种论坛 博客 看到 各种所谓的 高仿QQ. 说实话 越看越想笑呢.(PS:纯粹的 抨击 那些 不追求 UI 完美主义者) 例如:       本次模仿 采用 C# WPF XAML , 总 ...

  7. python3图像识别库安装与使用

    pytesseract库的安装 因为用的win10,就直说windows上面的安装了.其实就是pip安装就完事了. $ pip install pytesseract 安装了这个还不算完,得安装Tes ...

  8. Node.js爬取豆瓣数据

    一直自以为自己vue还可以,一直自以为webpack还可以,今天在慕课逛node的时候,才发现,自己还差的很远.众所周知,vue-cli基于webpack,而webpack基于node,对node不了 ...

  9. 观察者模式—jdk自带源码分析

    一:观察者模式简介 二:jdk实现观察者模式的源码 三:实际例子 四:观察者模式的优点和不足 五:总结 一:观察者模式简介 有时又被称为发布(publish )-订阅(Subscribe)模式.模型- ...

  10. Math Jax开源数学编辑器的使用

    首先,这是一个开源免费,同时也可以支持扩展的软件. 使用API文档: 中文网站(http://mathjax-chinese-doc.readthedocs.io/en/latest/index.ht ...