【www.gbppp.com--经典美文】
嵌入式实时操作系统VxWorks入门 VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。VxWorks原先对中国区禁止销售,自解禁以来,在我们的军事、通信、工业控制等领域得到了非常广泛的应用。
嵌入式系统的调试方法一般为通过PC(宿主机)上的集成开发环境交叉编译针对特定电路板(目标机)的程序,然后将程序通过目标板的 JTAG、串口或网口等途径下载到目标板上运行。如图1。因此,为了构造一个嵌入式系统的学习环境,拥有一块包含CPU、存储器及I/O电路(构造计算机系统)的目标电路板往往是必要的。虽然许多集成开发环境附带模拟软件,但仅限于指令集的模拟,均无法模拟物理的目标机硬件平台,因而在其上只能进行应用程序的象征性模拟开发。但是,并非所有人都能拥有一块物理的电路板。在这种情况下,我们如何构造一个模拟的开发环境,其学习效果就如同拥有完全真实的电路板一样呢? 本文试图解答此问题,主体内容包括四个方面:
1. 利用VMware等软件模拟真实的目标机;
2. 构建VMware虚拟PC上VxWorks BSP,建立Bootrom和OS映像;
3. 修改Tornado相关设置,连接宿主机与目标机,建立调试通道;
4. 写一个简单的应用程序并下载到目标系统运行。
图1 嵌入式系统的调试
本章工作的最终目标为:
(1)VxWorks在VMware启动成功并顺利运行,如图2;
图2 在VMware中运行的VxWorks
(2)可在Tornado上针对目标板编译程序并进行调试,如图3。
图3 与目标机建立调试通道的Tornado
1. 模拟目标机
PC也具有目标机的所有特点,实际上,我们可以把PC作为嵌入式系统的目标机,从而构造如图4所示的开发模型:
图4 PC作为目标机
很遗憾,这种方法实际上非常麻烦,同时开动两台PC进行调试将使你和你的室友饱受折磨,既然他如此地热切于游戏和上网。因此,我们可以借助VMware来在本机上虚拟出另一PC。
VMware的确是天才的作品!在同一PC上,利用VMware几乎可以安装所有的操作系统,而且操作系统之间的切换不需要重新启动电脑。VM 的意义是Virtual Machine,即虚拟出一个逻辑的电脑,它可以提供基于Intel CPU的虚拟PC系统环境,包括CPU、内存、BIOS、硬盘和其他外围硬件设备。 下面我们讲解用VMware来建立一台虚拟PC的步骤:
(1)下载并安装VMware;
(2)使用VMware向导建立一个针对VxWorks的虚拟机;
此步骤中注意在操作系统中选择“other”,如图5:
由于目标机最终通过软盘启动,因此要求你的电脑具有软驱。很遗憾,当年日常使用的软盘如今成了古董,很少再有电脑配备软驱。因此,我们再来制造一个假冒伪劣产品,虚拟一个软驱。又一个天才的工具软件RamDiskNT为我们提供了这一便利,图6演示了用RamDiskNT虚拟一个1.44M软盘的方法。
仅仅虚拟一个软驱是不够的,把这个软驱添加到我们建立的虚拟机中才算修成正果,图7演示了添加软驱后的虚拟机硬件设置。
图7 包含软驱的虚拟机
2. 构造BSP
2.1下载和编译网卡驱动
VMware为运行于其上的操作系统提供虚拟网卡支持,该网卡类型即为AMD的PC-NET,在Tornado开发包中已经包含了该类型网卡的驱动程序,但经过测试,在VMware环境中该驱动无法正常工作,所以可从AMD的网站上下载最新的驱动程序。下载得到的是一个可执行的安装程序,运行该程序将得到一个压缩包和一个帮助文件,按照该帮助的要求,将压缩包直接释放到Tornado目录下。如果提示是否允许覆盖文件,则选择允许。
此后按如下步骤完成驱动程序的编译和替换:
1. 打开一个控制台窗口,运行批处理程序:
C:\tornado2.2\host\x86-win32\bin\torVars.bat;
该批处理文件用于设置环境变量,其内容为:
rem Command line build environments
set WIND_HOST_TYPE=x86-win32
set WIND_BASE=C:\Tornado2.2
set PATH=%WIND_BASE%\host\%WIND_HOST_TYPE%\bin;%PATH%
如果没有设置成功,可以手工设置这些环境变量。
2. 定位到C:\tornado2.2\target\src\drv\end目录,运行:
make CPU=PENTIUM tool=gnu ln97xend.o
3. 定位到C:\tornado2.2\target\lib\pentium\PENTIUM\common目录,并将上一步生成的
文件ln97xend.o复制到此目录下。备份此目录下的文件libdrv.a;
4. 运行命令arpentium -d libdrv.a ln97xEnd.o,删除libdrv.a中原有的ln97xEnd模块;
5. 运行命令arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o将我们刚刚创建的新
ln97xEnd模块添加进去。
2.2修改配置文件
我们要修改编译VxWorks的配置头文件Config.h中定义的一些参数,使编译出来的系统引导程序和VxWorks的映象符合我们的要求;同时还要修改sysLn97xEnd.c这个文件,以使系统的网络功能正常运行。
(1)定位到目录C:\tornado2.2\target\config\pcPentium并打开该目录下Config.h文件;
(2)查找到定义DEFAULT_BOOT_LINE宏的地方,修改预处理条件CPU == PENTIUM分支下的定义如下:
#define DEFAULT_BOOT_LINE \
"lnPci(0,0)your_host_name:d:\\vxWorks h=192.168.80.169 e=192.168.80.254 u=target pw=vxworks tn=target"
其中:
目录
1 安装........................................................................................................................................... 2
2 调整........................................................................................................................................... 2
3 vxWorks 简介 ........................................................................................................................... 2
3.1 目录树................................................................................................................................... 2
3.2 工具包................................................................................................................................... 3
3.3 交叉编译工具链 ................................................................................................................... 3
3.4 BSP ........................................................................................................................................ 3
3.5 project ................................................................................................................................... 4
3.6 Image ..................................................................................................................................... 4
4 编译框架 ................................................................................................................................... 4
4.1 编译组成 ............................................................................................................................... 4
4.1.1 Makefile............................................................................................................................. 4
4.1.2 defs.project ....................................................................................................................... 5
4.1.3 rules.project ...................................................................................................................... 5
4.2 编译过程 ............................................................................................................................... 5
4.2.1 生成.o文件....................................................................................................................... 5
4.2.2 生成partialImage.o文件 ................................................................................................. 6
4.2.3 生成vxworks image .......................................................................................................... 6
5启动调试 .............................................................................................................................. 7
1 安装
Vxworks 有两张安装盘,安装有以下步骤:
1) 安装tornado 2.2.1
使用第一张盘,注意安装时必须保证当前没有安装过tornado,如果安装过必须从注册表中清空所有的tornado;选择“Manual License”,即License手动安装
2) 安装BSP/Drivers
第一张盘和第二张盘都用了,不知什么东西,也不懂
3) 安装License
复制license.dat文件到某个位置,然后设置“系统环境变量”,指向这个文件license.dat,注意必须是“系统环境变量”,不能是“用户环境变量”
这就是手动安装License 环节。
安装完成,tornada 被安装到D:\Tornada2.2
2 调整【vxworks】
本次任务是完成vxworks 环境下ppc 85xx系列的SDK发布环境,因此需要将之前准备好的ppc 85xx环境复制过来。当时直接将以前开发人员的target、host目录直接复制过来覆盖即可,注意备份。
3 vxWorks 简介
3.1 目录树
下图为目录树结构,目前我们仅关注的是host、target两个;如果获取帮助可以直接查看docs中的books.html即可。
3.2 工具包
编译vxworks 时使用gnu工具,包括make、grep等等,这些工具都是专门编译好的windows 程序,具体位置在host/x86-win32/bin/目录下,因此在使用脚本编译时必须将该目录包含到path环境变量中。
3.3 交叉编译工具链
交叉编译工具链包括编译器、头文件、库文件。
1) 编译器
gcc编译器位置在host\gnu,当前使用gcc作为编译器
vxworks 提供的diab编译器,位置在host\diab
2) 头文件
可以理解为Linux 下的libc库头文件,此为vxworks头文件,位置在target/h,注意,此目录下不仅在C语言头文件,也包含vxworks的编译框架makefile头文件
3) 库文件
此为vxworks库文件,位置在target/lib
3.4 BSP
即板级支持包,位置在target/config/目录下,基本上每个目录为一个BSP,每个硬件类型都有一个BSP对应,特例如下:
目录comps,为所有BSP的基本模块描述文件
目录all,所有BSP的公共部分,当前放置在xvfi8548目录下了,由于xvfi8548的BSP中Makefile
如此写,因此没有更改all的位置。
3.5 project
位置在target/proj/目录下,对应使用tronado集成环境下的工程,创建一个工程即生成一个目录,当前使用的工程为xvfi8548。
3.6 Image
vxworks image分两种:
bootrom,即引导器,用于加载和启动vxworksimage,bootrom由BSP编译获得,这个东西目前是通过烧录器烧录到flash上,相当麻烦;希望可以使用uboot来代替。
vxworks,即vxworks主程序,相当于Linux内核加root文件系统,由BSP外加启动程序实现。由target/proj/xvfi854/目录下编译获得。
4 编译框架
vxworks编译使用gnu make工具,工程之间互相独立,BSP也互相独立。目前需要编译的东西就是bootrom和vxworks两个。
下面以编译vxworks为例详细介绍整个编译过程。
4.1 编译组成
当前工程下的Makefile和target/h/make 目录组成,在编译之前务必要设置环境变量,这些环境变量有:
WIND_BASE 此为vxworks安装的主目录,也即host、target目录的上一层目录 WIND_HOST_TYPE 即当前系统的架构,均为x86-win32
PATH 主要是添加工具包路径和编译工具链路径
设置好环境变量后,在需要编译的工程(或者BSP)目录下执行make即可,比如当前的vxworks工程在target/proj/xvfi8548/目录下,直接到该目录下make 即可。
vxworks的编译组成相当复杂,实在是讨厌至极啊。
4.1.1 Makefile
工程的Makefile做了如下的事情:
1) 定义需要编译的.o文件集合,以及这些.o文件的编译方式,某些.o文件对应的.c
文件来自于BSP,某些来自当前目录
2) 包含一堆其他的makefile,其中最重要的是两个,defs.project和rules.project
3) 定义编译参数CFLAGS,注意在PPC环境下务必要使用-mstrict-align确保对齐访问
4) 定义链接参数LIBS,链接其他外部模块,这里包括ezdriver的模块和SDK模块
注意这个Makefile没有指定default要做什么,这个default 目标在defs.project中定义
4.1.2 defs.project
顾名思义,该文件主要是定义变量。
定义了default目标,它依赖于exe条件,注意,这个default是整个Makefile的第一个目标,所以make 命令会以它做为编译的目标。这个exe又在rules.project中定义。
还要注意其中的CFG_GEN变量,它用来产生依赖关系,但由于我们不会在vxworks 上做多少二次开发,不需要生成什么依赖,全部重新编译即可,因此后续可以看到将这个生成依赖的命令去年了。
同时这个文件包含了一系列的makefile文件,以下详述:
1) defs.link
定义link(链接)时的一些变量
2) defs.x86-win32
定义一堆gnu工具,包括RM、CP等等
3) defs.vxworks
定义POSTLINK_MODULES,包括生成ctdt.o这个文件,该文件以后在链接vxworks image时会用到
4) make.ppc85xxgnu
定义编译工具链
4.1.3 rules.project
顾名思义,该文件主要定义编译规则。
终于找到exe目标的规则了,它依赖于$(default_rule),这个default_rule在工程的Makefile中就已经定义了,为vxWorks。
该文件包含了rules.vxWorks,其中定义了vxWorks的编译规则,它依赖于partialImage.o和POSTLINK_MODULES。而其中的partialImage.o 就是Makefile中定义的.o文件集合聚合生成的。
4.2 编译过程
4.2.1 生成.o文件
.o文件集合由Makefile定义,包含sysALib.o sysLib.o usrAppInit.o linkSyms.o npclib.o mmuE500LibExt.o i2clib.o bspDebug.o motTsecEnd.o usrprjConfig.o,注意这些文件对应的源文件有些在当前工程下有些在BSP下。
第二章 VxWorks基础
1 任务产生
Table 2-3: Task Creation Routines
Call Description
taskSpawn( ) Spawn (create and activate) a new task. taskInit( ) Initialize a new task. taskActivate( ) Activate an initialized task.
id = taskSpawn ( name, priority, options, stacksize, main, arg1, arg10 ),VxWorks习惯用ID号为0的任务作为调用发出的任务?
阻塞,是指进程因某个事件不能使程序继续运行下去,如要对某I/O操作时! 简单的说:阻塞,指进程在主存中并等待一个事件的完成
在虚拟内存中,当主存中没有处于就绪状态的进程时操作系统就把被阻塞的进程换出到磁盘中的挂起队列,挂起的原来就差不多是这样,挂起需要和阻塞或就绪结合,简单的说,就是进程在辅存中并等待一个事件。
任务控制块(WIND_TCB)
多任务设计能随时打断正在执行着的任务,对内部和外部发生的事件在确定的时间里作出响应。VxWorks实时Wind内核提供了基本的多任务环境。从表面上来看,多个任务正在同时执行,实际上,系统内核根据某一调度策略让它们交替运行。系统调度器使用任务控制块的数据结构(TCB)来管理任务调度功能。任务控制块用来描述一个任务,每一任务都与一个TCB关联。TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器在任务最初被激活时以及从休眠态重新被激活时,要用到这些信息,TCB使多个任务得以独立运行,如表1-1所示任务控制块TCB。
表1-1 任务控制块TCB
为了便于调试,每个任务都有一个独一无二的字符串表示的名称,在任务被创建时由用户程序指定或者系统默认生成。几乎所有的任务控制函数都采用任务ID(等于TCB地址)表示一个任务。VxWorks提供任务名称和任务ID之间的转换函数。
TCB的一个重要内容就是任务上下文(ContExT),代表了任务运行状态。VxWorks的任务切换就是将当前任务(被换出CPU)的上下文保存到该任务的TCB,然后从调度程序(Scheduler)选择新任务(被换入CPU)的TCB中恢复上下文。
任务上下文:
多任务为应用程序对多个离散的现实事件的控制和反应提供了基本的机制。VxWorks的实时内核wind提供了一个基本的多任务环境。内核按照一种调度算法交替运行各个任务,造成一种多个任务并行运行的假象,每一个任务都有自己的任务上下文。任务上下文是任务每次被调度运行时所能看到的CPU环境和系统资源。在一次上下文切换中,一个任务的上下文被存在任务控制块(TCB)中。一个任务的上下文包括:
l 一个用于执行的线程,即任务的程序计数器
l CPU的寄存器和可选择的浮点寄存器
l 用于动态变量和函数调用的堆栈
l 对标准的输入、输出、出错的I/O口的分配
l 延时(休眠)时钟
l 时间片时钟
l 内核的控制结构
l 信号句柄
l 调试和性能监视参数
在VxWorks中,一个非常重要但并不是任务上下文的一项资源就是存储器地址空间:所有代码(任务)都在一个单一的公有的地址空间运行,这一点是区别于许多非实时操作系统的(UNIX, Windows)。
2 option
当任务生成后,一个选项参数一定要给出。
若生成一个任务,涉及到浮点操作,则如下定义:
tid = taskSpawn ("tMyTask", 90, VX_FP_TASK, 20000, myFunc, 2387, 0, 0, 0, 0, 0, 0, 0, 0, 0)
Table 2-5: Task Options
Name Hex
Value Description
VX_FP_TASK Execute with the floating-point coprocessor. VX_NO_STACK_FILL 0x100 Do not fill stack with 0xee. 0x8
VX_PRIVATE_ENV 0x80 Execute task with a private
environment.
VX_UNBREAKABLE 0x2 Disable breakpoints for the task.
选项还可以被检查是否合法
Table 2-6: Task Option Routines
Call Description
taskOptionsGet( ) Examine task options.
taskOptionsSet( ) Set task options.
3 获取任务信息
当一个任务被调度的时候,可以检查当时该任务的上下文,获取该任务的信息。
Table 2-7: Task Information Routines
Call Description
taskIdListGet( ) Fill an array with the IDs of all active tasks. taskInfoGet( ) Get information about a task. taskPriorityGet( ) Examine the priority of a task. taskRegsGet( ) Examine a task's registers. taskRegsSet( ) Set a task's registers. taskIsSuspended( ) Check if a task is suspended. taskIsReady( ) Check if a task is ready to run. taskTcb( ) Get a pointer to task's control block.
4 删除任务
当一个任务被删除之前,一定要确保该任务释放了所有占有的共享资源。
Table 2-8: Task-Deletion Routines
Call Description
Terminate the calling task and free memory (task
stacks and task control blocks only).1
taskDelete( ) Terminate a specified task and free memory (task
stacks and task control blocks only).*
taskSafe( ) Protect the calling task from deletion.
taskUnsafe( ) Undo a taskSafe( ) (make the calling task
available for deletion).
任务删除存在的安全隐患:
一个任务可以占有一个信号灯,来占有临界资源;当这个任务被任务删除时,占用的临界资源没有被释放,其他任务就无法得到该临界资源。因为该任务无法释放信号灯。使用tasksafe()和taskUnsafe( )可以解决这个问题。前者可以exit( )
使自己不被其他任务删除;后者其他任务被允许删除自己。典型用例如下:
taskSafe ( );
semTake (semId, WAIT_FOREVER); /* Block until semaphore available */
.
. critical region
.
semGive (semId); /* Release semaphore */ taskUnsafe ( );
5 任务控制
当调试阶段,需要对任务进行控制,使其挂起,延迟等等。
Call Description Table 2-9: Task Control Routines
taskSuspend( ) Suspend a task.
taskResume( ) Resume a task.
taskRestart( ) Restart a task.
taskDelay( ) Delay a task; delay units are ticks.
nanosleep( ) Delay a task; delay units are nanoseconds.
6 任务扩展结构
这里安排了根任务相关的调用例程指针。当任务被创建,延时,调用等等,由这里指定的例程入口开始执行。
Table 2-10: Task Create, Switch, and Delete Hooks
Call Description
taskCreateHookAdd( ) Add a routine to be called at every task
create.
taskCreateHookDelete( ) Delete a previously added task create
routine.
taskSwitchHookAdd( ) Add a routine to be called at every task
switch.
taskSwitchHookDelete( ) Delete a previously added task switch
routine.
taskDeleteHookAdd( ) Add a routine to be called at every task
delete.
taskDeleteHookDelete( ) Delete a previously added task delete
routine.
7 错误码
全局变量errno用来保存当前执行任务的错误状态;
任务上下文切换时,errno会保存到任务的TCB中;
底层函数根据情况设置errno,上层调用函数检查errno的值确定函数调用失败的原因;
错误码格式:模块编码(16bits)+错误类型(16bits);
由错误码获取描述信息:shell命令printErrno, 函数strerror( );
定义用户自己的错误码;
0---500号由系统使用;
用户从501-----左移16位都可用。
8 任务异常处理
当任务执行出现错误时,比如硬件指令异常,地址越界,0做除数时,异常处理包会处理这些事情。默认做法是,悬挂起异常的任务,其他任务照常。一个任务本身也可以作为硬件异常的处理函数。
9 共享代码和可重入性。
VxWorks的共享代码让系统效率更高,可维护性好,共享代码必需可重入。VxWorks里大多数例程是可重入的。
ldiv( ) has a corresponding routine ldiv_r( ),前者可重入,后者不可。 推荐以下三种方式辅助实现可重入性:
o dynamic stack variables
o global and static variables guarded by semaphores
o task variables
函数的可重入性(Reentrancy)正确运用
在一个多任务环境中,函数的可重入性是十分重要的。可重入函数是一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。在写函数时只要考虑到尽量用局部变量(例如寄存器、堆栈中的变量),对于要使用的全局变量要加以保护(例如采用关中断、信号量等),这样构成的函数就一定是一个可重入的函数。
此外,编译器是否有可重入函数的库,与它所服务的操作系统有关,例如DOS下的Borland C和Microsoft C/C++等就不具备可重入的函数库,这是因为DOS是一个单用户单任务的操作系统。为了确保每一个任务控制自己的私有变量,在一个可重入的C函数中,须将这样的变量声名为局部变量。C编译器将
嵌入式实时操作系统VxWorks入门――开发环境构建
VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。VxWorks原先对中国区禁止销售,自解禁以来,在我们的军事、通信、工业控制等领域得到了非常广泛的应用。
VxWorks 的实时性体现在能于限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。因此,实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。本文将对这个操作系统进行一个入门级的、全面的介绍。为力求展示其全貌,全文共分五章:
(1)搭建VxWorks嵌入式开发环境;
(2)简要介绍VxWorks的基本组成,内核的基本结构;
(3)概述VxWorks板级支持包(BSP)的概念及VxWorks的启动过程;
(4)介绍VxWorks设备驱动的架构及编写方法;
(5)指明VxWorks应用开发的思路,任务调度及任务同步、中断与任务的同步机制。
以上各章中将贯穿着许多实例,由于本文定位于入门级教程,所以文中的实例都将十分简单。下面我们进入第一章内容的讲解。
如图1,嵌入式系统的调试方法一般为通过PC(宿主机)上的集成开发环境交叉编译针对特定电路板(目标机)的程序,然后将程序通过目标板的JTAG、串口或网口等途径下载到目标板上运行。因此,为了构造一个嵌入式系统的学习环境,拥有一块包含CPU、存储器及I/O电路(构造计算机系统)的目标电路板往往是必要的。虽然许多集成开发环境附带模拟软件,但仅限于指令集的模拟,均无法模拟物理的目标机硬件平台,因而在其上只能进行应用程序的象征性模拟开发。但是,并非所有人都能拥有一块物理的电路板。在这种情况下,我们如何构造一个模拟的开发环境,其学习效果就如同拥有完全真实的电路板一样呢?本文试图解答此问题,主体内容包括四个方面:
(1) 利用VMware等软件模拟真实的目标机;
(2) 构建VMware虚拟PC上VxWorks BSP,建立Bootrom和OS映像;
(3) 修改Tornado相关设置,连接宿主机与目标机,建立调试通道;
(4) 写一个简单的应用程序并下载到目标系统运行。
图1 嵌入式系统的调试
本章工作的最终目标为:
(1)VxWorks在VMware启动成功并顺利运行,如图2;
图2 在VMware中运行的VxWorks
(2)可在Tornado上针对目标板编译程序并进行调试,如图3。
图3 与目标机建立调试通道的Tornado
1. 模拟目标机
PC也具有目标机的所有特点,实际上,我们可以把PC作为嵌入式系统的目标机,从而构造如图4所示的开发模型:
图4 PC作为目标机【vxworks】
很遗憾,这种方法实际上非常麻烦,同时开动两台PC进行调试将使你和你的室友饱受折磨,既然他如此地热切于游戏和上网。因此,我们可以借助VMware来在本机上虚拟出另一PC。 VMware的确是天才的作品!在同一PC上,利用VMware几乎可以安装所有的操作系统,而且操作系统之间的切换不需要重新启动电脑。VM的意义是Virtual Machine,即虚拟出一个逻辑的电脑,它可以提供基于Intel CPU的虚拟PC系统环境,包括CPU、内存、BIOS、硬盘和其他外围硬件设备。
下面我们讲解用VMware来建立一台虚拟PC的步骤:
(1)下载并安装VMware;
(2)使用VMware向导建立一个针对VxWorks的虚拟机;
此步骤中注意在操作系统中选择“other”,如图5:
(注意:网卡要用HOST-only那项!)【事实上我按照网络上说的,修改了数个地方后,最后一次修改是把网卡改成了bradge才成功的。】由于目标机最终通过软盘启动,因此要求你的电脑具有软驱。很遗憾,当年日常使用的软盘如今成了古董,很少再有电脑配备软驱。因此,我们再来制造一个假冒伪劣产品,虚拟一个软驱。又一个天才的工具软件RamDiskNT为我们提供了这一便利,图6演示了用RamDiskNT虚拟一个1.44M软盘的方法。
仅仅虚拟一个软驱是不够的,把这个软驱添加到我们建立的虚拟机中才算修成正果,图7演示了添加软驱后的虚拟机硬件设置。
图7 包含软驱的虚拟机
一、创建映像工程 Create a bootable VxWorks image
工程创建完毕后,工程管理工具为用户工程产生、拷贝了一系列文件,这些文件显示在工程作业空间的Files选项卡中(如图1.1所示)。这些文件都是创建工程时,系统自动创建的文件(有些文件不可修改)。下面对这些文件进行详细的描述和说明。 linkSyms.c :
动态产生的配置文件。该文件包含的代码来自于VxWorks文档,而VxWorks文档是参考适当的符号集而创建的。文件包行的是没有被初始化的程序模块符号信息。该文件在工程任何时候发生变化时重新产生,用户不需要对其编写和修改。 prjConfig.c :
一个动态产生的配置文件。该文件在工程任何时候发生变化时重新
产生,用户不需要对其编写和修改。该文件包含的是当前VxWorks映像所包含组件的初始化代码。 romInit.s :
包含引导Rom和基于Rom的VxWorks映像的初始化入口汇编代码。 romStart.c : 包含把VxWorks映像下载到RAM中的程序代码。 sysALib.s :
包含系统启动代码。这是VxWorks映像下载到RAM中启动启动以后执行的第一段代码。 sysLib.c :【vxworks】
包含与目标机或系统相关的C语言函数。该文件提供板级接口,通过该接口,VxWorks和应用程序的实现将与目标系统无关。 usrAppInit.c :
包含自启动型VxWorks映像用户应用程序入口函数usrAppInit(),类似与C语言的main()函数。用户可以把应用初始化程序增加到该函数里,如图1.2所示的usrAppInit.c文件窗口。usrAppInit()函数是应用程序入口函数,当目标机系统加电后,首先初始化CPU,接着初始化目标机上的设备、安装设备驱动程序、创建设备等,然后进行系统的配置和系统引导所需要的资源申请等,最后执行usrAppInit()函数。
二、配置VxWorks模块
在生成用户自定义VxWorks映像前,应根据自己应用和目标机的需求,对VxWorks模块进行配置。这些配置包括C++模块、多媒体模块、图形模块、网络模块、开发工具模块、目标机硬件、操作系统模块等。所有的这些配置可以在用户工程作业空间上进行,其中当某个模块被选择后,它的名称以粗体字型显示;当未被选择时,他的名称以普通字型显示;未安装的模块,以斜体字型显示。如下图1.3所示。关于组件的添加与删除等具体应用方法,请参考《Tornado用户指南》第四章。
1. VxWorks
开发商:
VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。WRS公司组建于1981年,是一个专门从事实时操作系统开发与生产的 软件公司,该公司在实时操作系统领域被世界公认为是最具有领导作用的公司。
1984年 WRS 公司推出它的第一个版本--VxWorks 1.0.1,在1997年推出了它的最新版本 VxWorks 5.3.1。
应用:
VxWorks 是一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器
本文来源:http://www.gbppp.com/jd/462432/
推荐访问:vxworks系统 vxworks论坛