3、开发环境搭建:QNX SDP安装与配置、QNX Hypervisor开发包、目标硬件平台准备
好,咱们进入实战前的第一道坎——搭环境。
说实话,我见过太多工程师在环境配置上卡了一整天。明明代码逻辑没问题,就是编译不过。最后发现是环境变量没配好,或者开发包版本对不上。所以这一章,我带你一步步把地基打牢。
3.1 QNX SDP 安装与配置
QNX Software Development Platform(SDP)是咱们的核心工具链。它包含了编译器、调试器、库文件,还有最重要的——BSP(板级支持包)。
安装步骤:
- 获取安装包:从 QNX 官网或你的企业账户下载 SDP 7.1 或 8.0 版本。我个人建议用 7.1,生态更成熟,坑少一些。
- 运行安装程序:在 Linux 主机上执行
./qnx-sdp-7.1.0.run。注意,QNX 开发环境目前只支持 Linux 和 Windows(通过 Cygwin)。我习惯在 Ubuntu 20.04 上搞,稳定。 - 选择安装路径:默认是
/opt/qnx710。别改,后面很多脚本都硬编码了这个路径。我曾经手贱改到/home/myqnx,结果 BSP 编译脚本死活找不到头文件…… - 配置环境变量:安装完后,执行
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:老牌座舱芯片,生态成熟。
硬件准备清单:
- 开发板:至少一块,建议两块。一块跑系统,一块备用调试。我当年只有一块板子,烧录时电源线松了,板子变砖,项目延期一周……
- 调试工具:USB 转串口线(FT232 芯片的,稳定)、JTAG 调试器(比如 Lauterbach Trace32,贵但好用)。
- 电源:12V/3A 直流电源,注意正负极别接反。开发板背面通常有丝印,仔细看。
- 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 到底是怎么把两个系统揉在一起的。