VxWorks引导程序启动详细过程
VxWorks启动过程详解

VxWorks启动过程详解vxworks有三种映像:VxWorks Image的文件类型有三种- Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM- ROM-based Images(压缩/没有压缩):即将Image直接烧入ROM,运行时将Image拷入RAM中运行。
-ROM-Resident Images:Image的指令部分驻留在ROM中运行,仅将数据段部分拷入RAM。
注意这里说的三种映像都是包含真正操作系统VxWorks的映像,其中后两种可以直接启动并运行起来,但是第一种不行,它必须借助另一个叫做Boot Image的映像(可以在Torn ado 中的build->build boot rom中生成)才能运行起来,也就是利用Boot Image引导起来然后通过网口或串口下载真正包含VxWorks的Loadable Image,然后才能运行起来。
也就是说Boot Image是和Loadable Image 结合使用的。
现在看来一共有四种映像文件,让我们看看它们的组成吧:-Boot Image:包含一段叫做BootStrap Programs的程序+一段ROM BOOT Program程序。
-Loadable Images:有操作系统VxWorks和应用组成的映像。
-ROM-based Images(压缩/没有压缩):包含一段叫做B ootStrap Programs的程序+ Loadable Images(即有操作系统VxWorks和应用组成的映像)-ROM-Resident Images:同上通过上面我们可以看出,ROM-based Images,ROM-Resid ent Images,Boot Image三种映像都包含一段叫做BootStrap Programs的程序,它具有启动功能,可以把ROM中的代码段和数据段拷贝到RAM中;下面让我们看看三种VxWorks的启动过程:Boot Image +Loadable Images:我们说过Loadable Images是依靠Boot Image加载启动的,首先有Boot Image中的程序BootStrap Programs把Boo t Program程序加载到RAM中的RAM_HIGH_ADRS处,然后控制权交给Boot Program,由Boot Program负责一系列简单的硬件初始化(网口,串口等),开始下载Loadable Images(即包含应用的VxWorks操作系统)到RAM_LOW_ADRS,然后控制权交给VxWorks操作系统开始执行。
Vxworks BSP开发流程

Vxworks BSP开发1.板级支持包的介绍2.VxWorks映象及启动顺序3.VxWorks预内核初始化4.BSP的配置5.BSP的开发6.VxWorks下设备驱动程序概述板级支持包的介绍一.板级支持包简述在VxWorks系统中,对BSP的简单描述为:介于底层硬件环境和VxWorks之间的一个软件接口,它的主要功能是在系统加电后初始化目标机硬件、初始化操作系统、提供部分硬件的驱动程序。
具体功能包括:(1)初始化。
所谓初始化就是指从系统上电复位开始,到VxWorks开始初始化用户应用(即系统执行到usrAppInit函数处)的一段时间内系统所执行的过程。
这个过程主要包括三个部分的工作:·CPU初始化。
初始化CPU的内部寄存器。
·目标机初始化。
初始化控制芯片的寄存器,I/O设备的寄存器,为整个软件系统提供底层硬件环境的支持。
·系统资源初始化。
为操作系统及系统的正常运行做准备,进行资源初始化,如空间分配等等。
(2)使VxWorks能够访问硬件驱动程序。
这主要是指VxWorks包含必要的设备驱动程序和相关设备的初始化。
(3)在VxWorks系统中,集成了与硬件相关的软件和部分与硬件无关的软件。
二.板级支持包与VxWorks从上面的图中,我们可以看到,BSP不是设备驱动程序,因为设备驱动程序可以访问硬件设备,同时,相同设备的驱动程序可以不作修改的从一个环境移植到另外一个环境当中去,而BSP只能在特定的环境下面运行。
简单地说,BSP开发人员要完成两个方面的工作:(1)完全支持BSP管理设备(2)通用设备驱动程序的集成工作三.BSP的组成BSP包含的程序是提供VxWorks访问目标机硬件环境的主要接口。
BSP主要由下面几类文件组成。
1.源文件主要是由C语言编写的代码所组成的文件,也有一小部分由汇编语言编写而成。
2.头文件包含针对CPU板的硬件定义以及内存定位定义的文件。
3.Make file文件控制构造所有类型映象的文件4.派生文件由其他文件衍生而成的文件。
VxWorks内核映像及BSP启动流程

