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开发环境,所以可以有效地降低项目初期的开发成本,也可以为初学者提供一个接近于真实的模拟环境。
自己写的教程CF卡启动VxWorks系统
自己写的教程CF卡启动VxWorks系统X86平台下从CF卡启动vxWorks方法1.格式化CF卡在PC104工业计算机上,CF卡可被BIOS识别为硬盘,也可通过读卡器识别为移动设备。
使用USB CF卡读卡器,将其连接到到运行XP的计算机上,打开DiskGenius硬盘管理工具,可识别到该移动存储设备,如图1所示。
图1DiskGenius工具下识别移动存储设备选中移动存储设备(CF卡),图中标示为T1, 点击菜单栏的格式化,弹出格式化分区对话框,文件系统、簇大小按图中所示选择;卷标,用户随意定义,没有影响。
在此提醒:虽然在window7系统也可以格式化CF卡,但是经实验证明不可靠,最好用DiskGenius硬盘管理工具格式化CF卡。
2.为CF卡创建引导扇区(1)打开Vmvare软件,新建虚拟机,将制作好的DOS环境引导镜像文件(boot.flp)加载到软盘驱动器中,如下图2所示:图2(2)打开虚拟机电源,进入DOS环境,如下图3所示:图3此时换掉刚刚的软盘镜像boot.flp,替换为另一个软盘镜像文件(包含创建引导扇区命令),在设备状态那一栏,勾上“已连接”,勾掉“打开电源时连接”,如图4所示:图4此时进入DOS环境中,双击鼠标进入(退出,则按ctrl+alt),图中的A盘,就是我们刚刚换入的软盘镜像,键入dir命令,即可看到虚拟软盘A中的文件,其中就是我们用来为CF卡创建引导扇区的命令。
如图5所示:图5(3)将CF读卡器(带有CF)插入USB口,点击编辑虚拟机配置,进入下图中,通过添加硬件向导,选择一个物理硬盘,此时在“设备”下,应该选择PhysicalDrive1,而不是图中的PhysicalDrive0。
如下图6所示:图6(4)硬盘添加成功,C盘(即所插入的CF)就是合法的,然后执行vxsys c:命令,即可成功为CF卡创建引导扇区。
如下图7所示:图7至此,DOS环境下的相关操作已经完成,CF已经成功创建了引导扇区。
VxWorks系统中映像及其加载过程
A. 最少化的系统初始化BootRom的启动过程:文件romInit.s中的romInit()→文件bootInit.c中的romStart()→文件bootConfig.c中的[usrInit()→usrRoot()](其中usrInit()和usrRoot()函数还调用了其他很多初始化的函数)注意:与VxWorks image的区别在于一个BootRom调用bootConfig.c,而VxWorks调用usrConfig.c, bootConfig.c主要完成BootRom 映像的初始化,而usrConfig.c主要完成VxWorks映像的初始化。
图表4 BootRom的加载过程B. 用BootRom加载Loadable 映像的启动过程为:文件romInit.s中的romInit()→文件bootInit.c中的romStart()→文件sysALib.s中的sysInit()[初始化RAM]→文件usrConfig.c中的[usrInit()→usrRoot()](其中usrInit()和usrRoot()函数还调用了其他很多初始化的函数)图表5 BootRom加载Lodable 映像的过程Rom-Based image(基于ROM的VxWorks映像)前面说了这种类型映像不需要BootRom的支持,那么它(下面所说的驻留ROM的映像也是)融合了BootRom的引导功能,它在ROM中启动,然后把VxWorks 拷贝到RAM中去运行。
其加载和引导VxWorks映像的过程是:文件romInit.s中的romInit()→文件bootInit.c中的romStart()→文件usrConfig.c中的[usrInit()→usrRoot()](其中usrInit()和usrRoot()函数还调用了其他很多初始化的函数)图表6基于ROM的VxWorks映像的加载过程Rom_Resident image(驻留ROM的VxWorks映像)在ROM中启动,并在运行VxWorks。
VXWORKS入门
为了保证我的Tornado的纯净性,复制了一份C:\Tornado2.2\target\config\pcPentium_pm文件前重命名为Kontron_PM,
这是基于移动版的Pentium和处理器
1,网卡配置
根据PM板子上面的网络芯片为Intel82562系统的,同时根据
定任务或系统级断点设置、单步执行、异常处理。
内存、寄存器、变量的值通过菜单操作是无法实现的,需要在WindSh中执行
原语操作实现
5,驻留主机的目标服务器
目标服务器管理主机与目标机的通信,所有与目标机的交互工具
都通过目标服务器,它也管理主机上的目标机符号表,提供目
标模块的加载和卸载。
参数解释:
ata=0,0(0,0) 指定了使用第0个ata控制器和第0个驱动;
我们从硬盘或CF卡启动,应该是ata的设备,所以要改写成ata,
host 指定你的主机的名字,随便写拉;
/ata0/vxWorks 指定了VxWorks映象下载的完整路径,因为我们是从硬盘下载;
h=192.168.0.104 是宿主机的IP地址,查看你的网上邻居的本地连接,根据它填写;
Bootrom的生成
1,编译Bootrom
打开Tornado开发工具,在Build菜单下选择Build Boot ROM,选择BSP为Kontron_PM,
image类型为bootrom,工具为gnu,如图。点击OK,Bootrom就会编译。编译成功后,会在BSP目录下生产bootrom文件
objcopypentium -O binary --gap-fill=0 bootrom bootrom.sys
基于vxWorks的BSP启动过程实例分析
一.引言BSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序。
所谓初始化是指从系统上电复位开始直到wind kernel和usrRoot根任务启动的这段时间,系统的执行过程。
驱动程序就是一些包含I/O操作的子函数。
初始化包括:CPU Init、Board Init、System Init。
CPU Init初始化CPU的内部寄存器。
Board Init初始化智能I/O的寄存器,将device打通。
System Init为系统的运行准备数据结构,进行数据初始化。
驱动程序的特点是不能自动执行,只能被动调用。
调用可以有三种方式:任务直接调用、任务调用System Call、任务调用服务。
所以驱动程序可以抽象为三个层次:常规操作、与VxWorks的接口、与Component的接口。
常规操作是设备的固有操作逻辑,有两层含义:I/O编址微观上表现为CPU操作device的寄存器、宏观上表现为具体操作的含义。
驱动程序与VxWorks的接口、驱动程序与Component的接口有三层含义:I/O管理、操作类型规整及参数规整。
二、MPC8260 ADS Board BSP 工作流程系统在上电之后,第一个执行的为romInit模块代码,该段代码单独存为一个文件:romInit.s。
romInit.s是一个汇编级的程序,主要完成系统最基本的硬件初始化工作。
RomInit模块分析:这个模块为VxWorks Boot Rom的入口代码,程序的入口点romInit处是上电后首先执行的代码,他设置BOOT_COLD参数,该参数将被传送到romStart( )程序。
当程序sysToMonitor()运行时,它会跳到romInit处后8字节的地方开始执行,来实现一次“热启动”。
下面为冷启动与热启动的具体实现:_romInit:romInit:bl cold /* jump to the cold boot initialization */nop /* 到这条指令结束,两条指令共占用了8个字节*/bl start /* jump to the warm boot initialization */cold:……start:……下面我们来看一看在cold段里,程序作了那些工作:……bl start /* jump to the warm boot initialization */cold:li r3, BOOT_COLD /* set cold boot as start type *//*根据前面的注释,BOOT_COLD将会被传送到romStart( )程序中去*/addis r4,0,0x0F01 /* R4 holds the IMMR base address */addis r5,0,0x0000 /* Clear out all mask bits */ori r5,r5,0x0836stw r5,0x0104(r4) /* option register for bank 0 */isync /* synchronize *//* 这段代码的目的是初始化寄存器Option register bank 0,将0x0836写入该寄存器*/ /** initialize the IMMR register before any non-core registers* modification. The default IMMR base address was 0x0F000000,* as originally programmed in the Hard Reset Configuration Word.*/lis r4, HIADJ (INTERNAL_MEM_MAP_ADDR)addi r4, r4, LO (INTERNAL_MEM_MAP_ADDR)addis r8,0,0x0F01 /* IMMR was at 0x0f000000 */stw r4,0x01a8 (r8) /* IMMR now at 0x04700000 */isync/*这段代码的目的是修改寄存器IMMR的值,重新设定内部内存的基址,有了这段代码,我们在修改该基址的时候,就可以直接通过修改INTERNAL_MEM_MAP_ADDR的值就可以完成,无需修改这段代码。
vxWorks在虚拟机上运行的说明
如何在虚拟机运行vxWorks1.什么是bootrombootrom相当于linux系统中常用的grub工具。
2.生成bootrombootrom由BSP生成。
拿到BSP之后,一般我们只需要修改config.h文件,以修改bootrom 启动后从哪里加载vxworks镜像。
在config.h文件中,找到定义宏DEFAULT_BOOT_LINE的地方,根据目标板CPU类型选择需要修改哪一个宏。
如,我们在虚拟机上运行vxWorks,而虚拟机的CPU是PENTIUM4系列,所以修改PENTIUM4下面的DEFAULT_BOOT_LINE。
#define DEFAULT_BOOT_LINE \"lnPci(0,0)host:vxWorks h=192.168.100.1e=192.168.100.50:ffffff00 u=vxworks pw=vxworks tn=vmware"以上表示,bootrom启动后,镜像是从以太网卡的第0网卡的第0个端口加载,本地IP 地址为192.168.100.50,由e=192.168.100.50:ffffff00所指定,注意后面的ffffff00是子网掩网;尝试从192.168.100.1主机的FTP获取vxWorks镜像,使用的FTP用户名为vxworks,即u=vxworks所指定的,密码由pw=vxworks指定。
配置完成后,双击桌面的快捷方式“VxWorks_-_Pentium”,这个快捷方式其实就是启动了一个cmd(以后不特殊说明,所有的cmd均表示双击桌面的快捷方式“VxWorks_-_Pentium”启动的cmd),只是预先设置了很多环境变量。
进入BSP目录,在命令行输入make bootrom.bin,即可在BSP目录下生成bootrom.bin,也就是我们需要的bootrom。
3.使用bootrom3.1.使用虚拟软驱引导创建虚拟机(注意操作系统是other)。
VxWorks启动过程详细描述
VxWorks 启动过程描述及主要宏开关含义1 三种不同的VxWorks 映象比较VxWorks 是一种灵活的、可裁剪的嵌入式实时操作系统。
用户可以根据需要创建自己的VxWorks 映象,由它来引导目标系统,而后下载并运行应用程序。
根据应用场合的不同,VxWorks 映象可分为三类:可加载的VxWorks 映象、基于ROM 的VxWorks 映象和驻留ROM 的VxWorks 映象。
1.1 可加载的VxWorks 映象这是一种运行于RAM 的VxWorks 映象。
它不包含搬移程序,需要借助于一些外部的程序如bootRom 才能加载到RAM 的低端RAM_LOW_ADRS 地址处。
这是缺省的开发映象。
在开发的初期阶段,用户可以根据需要添加或删除一些VxWorks 组件,生成自己的可加载的VxWorks 映象,存放在开发主机的某个目录下。
目标板上电后,由烧结在BOOT 中的起始引导程序(BootStrap Programs)将BOOT 中的ROM 引导程序(ROM Boot Programs )拷贝到RAM 的高端地址RAM_HIGH_ADRS 处,并跳转至该地址执行ROM 引导程序,配置好所选的加载方式(缺省为网络方式),将指定的主机目录下的可加载的VxWorks 映象下载到目标板的RAM 地址RAM_LOW_ADRS 处,并跳转到此处执行。
如图1所示。
这种映象的优点是生成的VxWorks 映象可以存放在开发主机PC 机上,不用烧到BOOT 中,节省了BOOT 容量,也便于随时修改不同的VxWorks 映象,适用于调试的初期阶段。
不足之处是需要在主机上维护一个正确的VxWorks映象,对于调试硬件无关的上层应用程图1、可加载的VxWorks 映象序显得不是很方便。
在Tornado工作台的Build窗口中,选择Rules属性页中的VxWorks即可生成可加载的VxWorks映象。
1.2 基于ROM的VxWorks映象这是一种运行于RAM中,但起初存放于ROM中的VxWorks映象。
在虚拟机上运行vxWorks
在虚拟机上运⾏vxWorksVxworks是⼀个嵌⼊式系统,主要运⾏在arm、ppc、mips等嵌⼊式处理器上,它同样可以运⾏在X86处理器上。
风河公司开发的tornado开发环境就包括了pentium版本,并且发布了相应的bsp。
因此我们可在vmware虚拟机上运⾏vxworks,利⽤虚拟机的功能,我们不需要额外的计算机硬件就可以开始我们的实验。
系统引导计算机系统上电后,⾸先需要执⾏引导程序,然后加载操作系统。
嵌⼊式系统中⼀般是将引导程序(称之为bootrom)固化在ROM芯⽚(也称为bootrom,指的是物理硬件)中。
系统上电后执⾏ROM中的引导程序,将操作系统由flash(或硬盘)加载到内存。
对于PC⽽⾔,系统上电后运⾏BIOS程序,之后将软盘或则硬盘上的引导扇区载⼊内存执⾏引导过程,引导程序再将操作系统加载到内存中启动。
vmware的虚拟硬盘开始时没有安装引导程序,因此⽆法从硬盘引导。
因此我们需要制作⼀个引导软盘来引导系统加载vxworks。
我们的第⼀个实验就是编译引导程序镜像,制作引导盘。
制作引导盘⾸先要在你的PC上Tornado 2.2 for pcPentium开发环境。
另外需要安装pcPentium的BSP 包,这个软件包可以到风河公司的⽹站免费下载。
制作引导盘当然还需要⼀张软盘,但是⽬前的PC基本都不使⽤软盘软驱了(如果你的古董机还有软驱的话,那么恭喜你,你只需要⼀张软盘就搞定了)。
好在vmware可以直接使⽤软盘镜像并且可以直接创建软盘镜像,因此我们在vmware中安装⼀个虚拟的windowsxp系统,以便在虚拟的windowsXP系统中将软盘镜像格式化,并制作启动软盘。
当然也可以使⽤虚拟软驱RamDiskNT在主机上使⽤软盘镜像。
Ok,准备⼯作做好了,我们开始编译bootrom。
你可以通过tornado集成开发环境的菜单命令build boot rom。
弹出build boot rom对话框,我们选择pcpentium BSP、编译bootrom、⼯具使⽤gnu编译完成后可以在$WIND_BASE/target/config/pcPentium⽬录下找到编译出来的bootrom⽂件。
VxWorks及BSP启动流程与顺序
目录1vxworks映像类型 (1)1.1可加载的映像类型(vxwoks) (1)2vxworks映像启动顺序 (1)2.1可加载型vxworks映像启动顺序 (2)2.2基于ROM的vxworks映像启动顺序 (2)2.3基于ROM驻留型vxworks映像启动顺序 (3)3BSP基础知识 (3)3.1BSP的定义 (3)3.2BSP的功能 (3)3.3 BSP的组成 (4)4BSP的启动 (4)4.1 BSP的启动流程 (4)4.2.1romInit.s:romInit()函数 (5)4.2.2bootInit.c:romStart()函数 (14)4.2.3bootConfig.c分析 (24)4.2.4sysLib.s:sysInit()函数 (26)4.2.5usrconfig.c:usrInit()函数 (27)4.2.6usrconfig.c:usrRoot()函数 (28)5总结 (31)VxWorks及BSP启动流程与顺序———李守轩摘要:本文首先介绍vxworks映像的类型及各类型vxworks映像的启动顺序;然后介绍BSP的启动流程与初始化顺序。
关键词:vxworks映像;BSP启动;代码分析1 vxworks映像类型对于vxworks映像的启动情况,从根本上看,在初始化和装载vxworks映像的过程中,处理器所执行的步骤在逻辑上是一样的。
对于有些处理器可能需要增加一些额外的步骤,而另一些处理器可能会省略掉某些步骤。
当构造vxworks映像时,根据需要可以构造不同类型的映像,系统把这些映像划分成以下三种类型。
1.1可加载的映像类型(vxwoks)可加载型映像的执行需要通过引导代码把它装载到目标机RAM中,然后才开始执行。
而引导代码分为两种:(1)引导代码固化在ROM或FLASH中;(2)引导代码是一个独立的vxworks应用;引导代码通常也是一种vxworks映像,也被称为引导映像。
Vxworks的引导过程
VxWorks的引导过程此文为学习记录,非正式文档相关术语说明如下:Boot: 引导或加载Boot ROM : 用来存放boot程序的ROM, boot程序首先对硬件作必要的基本的始化后搬运boot程序到RAM空间。
然后启动加载程序通过网口、串口或者扩展FLASH加载VxWorks系统。
Boot ROM程序可看作是一个独立的系统,具有自加载功能和通过串口、网口或扩展FLASH加载VxWorks系统的功能。
RAM_HIGH_ADRS:拷贝boot ROM映像的目标地址RAM_LOW_ADRS:VxWorks映像的起始地址:1.1启动过程以下启动过程是通过串口或者网口加载VxWorks系统的过程,并不代表所有的加载过程。
1.上电复位后第一条被执行的指令位置0xfff00100(针对MPC8240)上电复位后CPU从0xfff00100取指令开始执行.这个地址位于boot ROM空间内。
1)完成启动所必要的初始化设置状态字并创建一个哑堆栈(dummy stack)2)初始化存储器接口2.跳到C程序的入口地址第一个被执行的C程序是romStart().程序首先拷贝boot ROM内的部分boot程序到RAM空间.(我认为这以后程序都在RAM中运行)。
然后根据哑堆栈中的参数决定是否清零内存RAM(如是冷启动(cold start)则清零),再把ROM段的剩余部分拷贝到RAM 的RAM_HIGH_ADRS地址(如果ROM代码是压缩的,还要解压)。
3.处理器跳到RAM的入口地址 RAM_HIGH_ADRS(bootConfig.c)。
在这里执行的程序是usrInit();使cache无效,清零bss段,初始化向量表,进行板级初始化。
4.启动多任务内核VxWorks的boot ROM本身就是一个独立的应用。
到此步为止可看作是boot ROM内的这个独立系统已经被加载且运行起来了。
5.加载VxWorks系统通过串口、网口或者从扩展FLASH中加载系统,VxWorks被加载到RAM的地端地址,起始地址为RAM_LOW_ADRS.6.应用程序加载各步所调用函数先后顺序如下:上电复位——》romInit()——》romStart()——》usr Init()——》initVectBaseSet()——》sysHwInit()——》usrKernelInit()——》kernelInit ()——》usrRoot()(启动串口或者网口加载程序)——》(完成对VxWorks 系统的加载) ——》sysInit()——》usrInit()——》initVectBaseSet()——》sysHwInit()——》usrKernelInit()——》kernelInit()——》usrRoot()(和前一个usrRoot()不一样,这里启动用户程序)romInit():这是上电复位后首先执行的程序(a)设置哑堆栈,初始化CPU内的寄存器,无效Cache,禁止中断;(b)保存启动类型,启动类型分为冷启动和热启动(c)硬件初始化,主要是初始化存储器接口。
VxWork BSP 和启动过程
VxWork BSP 和启动过程开发BSP主要的两点:1. 系统image的生成,image的种类,i mage的download下载过程,系统的启动顺序和过程,调试环境的配置及远端调试的方式和方法,相应BSP设置文件的修改(网络,串口..),BSP各文件的组成和作用.2. 要对系统底层驱动清楚,也就是对CPU及相关的硬件有所了解.主要是32微处理器(上电启动过程, download i mage的方式方法,读写ROM,地址空间分配,MMU,寄存器,中断定义,..).参照硬件资料,多读一些源码会有所帮助.Tornado 2 开发调试环境协议框图主机开发(Host De v e lopment Sy stem)目标机(T arget Sy stem)WDB协议通信<==========>两个主要两个协议WTX协议(Wind River Tool eXc hange): 用于开发机内部Tornado工具与T arget Server之间通信.WDB协议(Wind DeBug): 用于主机Target Server与目标机之间的通信.一.基本概念BSP定义:Provides VxWorks with primary interface to hardware environment.作用:∙在通电后,初始化硬件.∙支持V x W o r k s和硬件驱动通信.∙使hardware-dependent 和hardware-independent在VxWor k s系统中很好的结合.主要BSP主要文件目录的组成及主要文件的作用:∙目录target/config/All:这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件.configAll.h:缺省定义了所有VxWor k s的设置.如果不用缺省的设置,可在BSP目录下的config.h文件中用#define或#undef方式来更改设置.bootInit.c:在romInit.s后,完成Boot ROM的第二步初始化.程序从romInit.s中的romInit()跳到这个文件中的romStart().来执行必要的解压和ROM image的放置. bootConfig.c:完成Boot ROM image的初始化和控制.usrConfig.c: Vx Work s image的初始化代码.∙目录target/config/comps/src:涉及系统核心的components,主要由target/config/All中usrConfig.c中函数调用∙目录target/config/bspname:包含系统或硬件相关的BSP文件.Makefile一些命令行控制images的生成,参见BSP设置部分及生成下载READMEBSP发布纪录,版本,总的文档config.h包括所有涉及CPU主板的设置及定义(includes,defi nations),参见BSP设置文件及生成下载configNet.h网络驱动的主要设置文件,主要对END驱动设置.romInit.s汇编语言文件,是Vx Work s Boot ROM和ROM based image的入口,参见系统启动部分sysALib.s汇编语言文件,程序员可以把自己的汇编函数放在这个文件里,在上层调用.VxWor k s image的入口点_s y s Init在这个文件里,是在RAM中执行的第一个函数. sysLib.c包含一些系统相关的函数例程,提供了一个board-level的接口,VxWorks和应用程序可以以system-indepent的方式生成.这个文件还能包含目录target/config/comps/src的驱动.sysScsi.c可选文件用于Scsi设备设置和初始化.sysSerial.c可选文件用于所有的串口设置和初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代码VxWorks运行在目标机上,完整的,连结后的Vx Wor k s二进制文件.VxWorks.sym完全的,连结后带有符号表的Vx Work s二进制文件VxWorks.st完全的,连结后,standalone,带有符号表的VxWor k s二进制文件∙BSP用"make"来编译连接生成(Created),而不是用Tornado的工具.∙BSP和应用程序都可以在"make"或"tornade"上开发(developed)∙BSP被设置包括以下驱动:中断控制interrupt controller,计时器timer(sys/aux),串口UART(serial),显示屏LCD,键盘Keyboard(opt),触摸屏touch-screen(opt).前面三个是BSP的主要部分.∙BSP默认的download VxWorks RAM image方式是从ethernet.∙串口电缆需要用来和开发板(COM1)通信,通过协议WDB.VxWorks Image的种类:∙Loadable images.∙R O M-b ased images---compressed/uncompressed.∙R O M-Resident images.ROM-resident image 对一些系统内存RAM资源较少的情况下,为了节省资源,只拷贝image中的数据部分(data segment)到内存RAM,留下程序部分(text segment)在ROM中执行。
- 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. 初始化类库: