1 QNX是什么
1.1 QNX简介
QNX(发音 /ˈkjuːnɪks/)是BlackBerry 黑莓旗下的硬实时微内核操作系统(RTOS,Real-Time Operating System)。
该系统最初由Gordon Bell和Dan Dodge在1980年成立的Quantum Software Systems公司开发,原名QUNIX(Quick UNIX),后更名为QNX,主打高可靠、确定性实时、安全隔离。
QNX 内核本身体积很小,仅几十 KB,只保留 4 项最基础能力:
- 线程调度(抢占式硬实时调度)进程间消息通信 IPC中断处理基础内存管理
文件系统、网卡驱动、显卡驱动、TCP/IP 协议栈全部运行在【用户态独立进程】,不是内核模块,互相内存隔离。
-
- 优势:
某一个驱动 / 服务崩溃,仅仅杀死自己,不会导致整个系统宕机,可自动重启该组件
- Linux 宏内核:驱动、网络栈全部跑在内核空间,任何驱动异常大概率直接系统 panic、整机重启
主要应用领域
- 汽车电子:全液晶仪表、域控制器、ADAS 、车身控制医疗设备:CT、MRI、监护仪、手术机器人(IEC62304 医疗安全认证)航空轨道交通:航电、列车控制系统工业控制、机器人、电网保护设备通信基站、高端路由器
1.2 QNX与Linux的差异
| 项目 | QNX Neutrino | Linux |
|---|---|---|
| 内核类型 | 微内核 | 宏内核 |
| 实时性 | 硬实时,确定低抖动 | PREEMPT_RT 补丁实现软实时,抖动更大 |
| 故障隔离 | 驱动独立进程,单组件崩溃不宕机 | 驱动在内核,驱动崩溃容易整机 panic |
| 功能安全 | 原生支持 ASIL-D 认证 | 认证成本极高 |
| 授权 | 商业收费,需要 license | 开源免费 GPL |
| 生态 | 商业、安全工具链完善,开源库少 | 海量开源软件、AI 框架丰富 |
2 QNX SDP安装
官网 https://qnx.software/en 点击 GET QNX图标,进入如下界面
https://qnx.software/en/developers/get-started/qnx-everywhere/licensing ,有两种选项
- 非商用许可:无限使用商业许可:试用30天
2.1 获取QNX许可
我们点左边非商用的最下面的Get QNX Everywhere,进入如下界面:https://www.qnx.com/products/everywhere/
- 如果有QNX账号,直接登录如果没有账号,先注册QNX账号
先注册账号,用邮箱注册,填写信息后,注册很快。
然后回到刚才的界面,进行登录,登录后,会有如下界面:
- 先点Step 1的申请许可,30分钟内邮箱回收到邮件收到邮件后,点Step 2的链接,可以看到有许可信息
然后点Accept License,输入邮箱,确认
然后再点Deploy
最终效果如下:
2.2 下载QNX Software Center
QNX Software Center是一个QNX相关软件包的安装管理软件,我们需要QNX系统镜像,需要先安装QNX Software Center
回到之前的Step 3的界面,点击Step 3中的链接,进入如下界面,然后点击最下面的Windows Hosts
点进去后,点击Download Now进行下载
下载得到的qnx-setup-2.0.4-202501021438-win.exe,大小98M,下载需要一段时间
2.3 安装QNX Software Center
双击安装后,输入刚才注册账号用的邮箱
2.4 安装QNX SDP
我们需要的QNX系统镜像,需要先安装QNX SDP(Software Development Platform),是主机开发套件(Windows/Linux 上安装 Momentics IDE、mkqnximage 工具,用来构建 QNX 镜像)
QNX8 主要更新:
全新一代微内核,多核扩展性大幅提升,支持 2~64 核 SoC支持 x86_64、ARMv8/ARMv9GCC12 工具链,支持 C++17/C++20图形组件:Screen(QNX 原生 GUI 框架,仅 VMware 虚拟机支持图形,VirtualBox 下无显卡驱动,只能命令行)高性能网络栈,优化 PCIe、虚拟化能力
在QNX Software Center中安装需要使用的QNX SDP,点开要用的QNX SDP 8.0
然后按照提示,Next安装,可以选择安装位置
安装完成之后,对应的安装目录是如下效果:
3 VirtualBox中安装QNX系统
3.1 配置VirtualBox的全局NAT网络
打开 VirtualBox 管理器 → 菜单【管理】→【工具】→【网络】,或者直接点左侧的【网络】
如果找不到【网络】,需要先安装VirtualBox的扩展包,然后在VirtualBox的首选项中切换到“专家级”
NAT的默认配置如下,基本不需要改,确保
名称:NatNetwork
IPv4 网段:10.0.2.0/24
3.2 命令行 mkqnximage构建QNX系统镜像
Windows命令行进入刚才的QNX SDP的安装目录,先执行qnxsdp-env.bat
C:UsersAdministrator>d:
D:>cd D:Tools4qnxqnx800
D:Tools4qnxqnx800>
D:Tools4qnxqnx800>qnxsdp-env.bat
然后准备构建QNX系统镜像,可以先在指定位置创建目录,然后切换到对应目录后,使用mkqnximage构建镜像
mkdir G:qnx8-vbox
G:>cd qnx8-vbox
mkqnximage --type=vbox --arch=x86_64 --graphics=yes --hostname=qnx8 --build
--type=vbox:目标平台 VirtualBox
--arch=x86_64:x86_64 架构
--graphics=yes:启动图形桌面,不加则只有控制台
--build:构建镜像
构建完成之后,mkqnximage 会自动在 VirtualBox 里注册虚拟机,打开 VirtualBox 管理器就能看到 QNX8 虚拟机条目
也可以在命令行中启动虚拟机
mkqnximage --run
查看 QNX 虚拟机 IP
mkqnximage --getip
同时在Virtual Box的界面中也可以查看,并且也可以使用ifconfig查看IP地址
停止虚拟机的指令
mkqnximage --stop
上述使用QNX SDP完整的指令记录
C:UsersAdministrator>d:
D:>cd D:Tools4qnxqnx800
D:Tools4qnxqnx800>
D:Tools4qnxqnx800>qnxsdp-env.bat
D:Tools4qnxqnx800>set QNX_BASE=D:/Tools4/qnx/qnx800/
D:Tools4qnxqnx800>if "/" == "/" set QNX_BASE=D:/Tools4/qnx/qnx800
D:Tools4qnxqnx800>set QNX_TARGET=D:/Tools4/qnx/qnx800/target/qnx
D:Tools4qnxqnx800>set QNX_HOST=D:/Tools4/qnx/qnx800/host/win64/x86_64
D:Tools4qnxqnx800>set QNX_CONFIGURATION_EXCLUSIVE=C:UsersAdministrator/.qnx
D:Tools4qnxqnx800>set QNX_CONFIGURATION=C:UsersAdministrator/.qnx
D:Tools4qnxqnx800>set MAKEFLAGS=-ID:/Tools4/qnx/qnx800/target/qnx/usr/include
D:Tools4qnxqnx800>set PATH=D:/Tools4/qnx/qnx800/host/win64/x86_64/usr/bin;D:/Tools4/qnx/qnx800/host/common/bin;C:Program
##省略...
D:Tools4qnxqnx800>set PYTHONDONTWRITEBYTECODE=1
D:Tools4qnxqnx800>set TMPDIR=C:UsersADMINI~1AppDataLocalTemp
D:Tools4qnxqnx800>if exist D:/Tools4/qnx/qnx800license-env.bat D:/Tools4/qnx/qnx800license-env.bat
D:Tools4qnxqnx800>mkdir G:qnx8-vbox
D:Tools4qnxqnx800>g:
G:>cd qnx8-vbox
G:qnx8-vbox>mkqnximage --type=vbox --arch=x86_64 --graphics=yes --hostname=qnx8 --build
Options changed
To allow root ssh, you need an ssh identity file. You probably want to use
an option such as:
--ssh-ident=~/.ssh/id_ed25519.pub
To just avoid future messages use --ssh-ident=none
Run mkqnximage --help=ssh-ident for more information
Generating output/build/mount_fs.sh
Generating output/build/expandfs.sh
Generating output/build/post_startup.sh
Generating output/build/start_net.sh
Generating output/build/startup.sh
Generating output/build/passwd
Generating output/build/group
Generating output/build/shadow
Generating output/build/ifs.build
Generating output/build/system.build
Generating output/build/data.build
Building disk
Generating system partition . . .
Warning: Host file 'etc/system/config/img.conf' missing.
Warning: Host file 'usr/share/fonts' missing.
Warning: Host file 'bin/fc-cache' missing.
Warning: Host file 'usr/bin/gles2-gears' missing.
Warning: Host file 'usr/bin/sw-vsync' missing.
Warning: Host file 'lib/libimg.so.1' missing.
Warning: Host file 'usr/lib/__LIBFREETYPE__' missing.
Warning: Host file 'usr/lib/libfontconfig.so.1' missing.
Warning: Host file 'usr/lib/__LIBPNG16__' missing.
Warning: Host file 'lib/dll/img_codec_bmp.so' missing.
Warning: Host file 'lib/dll/img_codec_gif.so' missing.
Warning: Host file 'lib/dll/img_codec_jpg.so' missing.
Warning: Host file 'lib/dll/img_codec_png.so' missing.
Warning: Host file 'lib/dll/img_codec_sgi.so' missing.
Warning: Host file 'lib/dll/img_codec_tga.so' missing.
Warning: Host file 'lib/dll/img_codec_tif.so' missing.
Generating data partition . . .
Generating ifs . . .
Building boot partition . . .
Building disk . . .
Create
Target type: vbox
Architecture: x86_64
Security: no
Repositories:
D:/Tools4/qnx/qnx800/target/qnx
Options with non-default values:
--graphics='yes'
For full list of options, run "mkqnximage --options"
G:qnx8-vbox>mkqnximage --run
G:qnx8-vbox>mkqnximage --getip
192.168.56.101
G:qnx8-vbox>mkqnximage --stop
G:qnx8-vbox>
3.3 QNX虚拟机的其它配置
Virtual Box虚拟机中的qnx8的界面不能自动缩放,之前在ubuntu中需要这种情况,是安装增强功能,不过试了下qnx8不支持安装增强功能
默认的内存、显存、CPU如果觉得不合适,可以手动修改
4 QNX系统简单使用
由于Virtual Box虚拟机中的qnx8的界面不能自动缩放,我们可以使用SSH登录来使用它的命令行界面。
IP地址上面介绍过如何获取,SSH登录后,用户名和密码都是root,登录后如下,可以使用uname -a查看QNX的版本
也可以使用top指令查看系统内存和CPU的使用
5 总结
本篇介绍了什么是QNX,以及如何在Windosw系统的VirtualBox虚拟机中安装QNX系统,先简单介绍了什么是QNX,然后介绍如何获取QNX许可,如何安装QNX的软件中心和SDP,如何进行QNX系统镜像构建和配置到VirtualBox虚拟机中,最后演示简单使用QNX系统。
301