函数。
基于处理器的特殊要求,
函数实现的开始处放置一个系统异常表。
该文件完全使用汇编代码编写,主要功能是完成平台的初始化(控制器初始化、屏蔽中断系统等),调用romInit函数。
bootInit.c文件中,且用C语言编写。
C语言程序,该函数被romInit 函数调用,他的主要功能是将代码从ROM复制到系统RAM 中。
对于被压缩的映像文件,在复制过程中,还要解压压缩
映像执行必要的代码重定位、解压和进行判断:如果接收到的启动命令是“
保存在line里,如果不是相应的命令也仍然从超级终端接收,并将此值保存在line数组中,并从这个数组中取出先前保存的值,根据这个值进行不同的操作。
当判断接收到的值为“@”
使目标机通过网络端口从上位机中加载
当判断接收到的值为“O”或“
本地文件系统加载VxWorks内核映像;当判断接收到的值为“l”或“L”时,则调用bootload
在bootload函数执行过程中,将
图5 BSP的启动流程图。
vxworks系统的bsp概念及启动过程

VxWorks 系统的BSP 概念及启动过程乔从连(船舶重工集团公司723所,扬州225001)摘要:VxWorks 作为一个高性能的嵌入式实时操作系统,已经得到了广泛的应用。
介绍了实时操作系统VxWorks 的BSP 的概念及组成,详细分析了VxWorks 系统的初始化流程和启动过程。
关键词:板级支持包;初始化;启动过程中图分类号:TP316.89 文献标识码:B 文章编号:CN3221413(2005)0120061204Concept and Starting Procedure of VxWorks System BSPQ IAO Cong 2lian(The 723Institute of CSIC ,Yangzhou 225001,China )Abstract :As a high 2performance embedded real 2time operating system ,VxWorks has been already applied widely.This paper introduces t he concept and component of VxWorks BSP ,analyses t he initialization flow and starting p rocedure of VxWorks system in detail.K eyw ords :board support package ;initialization ;starting p rocedure0 引 言板级支持包(board support package ,BSP )是介于硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好地运行于硬件。
在使用嵌入式系统VxWorks 时,有时需要根据硬件平台移植BSP 或者对某一配件的驱动进行开发修改。
VxWorks引导启动过程

VxWorks引导启动过程一.引导过程1.bootstrap/bootloader/bootrombootstrap是固化在CPU的ROM中的一小段指令系列,它是最初级的引导,旨在初始化CPU、时钟、堆栈,目标是让CPU正常运作起来。
引导加载程序(bootloader)是系统上电后运行的第一段软件代码。
广义的bootloader可以认为是BootstrapProgram+Boot Image,不过一般就是指Boot Image。
Boot Image的地位和作用可类比PC中位于BIOS固件程序(firmware)+硬盘MBR中的OS BootLoader (比如LILO和GRUB 等),它完成系统从上电后的硬件检测和资源分配,并将内核映象加载到RAM中,然后跳转到内核的入口点去运行启动操作系统。
bootrom通常是用来存储BootLoader的ROM/FLASH芯片,在VxWorks文档中的bootrom 区是指Boot Image存放的位置。
bootrom 完成VxWorks启动前的基本引导工作,如最简初始化硬件,下载映象文件并解压到RAM中等操作。
2.引导流程CPU从没有电到上电状态,经过自复位的过程后,指令指针指向一个固定的地址。
基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH 等)被映射到这个预先安排的地址上。
因此,在系统上电后,CPU将首先执行这个地址所包含的指令,即Boot Loader程序。
无论如何,CPU开始执行一段指令了,这段指令的作用首先是将可执行程序所需的最小环境搭建起来。
这个初始化过程包括初始化CPU、内存控制器及各种必需输入/输出设备、磁盘控制器等等。
以X86体系结构来说,需要初始化CPU、北桥、南桥,常说的BIOS就是这样一段初始化程序。
在那些没有BIOS的架构中,这一工作由系统的bootrom完成。
建立了最小可运行系统,操作系统的内核就可以运行了。
工控机vxworks说明文档

VxWorks CF卡及网络启动方法:CF卡格式化后分区,分出小于2G的空间,然后格式化文件系统选择fat16,勾选建立dos系统。
将、msdos.sys、io.sys三个文件拷入分区.新建vxworks boot loader工程(为了生成boorom),选好bsp后修改bsp中的config.h文件,修改方法见附件《vxworks的default boot line说明》。
clean project,然后编译工程。
生成bootrom.bin文件,将后缀改成sys,即得到bootrom.sys文件拷入cf卡。
将目标程序工程得到的vxworks文件拷入即可。
第一次启动时输C:lock把引导写入扇区VXWORKS电脑模拟单步调试方法建立downloadble工程,调试按钮里面选kerneltask,entrypoint里面填上入口函数下入控创机器建立的工程叫vxworks image project机器模拟调试建立工程叫downloadble kernel module project打开文件:电脑模拟用 fp= fopen("host:D:/juzhensuanfa/shishi/data.txt","r");机器用fp= fopen("/ata0a/data.txt","r");Dos命令下arp –a查看网卡地址。
工控机vxworks下E:\WindRiver64-wrs\vxworks-6.4\target\config,passauold文件夹的BSP时候网卡地址:00-25-a8-00-09-95data.txt文档写完矩阵以后最后一行要是回车注意组播地址的问题,第一字节最后一位是1stime.c文件里面把win32改成vxworks,有个取毫秒时间的被改了成time(NULL)ms_asn1_to_local在mms_vvar.h中有声明887行VOID readtxtcfg()读txt 文件配置电网拓扑矩阵,此方法不灵活,以后后台系统成熟后改成通过后台图形界面自动搜索拓扑生成array矩阵。
VxWorks操作指南

