Building Linux and Android guests

本文在整个 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操作系统作为客户端实现时,需要执行以下操作:

  1. 从您最喜欢的Linux源代码中获取一个适合于构建您的Linux操作系统的Linux构建环境,并对其进行配置。
  2. 按照Linux说明在Linux工作目录中构建客户机。
  3. 编写一个VM配置文件(例如,linuxvm1.qvmconf),在VM中组装您的Linux操作系统期望在其运行平台上找到的组件。有关示例文件,请参阅下面的“Linux客户端虚拟机的配置文件(示例)”。
  4. 构建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必须配置为符合客户的期望。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值