开发 QuickVisor GuestOS

更新时间:
2024-10-18

开发 QuickVisor GuestOS

GuestOS 工程简介

QuickVisor GuestOS 工程包含客户机程序源代码,客户机程序可以是裸机程序也可以是操作系统,客户机可访问的合法资源由 QuickVisor Scenario 工程中的虚拟机硬件视图定义。

开发 SylixOS GuestOS

为特定场景工程中的 GuestVM 构建 SylixOS 客户机操作系统。以 test_multi_vm_02 为例。

  1. 获取 GuestVM 的设备树文件

    从已经配置好的 Scenario 工程中获取 GuestVM 对应的设备树文件,该设备树文件描述了 GuestVM 的硬件视图。

  1. 创建 SylixOS BSP 工程

    打开 RealEvo-IDE,新建一个对应 Scenario 工程的工作空间,创建对应 GuestVM 的 SylixOS BASE 工程和 BSP 工程。参考 quickvisor_ls1046_sdk 中的示例工程,完成启动代码、添加必要的驱动代码、根据 GuestVM 的设备树文件配置地址空间。

  1. 修改 generic_timer 驱动

    QuickVisor 当前仅支持 GuestVM 使用 generic-timer 的虚拟定时器,因此需要修改 generic-timer 驱动中使用到的寄存器和中断号。

  1. 修改 FPU 初始化配置

    SylixOS 在 ARM64 架构中 FPU 单元的初始化有 4 种类型,对于 GuestVM 的 BSP 必须选择 ARM_FPU_VFPv4ARM_FPU_NONE

  1. 修改 PSCI 采用 HVC 实现

    在虚拟化环境下,GuestVM 中的 PSCI 实现有 QuickVisor 接管,具体实现由 HVC 指令代替 SMC 指令。GuestOS 执行 HVC 指令后会产生陷入,QuickVisor 将根据 HVC 的参数模拟 PSCI 的功能。

  1. 编译并部署 GuestOS 镜像文件

    编译并部署 SylixOS GuestOS 镜像文件到对应 GuestVM 的资源文件夹下。

开发 Linux GuestOS

为特定场景工程中的 GuestVM 构建 Linux 客户机操作系统。以 test_multi_vm_02 为例。

  1. 获取 GuestVM 的设备树文件

    从已经配置好的 Scenario 工程中获取 GuestVM 对应的设备树文件,该设备树文件描述了 GuestVM 的硬件视图。

  1. 创建 针对 GuestVM 的 defconfig 文件

    拷贝 Linux 源码目录下的 arch/arm64/configs/defconfigarch/arm64/configs/tmp-virt-v8_defconfig 文件,然后使用 tmp-virt-v8_defconfig 文件进行 Linux 内核的配置以满足对应的 GuestVM,主要包括 VirtIO 设备驱动的支持,部分配置项如下,完整的文件见 quickvisor_ls1046_sdk\workspace_guestos\workspace_linux\resource\script\patch\linux\tmp-virt-v8_defconfig

CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y

CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_VIRTIO_CONSOLE=y

CONFIG_BLK_DEV=y
CONFIG_VIRTIO_BLK=y

CONFIG_NETDEVICES=y
CONFIG_VIRTIO_NET=y

CONFIG_FB=y
CONFIG_FB_SIMPLE=y
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
CONFIG_LOGO_LINUX_CLUT224=y
  1. 配置 设备树文件的 bootargs 参数

    在 GuestVM 的设备树文件中,包含若干个段的 ROM 和 RAM,每个 ROM 和 RAM 内存段都可以配置对应的 firmware 文件,QuickVisor 在创建 GuestVM 时,会将对应的 firmware 文件加载到相应的内存中。如果 GuestVM 不具备直通的存储设备,则可以使用 initrd 参数指定 RAMFS,使用 root 参数指定根文件系统的挂载到那个设备上,使用 rootfstype 指定根文件系统的类型,使用 console 指定 Linux 的标准输出使用哪个设备,使用 init 设置 Linux 启动后执行的 init 进程,使用 earlycon 指定早期的调试打印串口。

chosen {
        stdout-path = &uart0;
        bootargs = "initrd=0x43000000,0x02000000 
                    root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 
                    init=/linuxrc earlycon=pl011,0x09000000";
};
  1. 编译并部署 GuestOS 镜像文件

    编译并部署 Linux GuestOS 镜像文件到对应 GuestVM 的资源文件夹下。

文档内容是否对您有所帮助?
有帮助
没帮助