acrn-hypervisor/doc/tutorials/using_celadon_as_user_vm.rst

198 lines
7.0 KiB
ReStructuredText

.. _using_celadon_as_user_vm:
Run Celadon as the User VM OS
#############################
Introduction to Celadon
***********************
`Celadon`_ ---- An open source Android software reference stack for Intel architecture.
This tutorial describes how to run Celadon Android as the User VM OS on ACRN hypervisor.
If you want to learn more about Celadon, refer to the
official `Celadon documentation <https://projectceladon.github.io>`__.
.. _Celadon:
http://github.com/projectceladon
Build Celadon Image from Source
*******************************
Before building the Celadon image, please make sure your development workstation
meets the following requirements: A 64-bit workstation running Ubuntu with **64GB memory** and
**350GB of free disk space**. If your workstation does not meet these requirements,
you may encouter unexpected errors.
Follow these instructions to build the Celadon images:
#. Install the repo tools:
.. code-block:: none
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
#. Install the required building packages:
.. code-block:: none
sudo apt update
sudo apt install openjdk-8-jdk git ccache automake \
lzop bison gperf build-essential zip curl \
zlib1g-dev g++-multilib python3-networkx \
libxml2-utils bzip2 libbz2-dev libbz2-1.0 \
libghc-bzlib-dev squashfs-tools pngcrush \
schedtool dpkg-dev liblz4-tool make optipng maven \
libssl-dev bc bsdmainutils gettext python3-mako \
libelf-dev sbsigntool dosfstools mtools efitools \
python3-pystache git-lfs python3 flex clang libncurses5 \
fakeroot ncurses-dev xz-utils python3-pip ninja-build \
cryptsetup-bin cutils cmake pkg-config xorriso mtools
sudo pip3 install mako==1.1.0 meson==0.60.0 dataclasses
sudo su
cd /usr/local/
wget https://github.com/KhronosGroup/glslang/releases/download/SDK-candidate-26-Jul-2020/glslang-master-linux-Release.zip && \
unzip glslang-master-linux-Release.zip bin/glslangValidator
#. Download the source code
.. code-block:: none
mkdir ~/civ
cd ~/civ
We choose Celadon Android 14 Base Releases `CIV_00.23.04.51_A14 <https://projectceladon.github.io/celadon-documentation/release-notes/base-releases-A14.html#civ-00-23-04-51-a14>`__.
Repo tool will download the entire source code into your local environments and it will cost several hours depending on your network.
.. code-block:: none
repo init -u https://github.com/projectceladon/manifest -b master -m stable-build/CIV_00.23.04.51_A14.xml
repo sync -c -q -j5
#. Disable Trusty:
Trusty is a mandatory component since Android Oreo Desert onwards. However, it's easier to boot Celadon as VM without Trusty feature.
So we recommend to **disable trusty**. To disable, set the 'trusty' and 'tpm' options to false in the mixins config file
``civ/device/intel/projectceladon/caas/mixins.spec`` as follows:
.. code-block:: none
[groups]
device-specific: celadon
treble: true
....
tpm: false
....
trusty: false
After modifing ``mixins.spec``, you must run the ``civ/device/intel/mixins/mixin-update`` script to apply the changes.
Enter the following commands to initialize your build variables and specifiy your celadon lunch target using ``lunch`` target:
.. code-block:: none
source build/envsetup.sh
lunch caas
Meanwhile, the following trusty related configs in **Android kernel** at
``device/intel/mixins/groups/kernel/gmin64/config-lts/linux-intel-lts2022/x86_64_defconfig``
should be disabled as:
.. code-block:: none
# CONFIG_TCG_TPM is not set
# CONFIG_HW_RANDOM_TPM is not set
# CONFIG_TRUSTY is not set
# CONFIG_TRUSTY_LOG is not set
# CONFIG_TRUSTY_VIRTIO is not set
# CONFIG_TRUSTY_VIRTIO_IPC is not set
# CONFIG_TRUSTY_X86_64 is not set
# CONFIG_TRUSTY_BACKUP_TIMER is not set
Run `mixin` command to apply this changes:
.. code-block:: none
cd ~/civ
mixin
#. Build Celadon flash image:
Then you are ready to build Celadon images. Build progress may cost several hours or even more depends on your building system:
.. code-block:: none
make flashfiles -j $(nproc)
#. Flash Celadon image into disk:
Caution: Please **remain only one hard disk** (the disk will be entirely removed and flashed) in your destination platform, otherwise
Celadon may flash into the wrong disk and cause data loss. There are two ways to do: i. Physically
remove the hard disk. ii. Disable the sata(or nvme) slot in the BIOS settings.
We test this VM in an ASUS MiniPC with two disk slots: one is a m.2 nvme slot and one is a sata slot. We run service OS
(Ubuntu) on a sata disk and run guest OS(Celadon Android) on a nvme disk.
Prepare an empty USB disk and plug it into your **development platform**, run ``lsblk`` command to find it. Assume it's ``/dev/sdc`` here.
.. code-block:: none
cd ~/civ/out/target/product/caas
unzip caas-flashfile-eng.dot.iso.zip
sudo dd if=~/civ/caas-flashfile-eng.dot.iso of=/dev/sdc status=progress
sudo eject /dev/sdc
Unplug the USB disk and plug it into your **destination platform**. Power on your destination platform and boot into this USB disk via BIOS settings. The flash progress
will require you press :kbd:`UP` or :kbd:`PgUp` to continue. When flash done, you can boot into Celadon Android.
#. ACRN Service VM Setup
Follow the steps in this :ref:`gsg` to set up ACRN based Ubuntu and launch the Service VM.
Modifiy the ACRN device model parameters in ``launch_user_vm_id1.sh`` as follows:
.. code-block:: none
dm_params=(
`add_cpus 8 9 16 17`
-m 8192M
--ovmf /usr/share/acrn/bios/OVMF.fd
`add_virtual_device 1:0 lpc`
`add_virtual_device 0:0 hostbridge`
`add_virtual_device 3 virtio-console @stdio:stdio_port`
`add_passthrough_device 2 0000:00:02.0`
`add_passthrough_device 4 0000:00:14.0`
`add_interrupt_storm_monitor 10000 10 1 100`
`add_passthrough_device 5 0000:01:00.0`
`add_logger_settings console=4 kmsg=3 disk=5`
VM1
)
#. Boot Celadon VM
Remotely connect to the target system via SSH and Boot Celadon VM via the launch script ``launch_user_vm_id1``:
.. code-block:: none
sudo chmod +x ./launch_user_vm_id1.sh
sudo ./launch_user_vm_id1.sh
Then the screen will temperatory go off. Wait for about one minute and the Android UI will appear as:
.. figure:: images/celadon_uservm_01.png
:align: center
:name: Android-screenlock
:class: drop-shadow
.. figure:: images/celadon_uservm_02.png
:align: center
:name: Android-desktop
:class: drop-shadow