3、开发环境搭建:QNX SDP安装与配置、QNX Hypervisor开发包、目标硬件平台准备

好,咱们进入实战前的第一道坎——搭环境。

说实话,我见过太多工程师在环境配置上卡了一整天。明明代码逻辑没问题,就是编译不过。最后发现是环境变量没配好,或者开发包版本对不上。所以这一章,我带你一步步把地基打牢。

3.1 QNX SDP 安装与配置

QNX Software Development Platform(SDP)是咱们的核心工具链。它包含了编译器、调试器、库文件,还有最重要的——BSP(板级支持包)。

安装步骤:

  1. 获取安装包:从 QNX 官网或你的企业账户下载 SDP 7.1 或 8.0 版本。我个人建议用 7.1,生态更成熟,坑少一些。
  2. 运行安装程序:在 Linux 主机上执行 ./qnx-sdp-7.1.0.run。注意,QNX 开发环境目前只支持 Linux 和 Windows(通过 Cygwin)。我习惯在 Ubuntu 20.04 上搞,稳定。
  3. 选择安装路径:默认是 /opt/qnx710。别改,后面很多脚本都硬编码了这个路径。我曾经手贱改到 /home/myqnx,结果 BSP 编译脚本死活找不到头文件……
  4. 配置环境变量:安装完后,执行 source /opt/qnx710/qnxsdp-env.sh。建议把这行加到 ~/.bashrc 里,省得每次开终端都要手动 source。

验证安装:

$ qcc --version
QCC 5.4.0 (GCC) for QNX 7.1.0
$ which qcc
/opt/qnx710/host/linux/x86_64/usr/bin/qcc

看到版本号,说明 SDP 装好了。

3.2 QNX Hypervisor 开发包

Hypervisor 开发包不是 SDP 自带的,需要单独下载。它包含了虚拟机管理程序的核心库、示例代码,还有文档。

安装要点:

  • 版本匹配:Hypervisor 开发包必须和 SDP 版本对应。比如 SDP 7.1 配 Hypervisor 2.2。我踩过坑,用 2.1 的开发包去编译 7.1 的 BSP,结果链接报错,折腾了两小时。
  • 解压到指定目录:通常解压到 /opt/qnx710/target/qnx7/x86_64/usr/lib/hypervisor。这样编译时链接器能自动找到库文件。
  • 检查示例代码:开发包里有个 samples/ 目录,里面有最简单的虚拟机启动示例。我建议你先跑一遍这个,验证环境是否通。

我的小技巧:

把 Hypervisor 开发包的路径加到 QNX_TARGET 环境变量里。这样你写 Makefile 时,直接用 -lhypervisor 就能链接,不用写绝对路径。

3.3 目标硬件平台准备

座舱项目常用的硬件平台有:

  • NXP i.MX8QM:双核 Cortex-A72 + 四核 Cortex-A53,带 GPU 和 VPU。我上一个项目用的就是这个,跑 Android 和 QNX 双系统,稳得很。
  • TI Jacinto TDA4VM:专为汽车座舱设计,带 C7x DSP 和 MMA 加速器。
  • Renesas R-Car H3:老牌座舱芯片,生态成熟。

硬件准备清单:

  1. 开发板:至少一块,建议两块。一块跑系统,一块备用调试。我当年只有一块板子,烧录时电源线松了,板子变砖,项目延期一周……
  2. 调试工具:USB 转串口线(FT232 芯片的,稳定)、JTAG 调试器(比如 Lauterbach Trace32,贵但好用)。
  3. 电源:12V/3A 直流电源,注意正负极别接反。开发板背面通常有丝印,仔细看。
  4. SD 卡或 eMMC:用于存放 QNX 镜像和 Hypervisor 配置文件。建议用 32GB 以上的 Class 10 卡,速度够快。

⚠️ 特别注意:

开发板的启动模式跳线一定要先确认好。i.MX8QM 有 BT_MODE 引脚,设置不对的话,板子根本不会从 SD 卡启动。我见过有人焊了跳线帽,结果一直从 eMMC 启动,刷了十几次 SD 卡都没反应……

3.4 环境验证:跑一个最小 Hypervisor 示例

环境搭好了,咱们跑个例子验证一下。这是我从开发包里抄出来的最小示例,就两个虚拟机:一个跑 QNX,一个跑裸机程序。

# 编译 QNX 虚拟机镜像
cd /opt/qnx710/target/qnx7/x86_64/usr/lib/hypervisor/samples/guest_qnx
make

# 编译裸机虚拟机镜像
cd ../guest_baremetal
make

# 生成 Hypervisor 配置文件
cd ..
./create_config.sh -o my_config.xml

# 启动 Hypervisor
qvm -c my_config.xml

如果终端输出类似:

QVM: Starting hypervisor...
QVM: Guest 0 (QNX) booting...
QVM: Guest 1 (baremetal) running...

恭喜你,环境搭建成功!

常见问题排查:

问题原因解决
编译报错找不到头文件环境变量没配好重新 source qnxsdp-env.sh
qvm 命令找不到Hypervisor 开发包没装对路径检查 /opt/qnx710/target/qnx7/x86_64/usr/bin/ 下有没有 qvm
板子启动后无输出串口线接错或波特率不对检查串口线 TX/RX,波特率设为 115200

嗯,到这里,开发环境就算彻底搭好了。下一章咱们开始写第一个虚拟机——一个简单的仪表盘应用。到时候你会看到,Hypervisor 到底是怎么把两个系统揉在一起的。