VxWorks操作指南项目\子项目名称:3G BTS平台分系统拟制部门:科技发展部拟制日期:2000.2.28目录1. 实时嵌入式操作系统V X W ORKS (3)2.V X W ORKS和T ORNADO (4)3.T ORNADO的配置 (5)3.1 主机的设置:Tornado Register (5)3.2 目标的设置 (6)4.T ORNADO开发工具的使用介绍 (7)4.1 Editor (7)4.2 Projects(Tornado 2.0版本特有) (7)4.3 Shell (8)4.4 Debugger (9)4.5 Browser (10)4.6 GNU工具 (10)4.7 Target Server (11)5.V X W ORKS的启动过程及相关例程 (12)5.1 VxWorks启动的一般原理 (12)5.2 MSDOS的启动过程 (13)6.V X W ORKS的多任务管理 (14)6.1多任务 (14)6.2任务状态转换 (14)6.3 wind任务的排序(scheduling)机制 (14)6.4 任务控制 (15)6.5 任务的删除和删除安全 (15)6.6 任务异常处理 (16)6.7 VxWorks系统任务 (16)7任务间通信(原语消息的传递) (16)7.1 概述 (16)7.2 互斥 (17)7.3 同步 (18)7.4 删除安全 (19)7.5 中断和任务间的通信 (19)8应用程序的加载 (19)1.实时嵌入式操作系统VxWorksVxWorks操作系统是一种应用广泛的嵌入式实时多任务操作系统。
其内核WIND具有强占式优先级排序的多任务处理能力,提供了任务间同步和通信的机制,支持中断处理、看门狗定时器和内存管理功能。
VxWorks的开发环境是Tornado,应用程序的开发语言是ANSI C和C++。
VxWorks的开发体系是代理-服务器(Agent-Server)结构体系,即驻留在主机(Host)的开发工具Tornado通过目标服务器(Target Server)指示目标上的目标代理(Target Agent)进行目标板上的操作并将结果返回给主机。
如何在VxWorks启动时自动运行自己的程序

