2. 虚拟化与隔离基础

说实话,做嵌入式虚拟化开发,环境搭不好,后面全是坑。我见过太多人卡在第一步——装好了跑不起来,或者跑起来了发现许可证过期。这一章,咱们就把这三件事一次性搞定。

本章核心目标: 完成 QNX SDP 7.1 的完整安装、激活 Hypervisor 许可证、配置 QEMU 模拟器,确保你能在宿主机上启动第一个虚拟化实例。

2.1 QNX SDP 7.1 安装:别踩这些坑

QNX Software Development Platform (SDP) 7.1 是咱们整个课程的基础。它包含了编译器、调试器、BSP 以及最重要的——QNX Hypervisor 的运行时库。

系统要求(我建议你至少满足这些):

项目 最低配置 推荐配置
操作系统 Ubuntu 20.04 LTS / RHEL 8.x Ubuntu 22.04 LTS
CPU 4 核 x86_64 8 核以上(支持虚拟化)
内存 8 GB 16 GB 或更多
磁盘 50 GB 空闲 100 GB SSD

安装步骤其实不复杂,但有几个细节容易翻车。

  1. 获取安装包: 从 QNX 官网或你的销售代表那里拿到 qnx-sdp-7.1.0-xxx.run 文件。注意,这个文件大约 4-5 GB。
  2. 赋予执行权限: chmod +x qnx-sdp-7.1.0-xxx.run
  3. 运行安装: sudo ./qnx-sdp-7.1.0-xxx.run
  4. 选择安装路径: 我个人习惯放在 /opt/qnx710,避免权限问题。
注意: 安装路径不要包含空格或中文。我曾经有个同事把路径设成了“我的 QNX 安装”,结果编译时各种找不到头文件,排查了半天。

安装完成后,记得设置环境变量。把下面这行加到你的 ~/.bashrc 里:

export QNX_HOST=/opt/qnx710/host/linux/x86_64
export QNX_TARGET=/opt/qnx710/target/qnx7
export PATH=$QNX_HOST/usr/bin:$PATH
export MAKEFLAGS=-j$(nproc)

然后 source ~/.bashrc。验证一下:

qcc --version

如果能看到版本信息,说明安装成功了。

2.2 QNX Hypervisor 许可激活:一次搞定,别折腾

QNX Hypervisor 不是免费的。你需要一个有效的许可证文件。嗯,这里要注意,许可证分两种:评估版和正式版。评估版通常有 30 天或 90 天的限制。

激活流程:

  1. 获取许可证文件: 从 BlackBerry QNX 的许可门户下载 .lic 文件。
  2. 放置许可证: 将文件复制到 $QNX_TARGET/etc/qnx/license/ 目录下。
  3. 验证激活: 使用 qlicense -l 命令查看当前许可证状态。
# 查看所有已安装的许可证
qlicense -l

# 输出示例:
# Licensed features:
#   qnx_hypervisor_7.1 : permanent
#   qnx_sdp_7.1        : permanent
小技巧: 如果你在虚拟机里开发,记得把宿主机的 MAC 地址固定下来。因为有些许可证是绑定 MAC 的。我遇到过好几次,虚拟机 MAC 一变,许可证就失效了。

如果激活失败,最常见的原因是环境变量没设对。检查一下 QNX_TARGET 是否指向了正确的路径。

2.3 QEMU 模拟器配置:让虚拟化跑起来

QEMU 是咱们在开发阶段的主力。你不可能每次调试都往真机上烧写,太慢了。QEMU 可以模拟 ARM 和 x86 平台,配合 QNX Hypervisor 做多域隔离验证。

安装 QEMU:

sudo apt-get install qemu-system-arm qemu-system-x86_64

QNX SDP 7.1 自带了针对 QEMU 的 BSP(Board Support Package)。你可以在 $QNX_TARGET/qnx7/qemu/ 下找到预编译的内核和启动脚本。

启动一个 QNX 虚拟机实例:

# 进入 QEMU 相关目录
cd $QNX_TARGET/qnx7/qemu/x86_64

# 启动虚拟机
./qemu-system-x86_64 \
  -m 1024 \
  -smp 2 \
  -kernel bzImage \
  -append "root=/dev/ram0 console=ttyS0" \
  -initrd initrd.img \
  -nographic

你会看到 QNX 内核启动的日志,最后出现 # 提示符。这说明 QEMU 环境已经跑起来了。

避坑指南: 如果你用的是 Ubuntu 22.04,默认的 QEMU 版本可能太高,和 QNX SDP 7.1 自带的 BSP 不兼容。我曾经被这个问题卡了一整天。解决方案是安装 QEMU 6.2.0 版本:sudo apt-get install qemu-system-x86=1:6.2.0+dfsg-1。

2.4 验证 Hypervisor 是否可用

环境搭好了,咱们得确认 Hypervisor 真的能用。QNX 提供了一个简单的测试工具 qvm。

# 查看 qvm 版本
qvm -v

# 输出示例:
# QVM (QNX Virtual Machine) version 7.1.0
# Built on: Jan 15 2023 14:30:00

如果能看到版本号,说明 Hypervisor 的运行时库已经正确安装并激活了。

接下来,咱们可以尝试启动一个最小的虚拟机实例。创建一个 test.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<hypervisor>
  <vcpu_count>1</vcpu_count>
  <memory>
    <size>128M</size>
  </memory>
  <os>
    <type>qnx</type>
    <image>/path/to/ifs-qnx.bin</image>
  </os>
</hypervisor>

然后运行:

qvm test.xml

如果一切正常,你会看到第二个 QNX 系统在 Hypervisor 之上启动。这就是多域隔离的雏形。

2.5 本章知识结构总览

下面这张图把咱们刚才做的事情串起来了。你想想看,从宿主机到 QEMU,再到 Hypervisor 和虚拟机,每一层都有它的作用。

开发环境搭建知识结构图 开发环境搭建知识结构 宿主机 (Ubuntu 22.04 LTS) QNX SDP 7.1 (编译器 + 库 + BSP) QEMU 模拟器 (x86_64 / ARM) Hypervisor 许可证 (.lic) QNX 虚拟机实例 (多域隔离验证) 说明:每一层都依赖下一层,许可证激活是 Hypervisor 可用的前提

说白了,开发环境搭建就是三层结构:宿主机操作系统、QNX SDP 开发套件、以及上层的 QEMU 和 Hypervisor 运行时。每一层都不可或缺。

我的经验: 环境搭建完成后,建议你做一个快照或备份。这样万一搞坏了,可以快速恢复,不用从头再来。

好,到这里,你的开发环境应该已经就绪了。QNX SDP 7.1 装好了,Hypervisor 许可证激活了,QEMU 也能跑起来了。下一步,咱们就可以开始真正接触 QNX Hypervisor 的架构和配置了。