diff --git a/docs/arm64.md b/docs/arm64.md index 44b059d9a..b1440d9f1 100644 --- a/docs/arm64.md +++ b/docs/arm64.md @@ -18,57 +18,6 @@ $ qemu-img convert -p -f qcow2 -O raw focal-server-cloudimg-arm64.img focal-serv $ popd ``` -## UEFI booting - -This part introduces how to build EDK2 firmware and boot Cloud Hypervisor with it. - -### Building EDK2 - -```bash -$ pushd $CLOUDH - -# Clone source code repos -$ git clone --depth 1 https://github.com/tianocore/edk2.git -b master -$ cd edk2 -$ git submodule update --init -$ cd .. -$ git clone --depth 1 https://github.com/tianocore/edk2-platforms.git -b master -$ git clone --depth 1 https://github.com/acpica/acpica.git -b master - -# Build tools -$ export PACKAGES_PATH="$PWD/edk2:$PWD/edk2-platforms" -$ export IASL_PREFIX="$PWD/acpica/generate/unix/bin/" -$ make -C acpica -$ cd edk2/ -$ . edksetup.sh -$ cd .. -$ make -C edk2/BaseTools - -# Build EDK2 -$ build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtCloudHv.dsc -b RELEASE - -$ popd -``` - -If the build goes well, the EDK2 binary is available at -`edk2/Build/ArmVirtCloudHv-AARCH64/RELEASE_GCC5/FV/CLOUDHV_EFI.fd`. - -### Booting the guest VM - -```bash -$ pushd $CLOUDH -$ sudo RUST_BACKTRACE=1 $CLOUDH/cloud-hypervisor/target/debug/cloud-hypervisor \ - --api-socket /tmp/cloud-hypervisor.sock \ - --kernel $CLOUDH/edk2/Build/ArmVirtCloudHv-AARCH64/RELEASE_GCC5/FV/CLOUDHV_EFI.fd \ - --disk path=$CLOUDH/focal-server-cloudimg-arm64.raw \ - --cpus boot=4 \ - --memory size=4096M \ - --net tap=,mac=12:34:56:78:90:01,ip=192.168.1.1,mask=255.255.255.0 \ - --serial tty \ - --console off -$ popd -``` - ## Direct-kernel booting Alternativelly, you can build your own kernel for guest VM. This way, UEFI is diff --git a/docs/uefi.md b/docs/uefi.md index 3695d121c..a86ef70ed 100644 --- a/docs/uefi.md +++ b/docs/uefi.md @@ -2,7 +2,7 @@ Cloud Hypervisor supports UEFI boot through the utilization of the EDK II based UEFI firmware. -## Building UEFI Firmware +## Building UEFI Firmware for x86-64 To avoid any unnecessary issues, it is recommended to use Ubuntu 18.04 and its default toolset. Any other compatible Linux distribution is otherwise suitable, however it is suggested to use a temporary Docker container with Ubuntu 18.04 for a quick build on an existing Linux machine. @@ -27,11 +27,40 @@ build After the successful build, the resulting firmware binaries are available under `Build/CloudHvX64/DEBUG_GCC5/FV` underneath the edk2 checkout. +## Building UEFI Firmware for AArch64 + +```shell +# On an AArch64 machine: +$ sudo apt-get update +$ sudo apt-get install uuid-dev nasm iasl build-essential python3-distutils git +$ git clone --depth 1 https://github.com/tianocore/edk2.git -b master +$ cd edk2 +$ git submodule update --init +$ cd .. +$ git clone --depth 1 https://github.com/tianocore/edk2-platforms.git -b master +$ git clone --depth 1 https://github.com/acpica/acpica.git -b master + +# Build tools +$ export PACKAGES_PATH="$PWD/edk2:$PWD/edk2-platforms" +$ export IASL_PREFIX="$PWD/acpica/generate/unix/bin/" +$ make -C acpica +$ cd edk2/ +$ . edksetup.sh +$ cd .. +$ make -C edk2/BaseTools + +# Build EDK2 +$ build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtCloudHv.dsc -b RELEASE +``` + +If the build goes well, the EDK2 binary is available at +`edk2/Build/ArmVirtCloudHv-AARCH64/RELEASE_GCC5/FV/CLOUDHV_EFI.fd`. + ## Using OVMF Binaries Any UEFI capable image can be booted using the Cloud Hypervisor specific firmware. Windows guests under Cloud Hypervisor only support UEFI boot, therefore OVMF is mandatory there. -To make Cloud Hypervisor use UEFI boot, pass the `CLOUDHV.fd` file path as an argument to the `--kernel` option. The firmware file will be opened in read only mode. +To make Cloud Hypervisor use UEFI boot, pass the `CLOUDHV.fd` (for x86-64) / `CLOUDHV_EFI.fd` (for AArch64) file path as an argument to the `--kernel` option. The firmware file will be opened in read only mode. # Links