一直想介绍下QNX,因为其框架对其他微内核有很多可借鉴的地方,但是其是一个商业系统,不开源,只能看到部分的软件接口,在其上进行开发。
我们的老一套:代码下载、编译、运行是搞不了了,真是让人头大啊! 一些重要的东西先放这里:
1)QNX的开源代码:https://github.com/vocho/openqnx
2)QNX的框架文档: http://myqnx.com/developers/docs/6.3.0SP3/momentics/bookset.html
1.简介
1.1 历史
1980年,加拿大滑铁卢大学的学生戈登贝尔(Gordon Bell)和丹道奇(Dan Dodge)都上了实时操作系统设计的课程,课程要求学生构建一个基本的实时微内核,并成立了 Quantum Software Systems 公司。
1982年,戈登贝尔(GordonBell)和丹道奇(Dan Dodge)根据大学时代的一些设想写出了一个能在 IBM PC 上运行的名叫 QUNIX(Quick UNIX)的系统,直到 AT&T 发律师函过来才把名字改成 QNX。
2004年,来自美国的音响设备制造商哈曼(Harman)国际工业集团以 1.38 亿美元的现金收购了 QNX。
2010年,黑莓手机(BlackBerry)制造商 RIM(Research In Motion Ltd.)为获取其车载无线连接技术,收购哈曼集团旗下的 QNX 软件公司,QNX 因此重返加拿大。
QNX 主要开发汽车,通讯设备所使用的操作系统,哈曼国际的主业则是汽车音像和娱乐设备。BlackBerry 的并购交易使得 RIM、QNX 和哈曼工业在智能手机和车载音频娱乐系统之间找到合作空间。
1.2 应用场景
QNX 具有安全、可靠、可信的特点,因此通常应用于对安全性要求极高的领域,例如汽车、航空、核电站、工业自动化等领域。
carOS:QNX 一直是汽车领域最大的操作系统
robotOS:工业和医疗领域,例如手术机器人达芬奇
weaponOS:例如洛克希德·马丁的武器
criticalTaskOS:核电站、宇航领域
QNX Neutrino实时操作系统,QNX Momentics工具套件和QNX Aviage中间件系列基于组件的架构共同构成业界可靠性和延展性最强的架构,帮助建立高性能的嵌入式系统。包括思科、戴姆勒、通用电气、洛克希德·马丁和西门子在内的众多全球知名技术领先企业,都将QNX技术应用在网络路由器、车载远程信息处理和信息娱乐系统、工业控制系统、医疗设备、安全防卫系统和其他任务关键性和生命关键型应用中。
上面提到工具套件,就知道界面化的东西,核心代码是看不到的,我们学习到的源码内容和知识也有限了。
2. 特点
QNX是一个分布式、可扩展、遵从POSIX规范的类Unix硬实时微内核操作系统。
QNX为微内核的架构,微内核只提供进程调度、进程间通信、底层网络通信和中断处理四种服务。驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。
QNX是商业类Unix实时操作系统,主要针对嵌入式系统市场。它提供用户可控制的、优先级驱动的、急者优先抢占的调度方式。QNX 内核自身开销小、上下文切换快,在同样的硬件条件下给实时应用留下更大的余地,因而它在实时控制、通信、多媒体信息处理等对时间敏感的应用领域大有用武之地。
QNX 同时也是一个可嵌入的操作系统。它由微内核和一组共操作的进程构成,具有高度可伸缩性,可灵活的剪裁。最小配置只占用几十 KB 内存。因此,它可以广泛地嵌入到智能机器、智能仪器仪表、通信设备等应用中去。
2.1 POSIX
QNX是一种商用的遵从POSIX(可移植操作系统接口, Portable Operating SystemInterface,缩写为POSIX, 是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称)规范的类Unix实时操作系统,目标市场主要是面向嵌入式系统。
2.2 微内核
QNX采用微内核架构,操作系统中的多数功能是以许多小型的task来执行,它们被称为server。这样的架构使得用户和开发者可以关闭不需要的功能,而不需要改变操作系统本身。
QNX是一个微内核实时操作系统,其核心仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它OS服务,都实现为协作的用户进程,因此QNX核心非常小巧而且运行速度极快。
QNX的微内核独立自处于一个被保护的地址空间,驱动程序、网络协议和应用程序处于程序空间中。
微内核架构的优点:
(1). 驱动程序、网络协议、文件系统等操作系统模块和内核相互独立,任何模块的故障都不会导致内核的崩溃;
(2). 驱动程序、网络协议、文件系统和应用程序都处于程序空间,都调用相同的内核API,开发与调试和应用程序没有区别;
(3). 操作系统功能模块可以根据需要动态地加载或卸载,不需要编译内核。在高可靠性要求的情况下,可以编写监视模块,对可靠性要求高的模块进行监视,必要的时候重新启动或重新加载而无须重启系统。高可靠性的内核结构使QNX具备了高可靠性嵌入式操作系统的本质特征。
QNX Neutrino操作系统的微内核,管理一组协作的进程,如下图所示,这种结构不是一种层级的组织,更像是一个团队,因为不同的进程可以通过内核来协调交互。QNX Neutrino充当一个“软件总线”的角色,可以在需要的时候动态的插入和移除系统模块。
2.3 IPC
进程间通信 (IPC) 是将应用程序设计为一组协作进程的关键。
QNX 是同类中第一个使用消息传递作为IPC 基本手段的商业操作系统。操作系统的强大功能、简单性和优雅性在很大程度上归功于在整个系统中完全集成了消息传递方法。
在 QNX Neutrino 中,消息是从一个进程传递到另一个进程的字节包。操作系统对消息的内容没有任何特殊意义——消息中的数据对消息的发送者和接收者都有意义,但对其他人没有意义。
消息传递不仅允许进程相互传递数据,而且还提供了一种同步多个进程执行的方法。当它们发送、接收和回复消息时,进程会经历各种“状态变化”,这些变化会影响它们运行的时间和时间。
了解它们的状态和优先级后,微内核可以尽可能高效地调度所有进程,以充分利用可用的 CPU 资源。这种单一的、一致的方法——消息传递——因此在整个系统中不断地运行。
实时应用程序和其他关键任务应用程序通常需要可靠的IPC 形式,因为构成此类应用程序的过程是如此紧密相关。QNX Neutrino 的消息传递设计强加的纪律有助于为应用程序带来秩序和更高的可靠性。
2.4 内存保护
QNX Neutrino利用MMU,在受保护的环境中实现了POSIX的线程模型。
针对内存保护,有以下几种情况:
不提供内存保护:所有程序位于同一个地址空间,应用程序可以访问所有空间,效率较高,但是程序指针错误可能造成内核崩溃
单内核OS提供部分内存保护:用户层和系统层进行了隔离,内核和各种驱动、协议栈在同一个地址空间,应用程序在单独空间。内核模块处于一个保护空间,效率较高,应用程序无法访问,系统的稳定性也得到提高。由于内核模块处于保护空间,调试会比较困难。比如Linux系统。
微内核OS提供完整的内存保护:内核处于一个被保护的地址空间,驱动程序、网络协议及应用程序等处于程序空间中。
QNX就是微内核,使用的上面c方案,如上图。内存保护其实就是微内核中的系统服务之间:地址空间隔离。
2.5 分布式网络
网络中任何机器上的任何线程都可以直接使用任何其他机器上的任何资源。从应用程序的角度来看,本地资源和远程资源之间没有区别——不需要在应用程序中构建特殊设施来允许它们使用远程资源。
用户可以访问网络上任何地方的文件,利用任何外围设备,并在网络上的任何机器上运行应用程序(只要他们有适当的权限)。进程可以在整个网络的任何地方以相同的方式进行通信。同样,操作系统无所不在的消息传递 IPC 解释了这种流畅、透明的网络。
4.QNXNeutrino RTOS
QNX Neutrino实时操作系统(RTOS):内存受保护的微内核架构。
QNX Neutrino实时操作系统架构如下图所示:
QNX Neutrino RTOS是功能齐全性能可靠的简化版操作系统,可满足最小规格的实时嵌入系统的有限资源要求。其真正的微内核操作系统和模块化架构可使客户以较低的运行总成本创建高度优化的可靠系统。
(1). 该系统建立在真正的微内核架构上。在这种系统中,所有驱动程序、应用程序、协议栈和文件系统都在内核外部内存受保护的安全的用户空间内运行。几乎所有组件在出现故障时都能自动重启而不会影响其他组件或内核。
(2). 该系统采用模块化结构,可允许用户动态升级模块、引入新功能或实施问题修复,而无高增加停机时间和系统中断的成本。
(3). 该系统采用多核技术和内置透明分布处理技术。
(4). 该系统根据POSIX标准设计,只需通过简单地重新编译,就可移植既存代码、开源UNIX、Linux和因特网代码。通过标准应用程序接口,用户能重新使用应用程序代码。
(5). 该系统利用自适应分区技术确保系统资源满足应用要求。
(6). 该系统支持x86、PowerPC和ARM平台。
QNX Momentics工具套件(ToolSuite):基于Eclipse的灵活集成开发环境。
(1). 该工具套件包含用户所需的所有工具,便于迅速创建和优化用于QNX Neutrino实时操作系统的应用程序。从板卡启动到远程诊断,QNXMomentics工具套件为用户提供在整个开发周期内节省时间的工具,而且全部在单独、使用简便的环境中进行。
(2). 用户可选择自己喜欢的编程语言、主机和目标机。利用QNX Momentics工具套件,用户可使用C、C++、嵌入式C++编程;可以在Windows或Linux主机中开发程序;并以ARM、PowerPC和x86处理器为开发目标,所有工具都取自相同的集成开发环境(IDE)。该工具套件还提供极大的灵活性,允许用户同时混用多种编程语言和处理器架构。
(3). 该工具套件提供了大量的优质高效的分析工具,以加快产品交付所有阶段的进展。该工具套件包括许多非侵入式图形分析工具,以帮助用户轻松隔离并呈现资源的使用情况、定位瓶颈并对系统性能进行精确调整,包括应用程序剖析、系统剖析和内存分析。
(4). 该工具套件支持所有QNXNeutrino实时操作系统技术,包括多核技术、扩展网络、闪存文件系统、高级图形和透明分布处理技术等。
(5). 该工具套件中含有经过优化的GCC编译器、GDB调试程序。
5.开源代码及开源商业模式
代码路径:https://github.com/vocho/openqnx
README中,有编译的方法,但是让我安装一个软件,这个就是工具链。而这个不开源的工具链需要license。我搞了一通没成功,放弃了。这不能编译,只开放了内核核心代码但是不全啊!还不能编译,谁有可以编译的方法可以告诉我,一起学习。
审核编辑:刘清
-
嵌入式系统
+关注
关注
41文章
3547浏览量
129074 -
UNIX
+关注
关注
0文章
296浏览量
41389 -
IPC
+关注
关注
3文章
337浏览量
51756 -
qnx
+关注
关注
0文章
70浏览量
26147
原文标题:QNX入门-简介、开源代码、框架文档
文章出处:【微信号:OS与AUTOSAR研究,微信公众号:OS与AUTOSAR研究】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论