3、开发环境搭建:QNX SDP 7.1安装、QNX Momentics IDE配置、QNX虚拟机镜像制作与启动

好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,QNX的开发环境搭建比Linux要「讲究」一些,没那么随意。但只要你按我的步骤来,半小时内就能跑起来。

我个人习惯把环境分成三层:宿主系统(你用的电脑)、开发工具链(SDP + IDE)、目标运行环境(虚拟机或开发板)。这三层打通了,后面写代码、调试、部署就顺了。

3.1 QNX SDP 7.1 安装

SDP 全称 Software Development Platform,说白了就是 QNX 的 SDK。它包含了编译器、库、头文件、调试工具,还有最重要的——BSP(板级支持包)。

下载与授权

你需要去 QNX 官网(blackberry.qnx.com)注册一个账号。个人学习可以用评估版,功能完整,只是有使用期限。我在项目中遇到过客户买了商业授权但安装时忘了激活,结果编译出来的镜像跑不起来——嗯,这种低级错误我也犯过。

安装步骤(以 Ubuntu 20.04 为例)

  1. 下载 qnx-sdp-7.1.0-xxx-linux.run 文件
  2. 赋予执行权限:chmod +x qnx-sdp-7.1.0-xxx-linux.run
  3. 运行安装:sudo ./qnx-sdp-7.1.0-xxx-linux.run
  4. 选择安装路径,我建议放在 /opt/qnx710,别放 home 目录下,后面权限问题烦得很
  5. 安装过程中会提示输入 license,评估版选「Evaluate」即可
注意:QNX SDP 7.1 依赖 32 位库。如果你用的是 64 位 Ubuntu,记得装 sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386。我曾经在一台新装的 Ubuntu 22.04 上折腾了半小时,就是因为缺了这些 32 位库,安装器直接报段错误。

验证安装

安装完成后,设置环境变量:

export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH

然后试试:qcc --version。如果能看到版本信息,说明装好了。

3.2 QNX Momentics IDE 配置

Momentics IDE 是基于 Eclipse 的,但 QNX 做了深度定制。你想想看,一个 IDE 要同时支持 C/C++ 开发、内核调试、多核跟踪、性能分析,Eclipse 的插件架构确实是最合适的。

安装 IDE

SDP 安装包其实已经包含了 IDE,就在 /opt/qnx710/ide 目录下。直接运行:

/opt/qnx710/ide/qde

第一次启动会让你选择工作空间(workspace)。我建议单独建一个目录,比如 ~/qnx_workspace,别跟其他项目混在一起。

配置交叉编译器

IDE 启动后,需要告诉它你的 SDP 装在哪:

  1. 菜单栏:Window → Preferences → QNX → QNX SDK Paths
  2. 点击 Add,选择 /opt/qnx710
  3. IDE 会自动识别出可用的 target 架构(比如 x86_64、aarch64、armv7 等)
小技巧:如果你同时做 x86 和 ARM 的开发,可以在同一个 IDE 里添加多个 SDK 路径。切换项目时 IDE 会自动选择对应的编译器。我在做车载项目时,经常需要在 x86 虚拟机里调试逻辑,再交叉编译到 ARM 开发板上跑,这个功能帮了大忙。

创建第一个 QNX 工程

File → New → QNX Project → QNX C/C++ Project。选一个简单的「Hello World QNX Application」模板。你会看到工程属性里自动关联了 QNX 的库和头文件路径。

编译一下试试:右键工程 → Build Project。如果控制台输出 Build Finished,说明环境通了。

3.3 QNX 虚拟机镜像制作与启动

没有开发板?没关系。QNX 官方提供了虚拟机镜像,你可以在 VMware 或 VirtualBox 上跑。我个人更推荐 VMware,因为它的虚拟网卡和串口模拟更稳定。

获取虚拟机镜像

QNX SDP 安装目录下有个 images 文件夹:

/opt/qnx710/target/qnx7/x86_64/boot/images/

里面有个 qnx7-ifs.img 文件,这就是 QNX 的启动镜像(IFS = Image File System)。

制作可启动的虚拟机磁盘

光有 IFS 还不够,你需要一个完整的磁盘镜像,包含引导加载器和文件系统。QNX 提供了 mkxfs 工具来制作:

# 创建一个 2GB 的磁盘镜像
dd if=/dev/zero of=qnx7_vm.img bs=1M count=2048

# 分区(使用 fdisk 或 parted)
# 创建一个主分区,类型为 FAT32

# 格式化并复制 IFS
mkxfs -t qnx7_vm.img -i /opt/qnx710/target/qnx7/x86_64/boot/images/qnx7-ifs.img

嗯,这里要注意:mkxfs 的参数顺序不能错。我刚开始用的时候把 -i-t 写反了,结果做出来的镜像启动到一半就挂了。

在 VMware 中启动

创建虚拟机时选择「Other Linux 64-bit」,然后:

  1. 硬盘使用我们刚做的 qnx7_vm.img
  2. 内存建议 512MB 以上
  3. 网络选 NAT 模式(方便后面调试)
  4. 串口添加一个,用于输出控制台日志

启动后你会看到 QNX 的启动日志刷刷地滚。如果一切正常,最后会停在 login: 提示符。默认用户名 root,密码为空。

验证网络连通性

进入系统后,执行 ifconfig 查看 IP 地址。然后在宿主机上 ping 一下这个 IP。如果能通,恭喜你——开发环境搭建完成了!

常见问题与避坑

  • 虚拟机启动黑屏:检查 IFS 镜像是否完整,或者 VMware 版本是否太新。我遇到过 VMware 17 对 QNX 7.1 的兼容性问题,降级到 16 就好了。
  • 网络不通:QNX 默认的网卡驱动可能没加载。在启动参数里加 vmxnet3 试试。
  • 串口没输出:检查 VMware 的串口设置,要选「使用输出文件」或「使用物理串口」。

好了,环境搭好了。下一章我们开始写第一个 QNX 程序,并且用 Momentics IDE 远程调试它。你想想看,在宿主机上写代码,在虚拟机里跑,还能单步调试——这种感觉,比在 Linux 上开发爽多了。

我的习惯:每次搭建新环境,我都会在虚拟机里跑一遍 QNX 的 pci -vvv 命令,看看硬件识别情况。这能帮你快速定位驱动问题,而不是等到后面调试时才发现网卡没认到。