实时操作系统(Real Time Operating System,简称RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任,并控制所有实时任务协调一致运行的操作系统。
Armis研究团队在VxWorks中发现了11个零日漏洞,VxWorks可能是使用的最广泛的操作系统。VxWorks被超过20亿台设备使用,包括关键的工业,医疗和企业设备。
[vxWorks *]# rtp exec [-s | -c] [-i] [-g | -a | -z] [-x | -X] [-p <priority>] [-u <stacksize>] [-o <rtpOptions>] [-t <taskOptions>] [-v <level>] [-e name=value] <filename> [--] [args] [&]
连接Target Server后,Host端可以启动一个叫Host Shell的工具
在前面的文章中,我们已经成功编译并启动了 VxWorks,本文将重点介绍 VxWorks 的启动流程,并使用GDB进行调试以更深入地研究启动过程。
来自404实验室安全研究团队的对于VxWorks 工控实时操作系统进行的 Fuzzing 与漏洞挖掘调试、利用的安全探究。 0x00 前言 关于VxWorks,这里引用44CON议题《攻击 VxWorks:从石器时代到星际》探究(http://www.freebuf.com/vuls/78277.html) 一文章中的介绍: VxWorks 是世界上使用最广泛的一种在嵌入式系统中部署的实时操作系统,是由美国WindRiver公司(简称风河公司,即WRS 公司)于1983年设计开发的。其市场范围跨越所有的安全
VxWorks在运行时,一般都会使用一个Console,提供基本IO操作,例如:显示printf()的输出、提供Kernel Shell服务等等。
使用VIP编译VxWorks Image时,可能会遇到某些组件不可选,甚至找不到的情况
在开发Embedded RTOS时,多是采用交叉式的开发方式,VxWorks就是一个典型代表。运行VxWorks的远程设备,称之为Target;运行IDE(例如Workbench、Tornado)的本地设备,称之为Host。貌似也有人跟它们叫下位机和上位机。
bootrom或VxWorks镜像一般可以编程成多种文件类型,例如bootrom、bootrom.bin、bootrom.hex、bootrom.pxe、vxWorks、vxWorks.bin等
风河引以自豪地宣布,VxWorks实时操作系统(RTOS)助力NASA洞察号探测器(InSight Lander)完成火星之旅重要里程碑,开始向红色星球减速12300mph并已成功着陆。风河VxWorks被应用于洞察号探测器的航空电子系统,助力NASA完成了此项任务,这是继2012年火星科学实验室好奇号任务之后,风河RTOS系统再次登陆火星。着陆后,洞察号将钻入火星表面,在2020年11月24日之前,它都将留在火星执行科学任务并收集有关这颗星球如何形成的数据信息(相当于火星上的一年零40天,或接近两个地球年)。
包含了它之后,VxWorks就会调用usrSerial.c的usrSerialInit()来加载串口设备
在《Tool之TargetServer(vx6)》里介绍了Workbench下如何启动TargetServer来连接WDB,今天看看Tornado里的操作
我以往的经验,这样情况多是地址错误引起的,而主要的地址错误就是栈溢出(或者叫栈越界)。我们写个例子模拟一下
在《Task之调度策略》里介绍了VxWorks的主要调度策略,而有了RTP之后,系统又是如何调度的呢?其实非常非常简单:RTP不参与调度,VxWorks还是使用之前的调度策略,即所有Task基于优先级抢占,以及默认关闭的时间片轮转。这确保在任何给定的时刻,系统中准备运行的最高优先级Task都将执行,而不管该Task是在内核中还是在任何进程中。相比之下,非实时系统主要使用分时调度策略,以及动态调整进程优先级,以确保没有进程会长期无法使用CPU,并且没有进程独占CPU。VxWorks的时间片轮转也是一种分时策略,但它不会干扰优先级的抢占,因此它具有确定性,保证了实时性。
Kernel Shell是VxWorks系统的一个Component(组件),是在Target端驻留的命令行。可以通过系统默认的全局IO来访问,即多数架构的串口0或者X86架构的PC Console;也可以通过Telnet或rlogin进行远程访问。
组件INCLUDE_VRFS,virtual root file system。这是一个虚拟的文件系统,仅是提供了一个POSIX风格的虚拟根目录"/"。在这个目录里,可以看到其它以"/"开始,且只包含一个"/"的设备
VxWorks在物理设备上运行时,如果要使用图形库(例如WindML、Zinc、Tilcon、QT等等),就需要使用相应显卡的驱动。遗憾的是,所有显卡厂家基本都不会发布VxWorks版本的驱动。幸运的是,所有显卡都支持VBE - VESA BIOS Extensions。VESA - Video Electronics Standards Association,是一个制定视频显示标准的国际组织。因此,WindRiver只需要提供一个VESA驱动,VxWorks就可以使用绝大多数的显卡了。
ScopeTools里还有个成员叫做ProfileScope,从Vx67开始,改名为Performance Profiler
PV操作是计算机领域一个有名的术语。它由荷兰人Dijkstra提出,是一种典型的同步机制,P(荷兰语passeren)表示通过,V(荷兰语vrijgeven)表示释放。
航空软件并不神秘,从计算机架构上来说,同普通的计算机系统并无太大区别,都是由处理器,总线,I/O设备,存储设备,网络设备,通讯设备,操作系统和应用软件所构成的。仅仅是为了满足很高指标的可靠性,健壮性和实时性,而采用了另一套东西而已。
默认情况下,在Tornado2.x/VxWorks5.x里,Host端动态加载应用程序后,Target端是看不到的,当然也就无法调用/访问了。多数人在工作时,习惯动态加载应用程序,如果没有开Host Shell,用的是Target Shell,例如通过Telnet或者串口,那就不能调用动态加载的应用程序。例如Host Shell里的ld<a.out,在Target Shell里用moduleShow(),是看不到它的,也无法使用a.out里的函数。同样,Target端加载符号后,Host端也是看不到的,例如Target Shell里的ld<b.o,在Host Shell里也是看不到的。如果在VxWorks里包含组件"synchronize host and target symbol tables",Target Server里选中"Synchronize Target/Host Symbol Tables"选项
对于Vx5和Vx6来说,这个Package通常包含了一堆C文件、几个汇编文件、几个cdf文件、一些头文件、一个makefile文件、一个readme文件(版本信息),和一个target.ref文件(这个BSP的专属文档)。到了Vx7,BSP被大大简化,主要成分就是cdf和dts文件了
DKM,就是Workbench里的Downloadable Kernel Module project,这种工程用于管理/构建系统内核空间里的应用模块
有了Disk,它还只是一个Device,一般在使用时,还要在Disk上创建块设备,并将这个块设备格式化。而格式化为哪种文件系统,就看具体需求了。
硬件平台环境如下图所示,采用两台带有以太网口的设备相连,一端是PC机插有PCIe的FPGA开发板,运行Windows操作系统;另一端是嵌入式设备,运行VxWorks操作系统。
刚刚发布的VxWorks 7 24.03集成了一个Benchmark Suite:rtos-benchmark。这个测试涵盖了Task/Thread、Mutex、Semaphore、Message queue等领域,并支持VxWorks API和POSIX API两种标准。今天把它跑了跑,步骤如下
DosFS是VxWorks的常用文件系统,它兼容于微软DOS的文件系统。今天以X86上的Vx69为例,来看看如何在设备上挂接这个DosFS
VxWorks是一个典型的多任务操作系统。这多个任务之间不可能完全的彼此独立,它们需要一些系统机制来协调彼此的动作。这些机制就属于多任务通信,主要可以分为两类:事件通知、数据传递。
虽然现在64位处理器越来越多,而且VxWorks也从6.9开始提供64位处理器的支持,但是目前VxWorks更多的应用场景还是32位的。那么VxWorks在32位处理器上最多可以使用多少内存呢?
与双向链表一样:这个结构内部没有同步或互斥机制。多任务访问同一链表时,要注意互斥保护,例如使用"互斥信号量"。
VxWorks中自带了WebServer组件,在network components->network protocols-> network applications下选择http server即可。也可以采用rapid control for Web。这里我们介绍GoAhead WebServer,它是一个源码免费、功能强大、可以运行在多个平台的嵌入式WebServer。
POSIX - Portable Operating System Interface of UNIX定义了操作系统为应用程序提供的接口标准。
经常有朋友问起软中断的问题... 话说我干了这么多年,还从未在VxWorks领域见过这个词儿,孤陋寡闻了
VxWorks7&WorkBench4的Debugger界面与之前的版本有了一些变化,甚至已经没有Target Server和WDB Agent这两个词儿了,取而代之的是Target Connection和Debug Agent。今天来看看具体如何使用
控制器硬件核心在于芯片,为了保证控制系统具有足够的计算与存储能力,目前工业机器人控制器多采用计算能力较强的ARM 系列、DSP 系列、Intel 等系列芯片。
编写ISR最基本的原则就是:尽可能短。代码少是一方面,更重要的是ISR里不能调用可能阻塞或延迟的操作。
BSP,全称是Board Support Package。顾名思义,就是支持(Support)某种板子(Board)的一个文件夹(Package)。对于Vx5和Vx6来说,这个文件夹通常包含了一堆C文件、几个汇编文件、几个cdf文件、一些头文件、一个makefile文件、一个readme文件(版本信息),和一个target.ref文件(这个BSP的专属文档)。到了Vx7,BSP被大大简化,主要成分就是cdf和dts文件了
Vx7默认只提供源码,而没有二进制的系统库了,可能是包含的组件太多了,太庞大了。因此,不管要用什么Target,都得先编译源码。
我们知道VxWorks是一个典型的Multitasking OS(多任务操作系统),每个Task都可能有多种状态,其中处于Ready状态的Task一旦拿到CPU,就可以执行了。不过CPU的数量再多,也不太可能比Task的数量多。也就是说,总会有Task即使进入了Ready状态,也抢不到CPU,还是不能执行。
编译器都会预定义一些宏,这些宏是不可取消的,来看看VxWorks中可能用到的这几个
Simulator可以模拟硬件设备并运行VxWorks系统。这个模拟的系统可以提供VxWorks的大部分标准功能,包括网络、Shell等等。而且它的构建过程与构建真实硬件设备镜像的过程也基本是一样的。有了它,我们就可以脱离硬件设备,直接在Host上开发、运行、测试VxWorks应用。这样在项目开发阶段,尽可能的减少了对硬件设备的依赖。而外界与这个VxWorks系统进行交互的应用程序,是区分不出它是模拟设备还是真实的硬件设备。因此,除了可以加快软件开发进度,Simulator在很多领域也可以给我们提供帮助,例如教学、项目展示等。 Simulator对应用层提供的API与真实设备上的API没有什么区别,有区别的仅是对外设的访问,也就是无法提供一些外设的驱动程序。Simulator至少可以模拟以下硬件或功能
VxWorks 是美国 Wind River System 公司( 以下简称风河 公司 ,即 WRS 公司)推出的一个实时操作系统。WRS 公司 组建于1981年,是一个专门从事实时操作系统开发与生产的软件公司,该公司在实时操作系统领域被世界公认为是最具有领导作用的公司。
在VSB的Source Build Configuration里依次enable以下Layer
之前波音737MAX空难失事事件牵动人心,让人对航空出行又平添了一份不信任,根据最新消息显示,美国联邦航空局对737 MAX机型的大量评估授权给波音公司自身进行,安全评估存在严重缺陷。也传出了波音737 MAX客机的培训都是通过平板电脑软件进行这样让人毛骨悚然的内幕。
VxWorks的RTP,全称是Real-Time Process,可以翻译为实时进程。
前一段时间,波音737MAX空难失事事件牵动人心,让人对航空出行又平添了一份不信任,根据最新消息显示,美国联邦航空局对737 MAX机型的大量评估授权给波音公司自身进行,安全评估存在严重缺陷。也传出了波音737 MAX客机的培训都是通过平板电脑软件进行这样让人毛骨悚然的内幕。
要想测试网卡的传输速度,可以使用UDP或TCP,自己写一段收发程序,实现起来并不复杂。不过,VxWorks6/7里已经封装了一个比较完整的工具 - sockperf
领取专属 10元无门槛券
手把手带您无忧上云