This tutorial provides a step-by-step guide on how to run different demo
configurations of the Bao hypervisor featuring multiple guest operating
systems and targeting several supported platforms. The available demos are:
This tutorial assumes you are running a standard Linux distro (e.g.
Debian) and using bash.
If you have any doubts, questions, feedback, or suggestions regarding
this guide, please raise an issue in GitHub or contact us via
info@bao-project.org.
If you run into any problem while following this guide, we ask you to raise
an issue on Github, but first please make sure you are using the same or
newer/compatible versions of the tools and software listed in
Appendix III (not all are needed for all target platforms).
git clone https://github.com/bao-project/bao-demos
cd bao-demos
Depending on your target platform and demo, setup the PLATFORM and DEMO
environment variables using the IDs in Appendix I. For example,
for a system configuration targeting the ZCU102 board and featuring a
dual-guest Linux+FreeRTOS demo:
export PLATFORM=zcu102
export DEMO=linux+freertos
Note that not every platform supports every demo. The supported platform/demo
combinations are available in Appendix II.
At this point you have two options:
A) Use automated make
Just execute:
make -j$(nproc)
And all the needed source and images will be automatically downloaded and built.
The makefiles will also print some instructions for you to carry out when it is
not possible to automate a given step for some reason (e.g. download behind
authentication wall). It will also print the instructions on how to deploy the
images on your target platform. To quiet instructions pass NO_INSTRUCTIONS=1
to make.
WARNING
The makefiles will automatically accept end-user license agreements (EULAs) on
your behalf for some of the downloaded firmware. If you wish to be prompted
to accept them manually, pass ALWAYS_ASK=1 to make.
If you are targetting an emulator platform like QEMU, after building
you can start it with:
make run
In this case, if you don’t have qemu for the target architecture installed,
it will build it for you.
NOTE
These makefiles are intended ONLY to automate this guide’s steps; not to be
used as any kind of build system during development.
B) Follow the step-by-step guide
As an alternative, we provide a step-by-step guide that you can follow to build
all the necessary software and deploy it to your target platform.
B.1) Setup ARCH manually
Setup the ARCH environment variable manually according to
Appendix I. For example, for the ZCU102 platform:
export ARCH=aarch64
B.2) Create working directory
Create the working directories where you’ll place the source code and
final images:
Bao Hypervisor Demo Guide
This tutorial provides a step-by-step guide on how to run different demo configurations of the Bao hypervisor featuring multiple guest operating systems and targeting several supported platforms. The available demos are:
NOTE
This tutorial assumes you are running a standard Linux distro (e.g. Debian) and using bash.
If you have any doubts, questions, feedback, or suggestions regarding this guide, please raise an issue in GitHub or contact us via info@bao-project.org.
If you run into any problem while following this guide, we ask you to raise an issue on Github, but first please make sure you are using the same or newer/compatible versions of the tools and software listed in Appendix III (not all are needed for all target platforms).
-1. Install dependencies
0. Download and setup the toolchain
Download the latest bare-metal cross-compile toolchain for your target architecture:
a) For Armv8 Aarch64, use the aarch64-none-elf- toolchain.
Download it from the Arm Developer’s website.
b) For Armv7 or Armv8 Aarch32, use the arm-none-eabi- toolchain.
Download it from the Arm Developer’s website.
c) For RISC-V, use the riscv64-unknown-elf- toolchain.
Download it from SiFive’s Freedom Tools github reposiroty.
Install the toolchain. Then, set the CROSS_COMPILE environment variable with the reference toolchain prefix path:
1. Setup base environment
Clone this repo and cd to it:
Depending on your target platform and demo, setup the PLATFORM and DEMO environment variables using the IDs in Appendix I. For example, for a system configuration targeting the ZCU102 board and featuring a dual-guest Linux+FreeRTOS demo:
Note that not every platform supports every demo. The supported platform/demo combinations are available in Appendix II.
At this point you have two options:
A) Use automated make
Just execute:
And all the needed source and images will be automatically downloaded and built. The makefiles will also print some instructions for you to carry out when it is not possible to automate a given step for some reason (e.g. download behind authentication wall). It will also print the instructions on how to deploy the images on your target platform. To quiet instructions pass
NO_INSTRUCTIONS=1
to make.WARNING
The makefiles will automatically accept end-user license agreements (EULAs) on your behalf for some of the downloaded firmware. If you wish to be prompted to accept them manually, pass
ALWAYS_ASK=1
to make.If you are targetting an emulator platform like QEMU, after building you can start it with:
In this case, if you don’t have qemu for the target architecture installed, it will build it for you.
NOTE
These makefiles are intended ONLY to automate this guide’s steps; not to be used as any kind of build system during development.
B) Follow the step-by-step guide
As an alternative, we provide a step-by-step guide that you can follow to build all the necessary software and deploy it to your target platform.
B.1) Setup ARCH manually
Setup the ARCH environment variable manually according to Appendix I. For example, for the ZCU102 platform:
B.2) Create working directory
Create the working directories where you’ll place the source code and final images:
B.3) Build guests
Build guests according to the target demo:
B.4) Build Bao
Clone Bao’s repo to the the working directory:
Copy your config to the working directory:
Build it:
And copy the resulting binary into the final image directory:
B.5) Build Firmware and Deploy
Build the firmware and deploy the system according to the target platform:
AArch64 platforms:
AArch32 platforms:
RISC-V platforms:
Appendix I
Appendix II
Appendix III