
引言
VxWoAs是美国Wind River System(WRS)公司开发的嵌入式实时 *** 作系统。VxWorks中的I/O子系统为应用程序提供了简单、统一、与设备无关的访问接口。I/O系统内部采用设备列表、驱动程序列表和文件描述符表来实现对不同设备的管理与访问,从而为开发通用外部设备驱动程序提供了便利。然而在一些专用系统上,为了缩短设备的响应时间,提高设备的读取速度,有必要将设备与I/O系统独立起来。由于VxWorks属于微内核,所有的程序均运行在同一线性地址空间,这也为设备与I/O系统的独立提供了条件。基于VxWorks的I/O子系统设备管理的思想,本文提出了一种在VxWorks下对多个同类USB设备进行管理的设计方案。该方案可使得对设备的访问独立于I/O子系统。
1 VxW0rks的I/O子系统设备管理
VxWorks I/O系统内部对设备的管理主要通过三张表来实现,即驱动程序列表、设备列表和文件描述符表。其中驱动程序列表用来管理已注册的设备驱动程序,它的大小是固定的,有NUM DRIVERS项,每一项对应驱动程序的入口点,当应用程序调用标准I/O接口函数时,I/O子系统便可通过驱动程序列表检索到设备的驱动程序,从而实现对指定设备的访问、发送、接收等 *** 作。系统可利用iosDrvInstall()注册设备驱动程序,并将设备的人口函数加入到驱动程序列表。同时返回一个drvnum驱动程序号,并将其作为设备描述符的一部分,从而以此把设备与其驱动程序联系起来。I/O子系统采用链表对所有设备进行管理,该链表称之为设备列表。调用iosDevAdd ()可向系统添加设备,添加设备时,应指明设备名称及驱动程序索引号,该索引号就是iosDrvInstall ()返回的索引号。在VxWorks中,一个设备可以被多次打开,但对于每一次打开,系统将利用一个文件描述符来区分,本系统将会维持一张文件描述符表,该表的每一项记录了与设备对应的驱动程序号和设备ID,这样,就会文件描述符与驱动程序、以及设备之间建立一种联系。这样,在利用标准I/O函数进行读写时,就可以根据文件描述符从文件描述符表中找到对应的驱动程序的人口与设备ID。VxWorks中的这三张表的关系如图1所示。
2 USB设备管理方案设计
设计独立于I/O系统的USB设备驱动程序的设计思想主要基于两点,第一是用户自己管理设备。第二是通过驱动程序直接向应用程序提供可用于读写设备的接口函数。由于设备独立于I/O系统,用户需要自己设计一种设备管理方法,以便对多个接入的USB设备进行合理的管理。然而由于不存在设备驱动程序列表,故在设计时还需要有一种方法来解决设备的访问问题。
2.1 USB设备描述符
设备描述符实际上是一个数据结构,可在系统中作为一个逻辑结构体。它是一个具体设备的抽象。可与一个物理设备相对应,是参与设备管理、访问的主要结构体。鉴于I/O子系统对设备的管理,在对多个USB设备进行管理时,对于设备的存储,可采用双向链表来进行管理,称之为设备列表。链表对USB设备的管理主要通过设备头(USB_BEV_HDR)来实现。USB设备头是一个与具体设备无关的数据结构,它由一个链表节点和设备名称组成。节点中包含指向有前一个和下一个USB设备的设备头的链表节点。实际上,每一个USB设备都会有更多的数据存储在更大的数据结构中。这个结构就是设备描述符,而USB设备头只是做为USB设备描述符的起始部分。设备头的数据结构(USB_DEV_HDR)如下:
其中,USB_DL_NODE是一个链表节点,它由两个链表节点指针域组成。分别指向前一个和下一个设备的链表节点。其数据结构如下:
这样,就可以把USB设备的描述符划分为两部分,其中一部分与具体设备无关,称为设备头:另外一部分是与具体设备相关的设备特殊数据,设备相关部分包括USB设备的Node ID、USB管道句柄、端点地址、状态等信息。其结构如图2所示。设备无关部分主要用于设备管理,而设备相关部分则用于对设备的访问。
2.2设备列表设计
为了方便对设备的管理,USB设备列表可采用双向链表结构,其作用是将所有USB设备的有关信息组织起来,从而实现对多个设备的链式管理。前面提到的设备描述符就是一个存储了设备信息的数据结构。而所有USB设备描述符都是以设备头数据结构开始的,这样,就可以很方便地将设备描述符组成一个链表形式的设备列表。
这个从两个方面来回答:
1、硬件平台:一般包含嵌入式处理器,Flash,网卡,触摸屏,按键等一些可裁剪外设。主要的有RAM,powerpc,DSP等
2,、嵌入式系统平台:也即嵌入式 *** 作系统,运行在嵌入式硬件上的软件,一般由bootloader,kernel,root file system等通过一些工具八遍愈好的嵌入式文件镜像烧写到目标板的只读存储器上;一般为VxWorks,WindowCE,Palmos,symbian,嵌入式linux(RT-linux)
嵌入式开发一般包括应用程序开发,驱动开发。有关详细信息建议多在网上看看搜搜。
答案来源 百度知道
1 用系统自带的ring buffer,把数据扔进去,等到必要的时候将数据读出来上传host
2 建立虚拟内存盘,绑接dos文件系统,直接用标准io接口读写文件,使用dos命令给传到host上
3 通过ftp网络直接读写host目录
4 通过tgtsvr file system读写host目录
嵌入式实时 *** 作系统强调了什么?
系统最大的特点当然是嵌入。嵌入就意味着它和硬件的联系很强,对硬件的适配和依赖度都是很高的,对于系统移植的难易度也就成了评价嵌入实时系统的重要方面。嵌入式 *** 作系统移植的目的是使嵌入式 *** 作系统能在某个微处理器或微控制器上运行。比如VxWorks是商用 *** 作系统的有很多API函数及相关技术支持,所以移植和二次开发比较容易,但是移植成本较高。嵌入还意味着对于小型的硬件要求,主要是面对实时产生的数据,在数据产生终端进行快速的运算。所以系统极其强调灵敏性和实时性。
另一个特点就是实时。对于实时性的要求,有很多种实现措施。我们一一道来。首先就是分区处理的思想。对于核心的功能划分,使用户信息和系统程序和运行分列在不同的区划里,保证任务的有效有序运转。其次, 任务管理是嵌入式实时 *** 作系统的核心和灵魂,决定了 *** 作系统的实时性能。它通常包含优先级设置、多任务调度机制和时间确定性等部分。 嵌入式 *** 作系统支持多任务,每个任务都具有优先级,任务越重要,赋予的优先级应越高。优先级的设置分为静态优先级和动态优先级两种。静态优先级指的是每个任务在运行前都被赋予一个优先级,而且这个优先级在系统运行期间是不能改变的;动态优先级则是指每个任务的优先级(特别是应用程序的优先级)在系统运行时可以动态地改变。 嵌入式 *** 作系统支持多任务,每个任务都具有优先级。任务调度主要是协调任务对计算机系统资源的争夺使用。对系统资源非常匮乏的嵌入式系统来说,任务调度尤为重要,它直接影响到系统的实时性能。通常,多任务调度机制分为基于优先级抢占式调度和时间片轮转调度。
基于优先级抢占式调度:系统中每个任务都有一个优先级,内核总是将CPU分配给处于就绪态的优先级最高的任务运行。如果系统发现就绪队列中有比当前运行任务更高的优先级任务,就把当前运行任务置于就绪队列中,调入高优先级任务运行。系统采用优先级抢占方式进行调度,可以保证重要的突发事件及时得到处理。
时间片轮转调度:让优先级相同的处于就绪状态的任务按时间片使用CPU,以防止同优先级的某一任务长时间独占CPU。
在一般情况下,嵌入式实时 *** 作系统采用基于优先级抢占式调度与时间片轮转调度相结合的调度机制。
第三,在运行的执行方式上,VXworks等系统采用进程和线程的执行方式,而市面上其他的系统多采用任务执行方式。
嵌入式实时 *** 作系统函数调用与服务的执行时间应具有可确定性。系统服务的执行时间不依赖于应用程序任务的多少。基于此特征,系统完成某个确定任务的时间是可预测的。表1具体列出了4种 *** 作系统的调度机制。
VxWorks具有高效的任务管理功能,它支持多任务,可分配256个优先级,支持优先级抢占式调试和时间片轮转调度,实时性最好。μC/OS-II内核是针对实时系统的要求设计实现的,只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求。μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度;仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占。eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多级队列调度器),允许用户在进行配置时选择其中一个凋度器,适应性好。
此外,还涉及到任务的中断管理。
中断管理是实时系统中一个很重要的部分,系统经常通过中断与外部事件交互。主要考虑是否支持中断嵌套、中断处理机制、中断延时等。
以VXwoks为例,xWorks *** 作系统中断管理采用中断处理与普通任务分别在不同栈中处理的中断处理机制,使得中断只会引发一些关键寄存器的存储,而不会导致任务的上下文切换,从而极大地缩短了中断延时。同时,VxWorks的中断处理程序只能在最短时间内通告中断的发生,而将其他的非实时处理尽量放入被引发的中断服务程序中来完成,这也缩短了中断延时。但是凼为中断服务程序不在一个固定的仟务上下文中执行,而目没有任务控制块,所以所有中断服务程序使用相同的中断堆栈。为了能处理最坏情况下的中断嵌套,必须分配足够大的中断堆栈空间。
因商业原因,不对其他新型嵌入式实时 *** 作系统做分析。
·有哪些厉害的MPU实时 *** 作系统?
1、VXworks
VxWorks *** 作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时 *** 作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时 *** 作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、d道制导、飞机导航等。在美国的 F-16、FA-18战斗机、B-2 隐形轰炸机和爱国者导d上,甚至连1997年4月在火星表面登陆的火星探测器、2008年5月登陆的凤凰号,和2012年8月登陆的好奇号也都使用到了VxWorks上。
VxWorks *** 作系统有以下部件组成:
多任务调度(采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度)
任务间的同步
进程间通信机制
中断处理
定时器和内存管理机制
总之,VxWorks的系统结构是一个相当小的微内核的层次结构。内核仅提供多任务环境、进程间通信和同步功能。这些功能模块足够支持VxWorks在较高层次所提供的丰富的性能的要求。
2、QNX
QNX是一种商用的遵从POSIX规范的类Unix实时 *** 作系统,目标市场主要是面向嵌入式系统。它可能是最成功的微内核 *** 作系统之一。
QNX成立于1980年,是加拿大一家知名的嵌入式系统开发商。
QNX的应用范围极广,包含了:控制保时捷跑车的音乐和媒体功能、核电站和美国陆军无人驾驶Crusher坦克的控制系统[2],还有RIM公司的BlackBerry PlayBook平板电脑。
3、Rtems
RTEMS, 即: 实时多处理器系统(Real Time Executive for Multiprocessor Systems),是一个开源的无版税实时嵌入 *** 作系统RTOS。
它最早用于美国国防系统,早期的名称为实时导d系统(Real Time Executive for Missile Systems),后来改名为实时军用系统(Real Time Executive for Military Systems),现在由OAR公司负责版本的升级与维护。无论是航空航天、军工,还是民用领域RTEMS都有着极为广泛的应用。
需要自己配置。
Step 1 安装vmware
首先需要安装vmware, 版本没有什么限制,我装的是vmware 80,关于怎么安装就不细说了,一切都用默认的就ok。安装完成后需要配置下vmware虚拟网卡1(VMnet1)的IP,设置为1921681021,后面会用到这个IP设置,后面会用到这个设置。 如下所示:
Step 2 安装Tornado
这个也不多说了,正版,试用版,盗版,破解版,都自己找去吧。完了照说明安装就好了。
Step 3 下载用于Vmware的BSP包
由于Tornado中自带的网卡驱动在Vmware下无效,原本需要在AMD网站下载最新的PC-NET的驱动,这里可以下载并使用我提供的整个BSP包。具体做法是下载vmware_bspzip
然后解压后把vmware文件夹拷贝到$TORNADO\target\config下,$TORNADO是tornado的安装路径。
顺便解释下,在其中configh文件中可以看到如下代码:
#elif (CPU == PENTIUM)
#define DEFAULT_BOOT_LINE \
"lnPci(0,0)host:vxworks h=1921681021 e=19216810288 u=target pw=target"
意思是,系统文件名为vxworks,主机IP为1921681021,目标机(vxworks)IP为19216810288,用户名target,密码target,下载的包里都已经改好了,这里不需要修改任何东西。
Step 4 创建VxWorks引导启动盘
下载启动镜像vmiso。
如果你想自己来制作,稍微有点麻烦,需要软驱或者使用RamDiskNT作为虚拟软盘工具,然后在$TORNADO\target\config\vmware下运行mkboot a: bootrom。
Step 5 在VMWare中创建Vxworks虚拟机
在VMWare中创建新的虚拟机,在向导中选择 *** 作系统类型时选择“other”,大部分都默认就可以,硬盘容量200M就足够了,但需要注意的是,网卡中网络连接类型要选择Host-only,如下所示:
Step 6 通过vmiso启动镜像中默认自带的vxworks系统
其实在你装好VmWare并下载了vmiso后就可以执行这一步了,上面的其他 *** 作都是为当你需要自己定制和编译VxWorks系统时做的准备,如果你只是想一睹VxWorks,没有其他要求,那直接用vmiso中默认的VxWorks系统就ok了。
在上一步创建的虚拟机的光驱中,选择使用iso镜像,就选择Step4中下载的vmiso,如下所示:
现在就可以启动该虚拟机了,在启动项中选择[2] 直接运行VxWorks后,可以看到熟悉的Vxworks画面。
以上就是关于如何配置vxworks识别usb设备全部的内容,包括:如何配置vxworks识别usb设备、嵌入式的软件开发平台有哪些、请教VxWorks嵌入式系统上应用程序文件读写 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)