赞
踩
一直想介绍下QNX,因为其框架对其他微内核有很多可借鉴的地方,但是其是一个商业系统,不开源,只能看到部分的软件接口,在其上进行开发。我们的老一套:代码下载、编译、运行是搞不了了,真是让人头大啊!
一些重要的东西先放这里:
1)QNX的开源代码:https://github.com/vocho/openqnx
2)QNX的框架文档:http://myqnx.com/developers/docs/6.3.0SP3/momentics/bookset.html
1980年,加拿大滑铁卢大学的学生戈登贝尔(Gordon Bell)和丹道奇(Dan Dodge)都上了实时操作系统设计的课程,课程要求学生构建一个基本的实时微内核,并成立了 Quantum Software Systems 公司。
1982年,戈登贝尔(Gordon Bell)和丹道奇(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 和哈曼工业在智能手机和车载音频娱乐系统之间找到合作空间。
开源小插曲:
参考本文第5节:开源代码中介绍,在07年的时候,还没被黑莓收购前更改了下商业模式,开源了内核代码,但是应用代码没放开。
QNX 具有安全、可靠、可信的特点,因此通常应用于对安全性要求极高的领域,例如汽车、航空、核电站、工业自动化等领域。
carOS:QNX 一直是汽车领域最大的操作系统
robotOS:工业和医疗领域,例如手术机器人达芬奇
weaponOS:例如洛克希德·马丁的武器
criticalTaskOS:核电站、宇航领域
QNX Neutrino实时操作系统,QNX Momentics工具套件和QNX Aviage中间件系列基于组件的架构共同构成业界可靠性和延展性最强的架构,帮助建立高性能的嵌入式系统。包括思科、戴姆勒、通用电气、洛克希德·马丁和西门子在内的众多全球知名技术领先企业,都将QNX技术应用在网络路由器、车载远程信息处理和信息娱乐系统、工业控制系统、医疗设备、安全防卫系统和其他任务关键性和生命关键型应用中。
上面提到工具套件,就知道界面化的东西,核心代码是看不到的,我们学习到的源码内容和知识也有限了。
QNX是一个分布式、可扩展、遵从POSIX规范的类Unix硬实时微内核操作系统。
QNX为微内核的架构,微内核只提供四种服务:
- 进程调度
- 进程间通信
- 底层网络通信
- 中断处理
驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。
QNX是商业类Unix实时操作系统,主要针对嵌入式系统市场。它提供用户可控制的、优先级驱动的、急者优先抢占的调度方式。QNX 内核自身开销小、上下文切换快,在同样的硬件条件下给实时应用留下更大的余地,因而它在实时控制、通信、多媒体信息处理等对时间敏感的应用领域大有用武之地。
QNX 同时也是一个可嵌入的操作系统。它由微内核和一组共操作的进程构成,具有高度可伸缩性,可灵活的剪裁。最小配置只占用几十 KB 内存。因此,它可以广泛地嵌入到智能机器、智能仪器仪表、通信设备等应用中去。
QNX是一种商用的遵从POSIX(可移植操作系统接口, Portable Operating System Interface,缩写为POSIX, 是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称)规范的类Unix实时操作系统,目标市场主要是面向嵌入式系统。
QNX采用微内核架构,操作系统中的多数功能是以许多小型的task来执行,它们被称为server。这样的架构使得用户和开发者可以关闭不需要的功能,而不需要改变操作系统本身。
QNX是一个微内核实时操作系统,其核心仅提供4种服务:
其进程在独立的地址空间运行。所有其它OS服务,都实现为协作的用户进程,因此QNX核心非常小巧而且运行速度极快。QNX的微内核独立自处于一个被保护的地址空间,驱动程序、网络协议和应用程序处于程序空间中。
- 微内核架构的优点:
(1). 驱动程序、网络协议、文件系统等操作系统模块和内核相互独立,任何模块的故障都不会导致内核的崩溃;
(2). 驱动程序、网络协议、文件系统和应用程序都处于程序空间,都调用相同的内核API,开发与调试和应用程序没有区别;
(3). 操作系统功能模块可以根据需要动态地加载或卸载,不需要编译内核。在高可靠性要求的情况下,可以编写监视模块,对可靠性要求高的模块进行监视,必要的时候重新启动或重新加载而无须重启系统。高可靠性的内核结构使QNX具备了高可靠性嵌入式操作系统的本质特征。
QNX Neutrino操作系统的微内核,管理一组协作的进程,如下图所示,这种结构不是一种层级的组织,更像是一个团队,因为不同的进程可以通过内核来协调交互。QNX Neutrino充当一个“软件总线”的角色,可以在需要的时候动态的插入和移除系统模块。
华为鸿蒙的分布式软总线是不是从这里找到的灵感?
更多微内核介绍参考之前的文章:seL4微内核入门-微内核介绍
进程间通信 (IPC) 是将应用程序设计为一组协作进程的关键。
QNX 是同类中第一个使用消息传递作为IPC 基本手段的商业操作系统。操作系统的强大功能、简单性和优雅性在很大程度上归功于在整个系统中完全集成了消息传递方法。
在 QNX Neutrino 中,消息是从一个进程传递到另一个进程的字节包。
操作系统对消息的内容没有任何特殊意义——消息中的数据对消息的发送者和接收者都有意义,但对其他人没有意义。
消息传递不仅允许进程相互传递数据,而且还提供了一种同步多个进程执行的方法。当它们发送、接收和回复消息时,进程会经历各种“状态变化”,这些变化会影响它们运行的时间和时间。了解它们的状态和优先级后,微内核可以尽可能高效地调度所有进程,以充分利用可用的 CPU 资源。这种单一的、一致的方法——消息传递——因此在整个系统中不断地运行。
实时应用程序和其他关键任务应用程序通常需要可靠的IPC 形式,因为构成此类应用程序的过程是如此紧密相关。QNX Neutrino 的消息传递设计强加的纪律有助于为应用程序带来秩序和更高的可靠性。
QNX Neutrino利用MMU,在受保护的环境中实现了POSIX的线程模型。
针对内存保护,有以下几种情况:
不提供内存保护:所有程序位于同一个地址空间,应用程序可以访问所有空间,效率较高,但是程序指针错误可能造成内核崩溃
单内核OS提供部分内存保护:用户层和系统层进行了隔离,内核和各种驱动、协议栈在同一个地址空间,应用程序在单独空间。内核模块处于一个保护空间,效率较高,应用程序无法访问,系统的稳定性也得到提高。由于内核模块处于保护空间,调试会比较困难。比如Linux系统。
微内核OS提供完整的内存保护:内核处于一个被保护的地址空间,驱动程序、网络协议及应用程序等处于程序空间中。
QNX就是微内核,使用的上面c方案,如上图。内存保护其实就是微内核中的系统服务之间:地址空间隔离。
网络中任何机器上的任何线程都可以直接使用任何其他机器上的任何资源。从应用程序的角度来看,本地资源和远程资源之间没有区别——不需要在应用程序中构建特殊设施来允许它们使用远程资源。
用户可以访问网络上任何地方的文件,利用任何外围设备,并在网络上的任何机器上运行应用程序(只要他们有适当的权限)。进程可以在整个网络的任何地方以相同的方式进行通信。同样,操作系统无所不在的消息传递 IPC 解释了这种流畅、透明的网络。
QNX Neutrino实时操作系统(RTOS):内存受保护的微内核架构。
QNX Neutrino实时操作系统架构如下图所示:
QNX Neutrino RTOS是功能齐全性能可靠的简化版操作系统,可满足最小规格的实时嵌入系统的有限资源要求。其真正的微内核操作系统和模块化架构可使客户以较低的运行总成本创建高度优化的可靠系统。
(1). 该系统建立在真正的微内核架构上。在这种系统中,所有驱动程序、应用程序、协议栈和文件系统都在内核外部内存受保护的安全的用户空间内运行。几乎所有组件在出现故障时都能自动重启而不会影响其他组件或内核。
(2). 该系统采用模块化结构,可允许用户动态升级模块、引入新功能或实施问题修复,而无高增加停机时间和系统中断的成本。
(3). 该系统采用多核技术和内置透明分布处理技术。
(4). 该系统根据POSIX标准设计,只需通过简单地重新编译,就可移植既存代码、开源UNIX、Linux和因特网代码。通过标准应用程序接口,用户能重新使用应用程序代码。
(5). 该系统利用自适应分区技术确保系统资源满足应用要求。
(6). 该系统支持x86、PowerPC和ARM平台。
QNX Momentics工具套件(Tool Suite):基于Eclipse的灵活集成开发环境。
(1). 该工具套件包含用户所需的所有工具,便于迅速创建和优化用于QNX Neutrino实时操作系统的应用程序。从板卡启动到远程诊断,QNX Momentics工具套件为用户提供在整个开发周期内节省时间的工具,而且全部在单独、使用简便的环境中进行。
(2). 用户可选择自己喜欢的编程语言、主机和目标机。利用QNX Momentics工具套件,用户可使用C、C++、嵌入式C++编程;可以在Windows或Linux主机中开发程序;并以ARM、PowerPC和x86处理器为开发目标,所有工具都取自相同的集成开发环境(IDE)。该工具套件还提供极大的灵活性,允许用户同时混用多种编程语言和处理器架构。
(3). 该工具套件提供了大量的优质高效的分析工具,以加快产品交付所有阶段的进展。该工具套件包括许多非侵入式图形分析工具,以帮助用户轻松隔离并呈现资源的使用情况、定位瓶颈并对系统性能进行精确调整,包括应用程序剖析、系统剖析和内存分析。
(4). 该工具套件支持所有QNX Neutrino实时操作系统技术,包括多核技术、扩展网络、闪存文件系统、高级图形和透明分布处理技术等。
(5). 该工具套件中含有经过优化的GCC编译器、GDB调试程序。
代码路径:https://github.com/vocho/openqnx
README中,有编译的方法,但是让我安装一个软件,这个就是工具链。而这个不开源的工具链需要license。我搞了一通没成功,放弃了。这不能编译,只开放了内核核心代码但是不全啊!还不能编译,shit!谁有可以编译的方法可以告诉我,一起学习。下面介绍下目前QNX的商业模式:
加拿大渥太华, 2007年9月12日 -- QNX软件系统公司今天宣布将在一个新的混合软件授权模式下开放其QNX® Neutrino® 实时操作系统的源码,革命性地创造了结合开源软件和商业软件优势的,新的软件开发模式。
新的混合软件模式:
这些变化,是QNX公司新建的混合软件模式的一部份。以提高开发的激情,并帮助用户达到最终盈利的目标,
检阅QNX的源代码完全免费,但使用了QNX Neutrino的商业产品依然要支付授权费,同时,商业开发也需要购买QNX Momentics® 开发环境。但是,非商业的开发,学校以及被授权的合作伙伴可以免费得到QNX的开发工具以及执行环境。
用户和社区里的开发者,还可以如参加开源软件项目开发一样,参加到QNX的开发进程中来。通过一个透明的开发过程,QNX的软件设计师将公布开发计划,新的源码,以及出错修改,并对开发进程进行监控。他们同时也通过公开的论坛,维客,以及源码仓库同客户和QNX社区进行交流。
“通过这个新的透明式开发过程,开放源码和开发工具,QNX将成为商业软件开发中的改革先锋,”Dan Dodge,QNX软件系统公司首席执行官说,“所有的商业开发者以及爱好者,都将史无前例地接触我们的软件中的‘皇冠上的珠宝’,并以此为基础来创造下一代的计算机技术革新。”
一般的思路是,核心的东西我不告诉你;新的赛道是核心的东西我告诉你这样用户才会多,先获得市场。但是你不能商用二次卖钱,如果抄袭我的你永远跟着我屁股后面,因为我的市场占用率已经很高了。
更多开源原价的商业模式参考:https://www.kwm.com/cn/zh/insights/latest-thinking/how-can-enterprises-build-their-own-circle-of-friends-under-the-open-source-ecosystem.html
http://myqnx.com/developers/docs/6.3.0SP3/momentics/bookset.html
文档里面有框架介绍,还有各个模块的设计框架,函数列表,挺有参考意义的,可以使用浏览器自动的中文翻译,点点看看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。