From 086ec457255b246892986777d082039b3d79a144 Mon Sep 17 00:00:00 2001 From: "Yang, Yu-chu" Date: Fri, 25 Oct 2019 16:34:51 -0700 Subject: [PATCH] doc: OVMF high level description Add OVMF HLD and boot flow graph Signed-off-by: Yang, Yu-chu --- doc/developer-guides/hld/hld-overview.rst | 16 ++++++++++++++++ .../hld/images/over-image134.png | Bin 0 -> 20731 bytes 2 files changed, 16 insertions(+) create mode 100644 doc/developer-guides/hld/images/over-image134.png diff --git a/doc/developer-guides/hld/hld-overview.rst b/doc/developer-guides/hld/hld-overview.rst index 6e7b882c9..17dff802f 100644 --- a/doc/developer-guides/hld/hld-overview.rst +++ b/doc/developer-guides/hld/hld-overview.rst @@ -449,6 +449,19 @@ For an Android VM, the vSBL will load and verify trusty OS first, and trusty OS will then load and verify Android OS according to the Android OS verification mechanism. +OVMF bootloader +======================= + +Open Virtual Machine Firmware (OVMF) is the virtual bootloader that supports +EFI boot of UOS on the ACRN hypervisor platform. + +The OVMF is copied to UOS memory by the VM manager in the SOS while creating +the UOS virtual BSP of UOS. The SOS passes the start of OVMF and related +information to HV. HV sets guest RIP of UOS virtual BSP as the start of OVMF +and related guest registers, and launches the UOS virtual BSP. The OVMF starts +running in the virtual real mode within the UOS. Conceptually, OVMF is part of +the UOS runtime. + Freedom From Interference ************************* @@ -513,6 +526,9 @@ Boot Flow .. figure:: images/over-image85.png :align: center +.. figure:: images/over-image134.png + :align: center + ACRN Boot Flow diff --git a/doc/developer-guides/hld/images/over-image134.png b/doc/developer-guides/hld/images/over-image134.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb418116caa52c2f15306d4eed07696b4000d44 GIT binary patch literal 20731 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 NJzf1=);T3K0RXv|Lnr_M literal 0 HcmV?d00001