如何在vxworks系统启动后自动执行用户程序本文给出了一个简单的例子,在vxworks启动完成后,自动启动用户程序demo()和welcome(),在屏幕上打印出欢迎信息。
运行效果如下:具体实现过程如下:1)在虚拟机VM上安装vxWorks,至于如何安装,具体可参考下面的转载文章。
×××××××××××××××××××××××××××××××××××××××【转载】在VMWare上安装VxWorks操作系统wabcon2003-12-27概述VxWorks是风河公司(Windriver)开发的实时操作系统之一,以其优秀的可靠性、实时性及内核的可裁减性,被广泛应用于通信、军事、航天、航空等关键行业领域。
VxWorks可以适用于多种硬件体系结构,其中也包括大家日常都可以接触到的PC体系结构。
VMWare 是被广泛应用虚拟PC系统软件,他可以提供基于Inetl CPU的虚拟PC系统环境,包括CPU、BIOS、硬盘和其他外围硬件设备,使您可以在一台PC机上同时运行两个操作系统。
VMWare对外围硬件设备的模拟,屏蔽了不同设备型号的差异,在硬件环境发生改变时(硬件型号变化),对于运行于VMWare上的操作系统影响很小(无须安装新的驱动程序)。
本文以下部分将介绍如何在VMWare软件提供的虚拟环境上安装VxWorks操作系统。
由于可以在同一台PC机上建立完整VxWorks开发环境,所以可以有效地降低项目初期的开发成本,也可以为初学者提供一个接近于真实的模拟环境。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
|
kernelInit ((FUNCPTR) usrRoot,,,,,, )
|
|
|
|
|
|
sysLib.c
负责在内核激活前,将硬件置于静止状态: 1. 安装中断向量 ISR:
S3C2410ExcVecSet(); 2. 安装 IRQ/SVC 的堆栈设置程序: _func_armIntStackSplit = sysIntStackSplit; 3. 复制命令行: strncpy(sysBootLine,DEFAULT_BOOT_LIN,strl
|
| bootConfig.c ->usrRoot (char *pMemPoolStart, unsigned memPoolSize):
|
|
用于完成系统最后的初始化以及所有硬件的初始化:
|
1. 初始化系统内存池:
|
memInit (pMemPoolStart, memPoolSize);
|
2. 安装始终中断 ISR,设置始终频率,使能时钟:
|
bootCmdTaskStackSize, (FUNCPTR) bootCmdLoop,
|
0,0,0,0,0,0,0,0,0,0);
|
| bootConfig.c -> void bootCmdLoop (void): 待续… |
|
|
|
||||源自||||
vxBootFile[0] = NULL;
|
6. 打开 Target Server Console:/* for Target Server Console */
|
consoleFd = open ("/vio/0", O_RDWR, 0);
|
7. 设置标准 I/O 输入输出:
|
ioGlobalStdSet (STD_IN, consoleFd);
VxWorks 引导程序启动详细过程(bootrom_uncmp.bin)
系统上电
=====
| romInit.s -> romInit() : 初始化 CPU;配置处理器的工作模式;配置存储器;关闭中断和看门狗;清除 Cache; 设置堆栈指针;特定
| |
于 CPU 的其他初始化;配置启动参数(冷启动还是热启动)跳到 romStart(int startType).
|
sysClkConnect((FUNCPTR) usrClock, 0);/、connect clock interrupt routine
|
sysClkRateSet (SYS_CLK_RATE);
/* set system clock rate */
|
sysClkEnable ();
/* start it */
classLibInit (); 2. 初始化任务变量:
taskLibInit (); 3. 配置内核任务队列:
qInit (&readyQHead, Q_PRI_LIST); qInit (&activeQHead, Q_FIFO); qInit (&tickQHead, Q_PRI_LIST); workQInit ();
|
3. 初始化 IOS:
|
selectInit (NUM_FILES);
|
iosInit (NUM_DRIVERS, NUM_FILES, "/null");
|
consoleFd = NONE;
|
4. 初始化串口设备,安装串口设备驱动程序,并启动串口设备:
|
/*
*/
|
5. 初始化 WDB:
|
wdbConfig(); /* configure and initialize the WDB agent */
|
态。引导阶段已经实现了( 2), 一 次 该 函 数
|
功能就是使设备处于静止状态。
|
0. 用户定义 BSP 初始化
|
SYS_HW_INIT_0 ();(sysHwInit0())无
|
1. 初始化 Cache;
|
cacheLibInit()
|
2. 清零 BBS;
|
bzero (edata, end - edata);
|
ioGlobalStdSet (STD_OUT, consoleFd);
|
ioGlobalStdSet (STD_ERR, consoleFd);
|
8. 安装管道驱动程序:
|
pipeDrv ();
|
9. 初始化各种可得设备:
|
/*
*/
|
10.启动 bootCmdLoop 任务:
|
taskSpawn ("tBoot", bootCmdTaskPriority, bootCmdTaskOptions,
|
|bootConfig.c ->usrInit(int startType): 用于用于完成最后的 CPU 初始化部分,并且
|
关闭系统的其他硬件设备,为内核的初始化
|
和启动准备一个单任务的环境(无中断,无
|
任 务 )。完 成 内 核 激 活 的 准 备 工 作 :(1)设备
|
处 于 静 止 状 态 ;( 2)处理器中断处于禁止状
|
|bootInit.c ->romStart(int startType) : | | |
将 Flash 中的启动代码拷贝到 RAM 中,最后调用 ROM 或 RAM 中的 usrInit();拷贝的内容与 生成的内核类型有关,但通常都需将数据段拷贝到 RAM 中。如果是压缩格式映象,除了拷贝还 要进行解压。最后调用 sysALibs.s 中的 sysInit(int startType).
|
3. 暗黄安装中断向量;
|
excVecInit ( );
|
4. 置硬件静止状态;
|
sysHwInit ();
|
5. 配置 Wind 内核,初始化任务管理和任务
|
队列
|
usrKernelInit ();
|
6. 使能 Cache;
|
cacheEnable(INSTRUCTION_CACHE);
|
7. 激活跟任务;
en(DEFAULT_BOOT_LINE)+1); 4. 初始化串口设备,数据结构和禁止串口中断:
-> sysHwInit(): sysSerialHwInit ();
usrKernel.c -> usrKernelInit(void):
配置 Wind 内核,初始化任务管理和任务队列: 1. 初始化类库: