acrn-hypervisor/doc/tutorials/using_ubuntu_as_sos.rst

273 lines
8.9 KiB
ReStructuredText

.. _Ubuntu Service OS:
Using Ubuntu as the Service OS
##############################
This document builds on the :ref:`getting_started`, and explains how to use
Ubuntu instead of using `Clear Linux`_ as the Service OS with the ACRN
hypervisor. (Note that different OSes can be used for the Service and User OS.)
In the following instructions we'll build on material in the
:ref:`getting-started-apl-nuc`.
Install Ubuntu (natively)
*************************
Ubuntu 16.04.4 LTS was used throughout this document, other versions such as
18.04 may work too.
* Download Ubuntu 16.04 from the `Ubuntu 16.04.4 LTS (Xenial Xerus) page
<https://www.ubuntu.com/download/desktop>`_ and select the `ubuntu-16.04.4-desktop-amd64.iso
<http://releases.ubuntu.com/16.04/ubuntu-16.04.4-desktop-amd64.iso>`_ image.
* Follow Ubuntu's `online instructions <https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop?_ga=2.114179015.1954550575.1530817291-1278304647.1523530035>`_
to install it on your device.
.. note::
Configure your device's proxy settings to have full internet access.
* While not strictly required, enabling SSH gives the user a very useful
mechanism for accessing the Service OS remotely or when running one or more
User OS (UOS). Follow these steps to enable it on the Ubuntu SOS:
.. code-block:: none
sudo apt-get install openssh-server
sudo service ssh status
sudo service ssh start
Install ACRN
************
ACRN components are distributed in source form, so you'll need to download
the source code, build it, and install it on your device.
1. Install the build tools and dependencies
Follow the instructions found in the :ref:`getting-started-apl-nuc` to
install all the build tools and dependencies on your system.
#. Clone the `Project ACRN <https://github.com/projectacrn/acrn-hypervisor>`_
code repository
.. code-block:: none
cd ~
git clone https://github.com/projectacrn/acrn-hypervisor
git checkout <known-good-tag/release>
.. note::
We clone the git repository below but it is also possible to download the
tarball for any specific tag or release from the `Project ACRN Github
release page <https://github.com/projectacrn/acrn-hypervisor/releases>`_
#. Build and install ACRN
Here is the short version of how to build and install ACRN from source.
.. code-block:: none
cd ~/acrn-hypervisor
make PLATFORM=uefi
sudo make install
For more details, please refer to the :ref:`getting_started`.
#. Install the hypervisor
The ACRN devicemodel and tools were installed as part of the previous step.
However, ``make install`` does not install the hypervisor (``acrn.efi``) on
your EFI System Partition (ESP), nor does it configure your EFI firmware to
boot it automatically. Follow the steps below to perform these operations
and complete the ACRN installation.
#. Mount the EFI System Partition (ESP) and add the ACRN hypervisor and
Service OS kernel to it (as ``root``)
.. code-block:: none
sudo umount /boot/efi
sudo lsblk
sudo mount /dev/sda1 /mnt
ls /mnt/EFI/ubuntu
You should see the following output:
.. code-block:: none
fw fwupx64.efi grub.cfg grubx64.efi MokManager.efi shimx64.efi
#. Install the hypervisor (``acrn.efi``)
.. code-block:: none
sudo mkdir /mnt/EFI/acrn/
sudo cp ~/acrn-hypervisor/build/hypervisor/acrn.efi /mnt/EFI/acrn
#. Configure the EFI firmware to boot the ACRN hypervisor by default
.. code-block:: none
sudo efibootmgr -c -l "\EFI\acrn\acrn.efi" -d /dev/sda -p 1 \
-L "ACRN Hypervisor" -u "bootloader=\EFI\ubuntu\grubx64.efi"
# Verify that the "ACRN Hypervisor" will be booted first
sudo efibootmgr -v
You can change the boot order at any time using ``efibootmgr
-o XXX,XXX,XXX``
.. note::
By default, the “ACRN Hypervisor” you have just added should be
the first one to boot. Verify this by using ``efibootmgr -v`` or
by entering the EFI firmware at boot (using :kbd:`F10`)
Install the Service OS kernel
*****************************
You can download latest Service OS kernel from
`<https://download.clearlinux.org/releases/current/clear/x86_64/os/Packages/>`_
(**We need to update the URL to one that is known to work, and matches the
tag/release we use above!!!**). We will extract it and install it in the next
few steps.
a. Download and extract the Service OS kernel
.. code-block:: none
mkdir ~/kernel-build
cd ~/kernel-build
wget https://download.clearlinux.org/releases/current/clear/x86_64/os/Packages/linux-pk414-sos-4.14.41-39.x86_64.rpm
sudo apt-get install rpm2cpio
rpm2cpio linux-pk414-sos-4.14.41-39.x86_64.rpm | cpio -idmv
#. Install the SOS kernel and its drivers (modules)
.. code-block:: none
sudo cp -r ~/kernel-build/usr/lib/modules/4.14.41-39.pk414-sos/ /lib/modules/
sudo cp ~/kernel-build/usr/lib/kernel/org.clearlinux.pk414-sos.4.14.41-39 /boot/acrn/
#. Configure Grub to load the Service OS kernel
* Modify the ``/etc/grub.d/40_custom`` file to create a new Grub entry that
will boot the SOS kernel.
.. code-block:: none
menuentry 'ACRN ubuntu SOS' {
recordfail
load_video
insmod gzio
insmod part_gpt
insmod ext4
linux /boot/acrn/org.clearlinux.pk414-sos.4.14.41-39 pci_devices_ignore=(0:18:1) maxcpus=1 console=tty0 console=ttyS0
i915.nuclear_pageflip=1 root=PARTUUID=<ID of rootfs partition> rw rootwait ignore_loglevel no_timer_check consoleblank=0
i915.tsd_init=7 i915.tsd_delay=2000 i915.avail_planes_per_pipe=0x00000F i915.domain_plane_owners=0x011111110000
i915.enable_guc_loading=0 i915.enable_guc_submission=0 i915.enable_preemption=1 i915.context_priority_mode=2
i915.enable_gvt=1 hvlog=2M@0x1FE00000
}
.. note::
You need to adjust this to use your partition UUID (``PARTUUID``) for
the ``root=`` parameter (or use the device node directly).
.. note::
You will also need to adjust the kernel name if you used a different
RPM file as the source of your Service OS kernel.
* Update Grub on your system
.. code-block:: none
sudo update-grub
At this point, you need to modify ``/boot/grub/grub.cfg`` file manually to
enable the timeout so that the system has an opportunity to show you the
grub menu. (Without this the grub choice menu won't display.)
.. code-block:: none
#set timeout_style=hidden
set timeout = 10
#. Reboot the system
Reboot system. You should see the Grub menu with the new “ACRN ubuntu SOS”
entry. Select it and proceed to booting the platform. The system will start
the Ubuntu Desktop and you can now log in (as before).
To check if the hypervisor is effectively running, check ``dmesg``. The
typical output of a successful installation will look like this:
.. code-block:: none
dmesg | grep ACRN
[ 0.000000] Hypervisor detected: ACRN
[ 0.862942] ACRN HVLog: acrn_hvlog_init
Prepare the User OS (UOS)
*************************
We are using a User OS based on `Clear Linux`_.
* Download the Clear Linux image from `<https://download.clearlinux.org>`_
.. code-block:: none
cd ~
wget https://download.clearlinux.org/releases/22780/clear/clear-22780-kvm.img.xz
unxz clear-22780-kvm.img.xz
* Download the Production Kenrel (PK) kernel
.. code-block:: none
wget https://download.clearlinux.org/releases/22780/clear/x86_64/os/Packages/linux-pk414-standard-4.14.47-44.x86_64.rpm
rpm2cpio linux-pk414-standard-4.14.47-44.x86_64.rpm | cpio -idmv
* Update the UOS kernel modules
.. code-block:: none
sudo losetup -f -P --show /root/clear-22789-kvm.img
sudo mount /dev/loop0p3 /mnt
sudo cp -r /root/usr/lib/modules/4.14.47-44.pk414-standard /mnt/lib/modules/
sudo cp -r /root/usr/lib/kernel /lib/modules/
sudo umount /mnt
sync
If you encounter a permission issue, follow these steps:
.. code-block:: none
sudo chmod 777 /dev/acrn_vhm
* One additional package is needed
.. code-block:: none
sudo apt-get instal iasl
sudo cp /usr/bin/iasl /usr/sbin/iasl
* Adjust ``launch_uos.sh``
You need to adjust the ``/usr/share/acrn/samples/nuc/launch_uos.sh`` script
to match your installation. These are the couple of lines you need to modify:
.. code-block:: none
-s 3,virtio-blk,/root/clear-22780-kvm.img
-k /lib/modules/kernel/org.clearlinux.pk414-standard.4.14.47-44
Start the User OS (UOS)
***********************
You are now all set to start the User OS (UOS)
.. code-block:: none
sudo /usr/share/acrn/samples/nuc/launch_uos.sh
**Congratulations**, you are now watching the User OS booting up!
.. _Clear Linux: https://clearlinux.org