本文在整个 Hypervisor 文档中层级:
QNX Hypervisor
----> Building Hypervisor for Safety 2.2 User's Guide
-----------> Building a QNX Hypervisor for Safety system
------------------> Building guests
QNX 管理程序支持Linux和Android客户机,前提是这些客户机是为虚拟硬件构建的,而虚拟硬件可以由管理程序在VM中呈现给客户机。
Building Linux guests
下面的信息只是对在QNX管理程序系统中实现Linux客户程序所需做的工作的概述。有关如何配置和构建Linux系统的信息,请参阅您的Linux文档。
当您构建非QNX客户机以在QNX虚拟化环境中运行时,您必须为正确的硬件架构构建它们,并配置它们将在其中运行的vm以匹配它们的期望。
Linux操作系统作为客户端实现时,需要执行以下操作:
- 从您最喜欢的Linux源代码中获取一个适合于构建您的Linux操作系统的Linux构建环境,并对其进行配置。
- 按照Linux说明在Linux工作目录中构建客户机。
- 编写一个VM配置文件(例如,linuxvm1.qvmconf),在VM中组装您的Linux操作系统期望在其运行平台上找到的组件。有关示例文件,请参阅下面的“Linux客户端虚拟机的配置文件(示例)”。
- 构建Linux客户机后,可以将其包含在新的管理程序磁盘映像中,然后可以将其传输到目标系统。
添加驱动程序、应用程序和实用程序
为了在虚拟化环境中发挥作用,您的Linux客户机可能需要包含一些额外的驱动程序、应用程序和实用程序。例如:
- 要使用虚拟机监控程序提供给它的VIRTIO硬件,必须将Linux客户内核配置为包含VIRTIO驱动程序(例如,块、网络)。有关更多信息,请参阅您的Linux文档。
- 如果希望在Linux客户机中使用共享内存演示应用程序,那么在构建Linux内核时需要包含该应用程序。应用程序的源代码可以在HHBSP src/apps/hypervisor/demos/shmem-linux/目录中找到(请参阅本章的“HHBSP框架”)。
- 如果你将使用一个虚拟硬件看门狗,你在Linux内核中必须添加看门口设备的驱动程序:SP805(手臂)或IB700 (x86),在将要托管 linux 客户机的虚拟机中包括并配置相应的看门狗 vdev (参考 “Watchdogs” in the “QNX Hypervisor for Safety: Protection Features” chapter)。
使命令行参数对Linux客户可用
启动Linux客户机的方式与启动QNX客户机的方式相同:启动VM,可以通过命令行,也可以通过向hypervisor主机启动例程添加启动宿主qvm进程实例的指令(请参阅“Starting and using guests”)。
然而,当您启动Linux客户机时,可能需要向它提供一些命令行参数。为此,你可以使用qvm cmdline配置选项将启动参数传递给Linux内核(参见 cmdline in the “VM Configuration Reference” chapter)。例如,我们可以使用下面的代码来告诉Linux内核在哪里可以找到控制台:
-
On ARM platforms:
cmdline console=ttyAMA0 earlycon=pl011,0x1c090000
将Linux内核指向位于 guest 物理内存0x1c090000的虚拟PL011 UART设备。不要忘记在您的VM配置中包含此设备。
-
On x86 platforms:
cmdline pmtmr=0 nolapic_timer tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false console=ttyS0,115200n8 reboot=t 指向一个虚拟的8250 UART (ttyS0是一个8250 UART设备的Linux设备名)。不要忘记在您的VM配置中包含此设备。
引导 Linux guests
要从磁盘引导,Linux客户端需要知道根文件系统安装在哪个分区(也就是安装在location /上的文件系统)。获得这些信息后,可以在VM配置文件中使用命令行参数指定这些信息。例如:
cmdline root=/dev/vda1
其中vda1指的是VM配置中的第一个virtio-blk vdev条目(有关更多信息,请参阅上面的Making command-line arguments available to a Linux guest”。
如果您在磁盘上使用virtio- block设备,请记住,在Linux中这些设备以/dev/vda*、/dev/vdb*等形式出现。
如果您的设备是一个直通设备,您需要知道它的设备条目(可能是/dev/hda*),并让Linux客户知道它,以便它可以引导。
Linux客户端虚拟机的配置文件(示例)
下面是一个 *.qvmconf 的例子。用于Linux客户端的qvmconf文件。注意,在x86平台上运行的操作系统期望找到VGA设备和BIOS的区域使用了预留和rom选项。
# A minimalist VM configuration for a Linux guest on an x86 system ram 0,0xa0000 reserve loc 0xa0000,0x20000 rom 0xc0000,0x40000 ram 1m,1023 cpu cpu load ./linux initrd load ./initrd.gz cmdline "pmtmr=0 nolapic_timer tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false console=ttyS0,115200n8 reboot=t root=/dev/vda1" vdev ioapic loc 0xf8000000 intr apic name myioapic vdev ser8250 intr myioapic:4 vdev timer8254 intr myioapic:0 vdev mc146818 reg 0x0b,0x02 vdev shmem vdev virtio-net peer /dev/vdevpeers/vp0 peerfeats 0x00007fc3 loc pci:0:1 name guest_to_host vdev virtio-blk hostdev /dev/hd1t131 vdev pckeyboard vdev 8259 loc 0x20 vdev 8259 loc 0xa0 vdev hpet loc 0xf8008000 intr myioapic:0,myioapic:8,myioapic:10 pass loc pci:0:2.0=pci:0:2.0 pass loc pci:0x8086/0x5aa8 vdev pci-dummy clone pci:0:31.0
构建并包含Android客户端
要构建一个Android客户端,你需要:
- 在你的主机系统上的Android构建环境(例如,在HHBSP的images/guest_bsps/ Android /目录)
- 一个Android内核
按照概要说明构建一个适合您的Android OS的Linux客户机。
记住,您的Android客户端必须针对您正在使用的架构和板子进行构建,并且您的托管VM必须配置为符合客户的期望。