1.. _gsg:
2.. _rt_industry_ubuntu_setup:
3.. _getting-started-building:
4
5Getting Started Guide
6#####################
7
8This guide will help you get started with ACRN. We'll show how to prepare a
9build environment on your development computer. Then we'll walk through the
10steps to set up a simple ACRN configuration on a target system. The
11configuration is an ACRN shared scenario and consists of an ACRN hypervisor,
12Service VM, and one post-launched User VM as illustrated in this figure:
13
14.. image:: ./images/gsg_scenario-1-0.75x.png
15
16Throughout this guide, you will be exposed to some of the tools, processes, and
17components of the ACRN project. Let's get started.
18
19.. _gsg-prereq:
20
21Prerequisites
22**************
23
24You will need two machines: a development computer and a target system. The
25development computer is where you configure and build ACRN and your application.
26The target system is where you deploy and run ACRN and your application.
27
28.. image:: ./images/gsg_host_target.png
29
30Before you begin, make sure your machines have the following prerequisites:
31
32**Development computer**:
33
34* Hardware specifications
35
36  - A PC with Internet access (A fast system with multiple cores and 16GB
37    memory or more will make the builds go faster.)
38
39* Software specifications
40
41  - Ubuntu Desktop 22.04 LTS (ACRN development is not supported on Windows.)
42
43**Target system**:
44
45* Hardware specifications
46
47  - Target board (see :ref:`hardware_tested`)
48  - Ubuntu Desktop 22.04 LTS bootable USB disk: download the latest `Ubuntu
49    Desktop 22.04 LTS ISO image <https://releases.ubuntu.com/jammy/>`__ and
50    follow the `Ubuntu documentation
51    <https://ubuntu.com/tutorials/create-a-usb-stick-on-ubuntu#1-overview>`__
52    for creating the USB disk.
53  - USB keyboard and mouse
54  - Monitor
55  - Ethernet cable and Internet access
56  - Local storage device (NVMe or SATA drive, for example).  We recommend having
57    40GB or more of free space.
58
59.. note::
60   If you're working behind a corporate firewall, you'll likely need to
61   configure a proxy for accessing the Internet, if you haven't done so already.
62   While some tools use the environment variables ``http_proxy`` and ``https_proxy`` to
63   get their proxy settings, some use their own configuration files, most
64   notably ``apt`` and ``git``.  If a proxy is needed and it's not configured,
65   commands that access the Internet may time out and you may see errors such
66   as "unable to access ..." or "couldn't resolve host ...".
67
68.. _gsg-dev-computer:
69
70.. rst-class:: numbered-step
71
72Prepare the Development Computer
73********************************
74
75To set up the ACRN build environment on the development computer:
76
77#. On the development computer, run the following command to confirm that Ubuntu
78   Desktop 22.04 is running:
79
80   .. code-block:: bash
81
82      cat /etc/os-release
83
84   If you have an older version, see `Ubuntu documentation
85   <https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview>`__ to
86   install a new OS on the development computer.
87
88#. Download the apt information database about all available package updates for
89   your Ubuntu release. We'll need it to get the tools and libraries used
90   for ACRN builds:
91
92   .. code-block:: bash
93
94      sudo apt update
95
96   This next command upgrades packages already installed on your system with
97   minor updates and security patches. This command is optional as there is a
98   small risk that upgrading your system software can introduce unexpected
99   issues:
100
101   .. code-block:: bash
102
103      sudo apt upgrade -y #optional command to upgrade system
104
105#. Create a working directory:
106
107   .. code-block:: bash
108
109      mkdir -p ~/acrn-work
110
111#. Install the necessary ACRN build tools:
112
113   .. code-block:: bash
114
115      sudo apt install -y gcc git make vim libssl-dev libpciaccess-dev uuid-dev \
116           libsystemd-dev libevent-dev libxml2-dev libxml2-utils libusb-1.0-0-dev \
117           python3 python3-pip libblkid-dev e2fslibs-dev \
118           pkg-config libnuma-dev libcjson-dev liblz4-tool flex bison \
119           xsltproc clang-format bc libpixman-1-dev libsdl2-dev libegl-dev \
120           libgles-dev libdrm-dev gnu-efi libelf-dev liburing-dev \
121           build-essential git-buildpackage devscripts dpkg-dev equivs lintian \
122           apt-utils pristine-tar dh-python acpica-tools python3-tqdm \
123           python3-elementpath python3-lxml python3-xmlschema python3-defusedxml
124
125
126#. Get the ACRN hypervisor and ACRN kernel source code, and check out the
127   current release branch.
128
129   .. code-block:: bash
130
131      cd ~/acrn-work
132      git clone https://github.com/projectacrn/acrn-hypervisor.git
133      cd acrn-hypervisor
134      git checkout release_3.3
135
136      cd ..
137      git clone https://github.com/projectacrn/acrn-kernel.git
138      cd acrn-kernel
139      git checkout release_3.3
140
141.. _gsg-board-setup:
142
143.. rst-class:: numbered-step
144
145Prepare the Target and Generate a Board Configuration File
146***************************************************************
147
148In this step, you will use the **Board Inspector** to generate a board
149configuration file.
150
151A **board configuration file** is an XML file that stores hardware-specific
152information extracted from the target system. The file is used to configure the
153ACRN hypervisor, because each hypervisor instance is specific to your target
154hardware.
155
156.. important::
157
158   Before running the Board Inspector, you must set up your target hardware and
159   BIOS exactly as you want it, including connecting all peripherals,
160   configuring BIOS settings, and adding memory and PCI devices. For example,
161   you must connect all USB devices you intend to access; otherwise, the Board Inspector will not
162   detect these USB devices for passthrough. If you change the hardware or BIOS
163   configuration, or add or remove USB devices, you must run the Board Inspector
164   again to generate a new board configuration file.
165
166Set Up the Target Hardware
167============================
168
169To set up the target hardware environment:
170
171#. Connect all USB devices, such as a mouse and keyboard.
172
173#. Connect the monitor and power supply cable.
174
175#. Connect the target system to the LAN with the Ethernet cable or wifi.
176
177Example of a target system with cables connected:
178
179.. image:: ./images/gsg_asus_minipc64.png
180   :align: center
181
182Install OS on the Target
183============================
184
185The target system needs Ubuntu Desktop 22.04 LTS to run the Board Inspector
186tool. You can read the full instructions to download, create a bootable USB
187drive, and `Install Ubuntu desktop
188<https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview>`_ on the Ubuntu
189site.  We'll provide a summary here:
190
191To install Ubuntu 22.04:
192
193#. Insert the Ubuntu bootable USB disk into the target system.
194
195#. Power on the target system, and select the USB disk as the boot device
196   in the UEFI
197   menu. Note that the USB disk label presented in the boot options depends on
198   the brand/make of the USB drive. (You will need to configure the BIOS to boot
199   off the USB device first, if that option isn't available.)
200
201#. After selecting the language and keyboard layout, select the **Normal
202   installation** and **Download updates while installing Ubuntu** (downloading
203   updates requires the target to have an Internet connection).
204
205   .. image:: ./images/gsg_ubuntu_install_01.png
206      :align: center
207
208#. Use the check boxes to choose whether you'd like to install Ubuntu alongside
209   another operating system (if one already exists), or delete your existing operating system and
210   replace it with Ubuntu:
211
212   .. image:: ./images/gsg_ubuntu_install_02.png
213      :align: center
214
215#. Complete the Ubuntu installation by choosing your geographical location,
216   and creating your login details. We use ``acrn`` as the username in this guide.
217
218   If you choose a username other than ``acrn``, be sure to use
219   that username in the command examples and paths shown in this guide.
220
221#. After the Ubuntu installation completes on the target and you reboot the
222   system, don't forget to update the system software (as Ubuntu recommends):
223
224   .. code-block:: bash
225
226      sudo apt update
227      sudo apt upgrade -y
228
229#. It's convenient to use the network to transfer files between the development
230   computer and target system, so we recommend installing the openssh-server
231   package on the target system::
232
233      sudo apt install -y openssh-server
234
235   This command will install and start the ssh-server service on the target
236   system.  We'll need to know the target system's IP address to make a
237   connection from the development computer, so find it now with this command::
238
239      hostname -I | cut -d ' ' -f 1
240
241#. Make a working directory on the target system that we'll use later::
242
243      mkdir -p ~/acrn-work
244
245Configure Target BIOS Settings
246===============================
247
248#. Boot your target and enter the BIOS configuration editor.
249
250   Tip: When you are booting your target, you'll see an option (quickly) to
251   enter the BIOS configuration editor, typically by pressing :kbd:`F2`
252   or :kbd:`DEL` during the boot and before the GRUB menu (or Ubuntu login
253   screen) appears. If you are not quick enough, you can still choose
254   ``UEFI settings`` in the GRUB menu or just reboot the system to try again.
255
256#. Configure these BIOS settings:
257
258   * Enable **VMX** (Virtual Machine Extensions, which provide hardware
259     assist for CPU virtualization).
260   * Enable **VT-d** (Intel Virtualization Technology for Directed I/O, which
261     provides additional support for managing I/O virtualization).
262   * Disable **Secure Boot**. This setting simplifies the steps for this example.
263
264   The names and locations of the BIOS settings depend on the target
265   hardware and BIOS vendor and version.
266
267Generate a Board Configuration File
268=========================================
269
270#. Build the Board Inspector Debian package on the development computer:
271
272   a. Move to the development computer.
273
274   #. On the development computer, go to the ``acrn-hypervisor`` directory:
275
276      .. code-block:: bash
277
278         cd ~/acrn-work/acrn-hypervisor
279
280   #. Build the Board Inspector Debian package:
281
282      .. code-block:: bash
283
284         debian/debian_build.sh clean && debian/debian_build.sh board_inspector
285
286      In a few seconds, the build generates a board_inspector Debian package in the
287      parent (``~/acrn-work``) directory.
288
289#. Use the ``scp`` command to copy the board inspector Debian package from your
290   development computer to the ``/tmp`` directory on the target system.  Replace
291   ``10.0.0.200`` with the target system's IP address you found earlier::
292
293     scp ~/acrn-work/python3-acrn-board-inspector*.deb acrn@10.0.0.200:/tmp
294
295#. Now that we've got the Board Inspector Debian package on the target system, install it there:
296
297   .. code-block:: bash
298
299      sudo apt install -y /tmp/python3-acrn-board-inspector*.deb
300
301#. Reboot the target system:
302
303   .. code-block:: bash
304
305      sudo reboot
306
307#. Run the Board Inspector on the target system to generate the board configuration file. This
308   example uses the parameter ``my_board`` as the file name. The Board Inspector
309   can take a few minutes to scan your target system and create the board XML
310   file with your target system's information.
311
312   .. code-block:: bash
313
314      cd ~/acrn-work
315      sudo acrn-board-inspector my_board
316
317   .. note::
318
319      If you get an error that mentions Pstate and editing the GRUB
320      configuration, reboot the system and run this command again.
321
322#. Confirm that the board configuration file ``my_board.xml`` was generated in
323   the current directory:
324
325   .. code-block:: bash
326
327      ls ./my_board.xml
328
329#. From your development computer, use the ``scp`` command to copy the board
330   configuration file on your target system back to the ``~/acrn-work``
331   directory on your development computer. Replace ``10.0.0.200`` with the
332   target system's IP address you found earlier::
333
334     scp acrn@10.0.0.200:~/acrn-work/my_board.xml ~/acrn-work/
335
336.. _gsg-dev-setup:
337
338.. rst-class:: numbered-step
339
340Generate a Scenario Configuration File and Launch Script
341********************************************************
342
343In this step, you will download, install, and use the `ACRN Configurator
344<https://github.com/projectacrn/acrn-hypervisor/releases/download/v3.3/acrn-configurator-3.3.deb>`__
345to generate a scenario configuration file and launch script.
346
347A **scenario configuration file** is an XML file that holds the parameters of
348a specific ACRN configuration, such as the number of VMs that can be run,
349their attributes, and the resources they have access to.
350
351A **launch script** is a shell script that is used to configure and create a
352post-launched User VM. Each User VM has its own launch script.
353
354#. On the development computer, download and install the ACRN Configurator
355   Debian package:
356
357   .. code-block:: bash
358
359      cd ~/acrn-work
360      wget https://github.com/projectacrn/acrn-hypervisor/releases/download/v3.3/acrn-configurator-3.3.deb -P /tmp
361
362   If you already have a previous version of the acrn-configurator installed,
363   you should first remove it:
364
365   .. code-block:: bash
366
367      sudo apt purge acrn-configurator
368
369   Then you can install this new version:
370
371   .. code-block:: bash
372
373      sudo apt install -y /tmp/acrn-configurator-3.3.deb
374
375#. Launch the ACRN Configurator:
376
377   .. code-block:: bash
378
379      acrn-configurator
380
381#. Under **Start a new configuration**, confirm that the working folder is
382   ``<path to>/acrn-work/MyConfiguration``. Click **Use This Folder**.
383
384   .. image:: images/configurator-newconfig.png
385      :align: center
386      :class: drop-shadow
387
388#. Import your board configuration file as follows:
389
390   a. In the **1. Import a board configuration file** panel, click **Browse for
391      file**.
392
393   #. Browse to ``~/acrn-work/my_board.xml`` and click **Open**.
394
395   #. Click **Import Board File**.
396
397   .. image:: images/configurator-board01.png
398      :align: center
399      :class: drop-shadow
400
401   The ACRN Configurator makes a copy of your board file, changes the file
402   extension to ``.board.xml``, and saves the file to the working folder as
403   ``my_board.board.xml``.
404
405#. Create a new scenario as follows:
406
407   a. In the **2. Create new or import an existing scenario** panel, click
408      **Create Scenario**.
409
410      .. image:: images/configurator-newscenario01.png
411         :align: center
412         :class: drop-shadow
413
414   #. In the dialog box, confirm that **Shared (Post-launched VMs only)** is
415      selected.
416
417   #. Confirm that one Service VM and one post-launched VM are selected.
418
419   #. Click **Ok**.
420
421      .. image:: images/configurator-newscenario02.png
422         :align: center
423         :class: drop-shadow
424
425#. In the **3. Configure settings for scenario and launch scripts** panel,
426   the scenario's configurable items appear. Feel free to look through all
427   the available configuration settings. This is where you can change the
428   settings to meet your application's particular needs. But for now, you
429   will update only a few settings for functional and educational purposes.
430
431   You may see some error messages from the Configurator, such as shown here:
432
433   .. image:: images/gsg-config-errors.png
434      :align: center
435      :class: drop-shadow
436
437   The Configurator does consistency and validation checks when you load or save
438   a scenario. Notice the Hypervisor and VM1 tabs both have an error icon,
439   meaning there are issues with configuration options in two areas.  Since the
440   Hypervisor tab is currently highlighted, we're seeing an issue we can resolve
441   on the Hypervisor settings.  Once we resolve all the errors and save the
442   scenario (forcing a full validation of the schema again), these error
443   indicators and messages will go away.
444
445#. Click the **Hypervisor Global Settings > Basic Parameters** tab, select the
446   ``Debug`` build type, and select the serial console port (the example shows
447   ``/dev/ttyS0``, but yours may be different). If your board doesn't have a
448   serial console port, select the ``Release`` build type. The Debug build type
449   requires a serial console port (and is reporting an error because a serial
450   console port hasn't been configured yet).
451
452   .. image:: images/configurator-buildtype.png
453      :align: center
454      :class: drop-shadow
455
456#. Click the **VM0 ServiceVM > Basic Parameters** tab and change the VM name
457   to ``ACRN_Service_VM`` for this example.
458
459   .. image:: images/configurator-servicevm.png
460      :align: center
461      :class: drop-shadow
462
463#. Configure the post-launched VM as follows:
464
465   a. Click the **VM1 Post-launched > Basic Parameters** tab and change the VM
466      name to ``POST_STD_VM1`` for this example.
467
468   #. Confirm that the **VM type** is ``Standard``. In the previous step,
469      ``STD`` in the VM name is short for Standard.
470
471   #. Scroll down to **Memory size (MB)** and change the value to ``2048``. For
472      this example, we will use Ubuntu 22.04 to boot the post-launched VM.
473      Ubuntu 22.04 needs at least 2048 MB to boot.
474
475   #. For **Physical CPU affinity**, select pCPU ID ``0``, then click **+** and
476      select pCPU ID ``1`` to affine (or pin) the VM to CPU cores 0 and 1. (That will
477      resolve the missing physical CPU affinity assignment error.)
478
479   #. For **Virtio console device**, click **+** to add a device and keep the
480      default options.
481
482   #. For **Virtio block device**, click **+** and enter
483      ``/home/acrn/acrn-work/ubuntu-22.04.4-desktop-amd64.iso``. This parameter
484      specifies the VM's OS image and its location on the target system. Later
485      in this guide, you will save the ISO file to that directory. (If you used
486      a different username when installing Ubuntu on the target system, here's
487      where you'll need to change the ``acrn`` username to the username you used.)
488
489   .. image:: images/configurator_postvm01.png
490      :align: center
491      :class: drop-shadow
492
493   .. image:: images/configurator_postvm02.png
494      :align: center
495      :class: drop-shadow
496
497#. Scroll up to the top of the panel and click **Save Scenario And Launch
498   Scripts** to generate the scenario configuration file and launch script.
499
500#. Click the **x** in the upper-right corner to close the ACRN
501   Configurator.
502
503#. Confirm that the scenario configuration file ``scenario.xml`` appears in the
504   working directory::
505
506         ls ~/acrn-work/MyConfiguration/scenario.xml
507
508#. Confirm that the launch script appears in the
509   working directory::
510
511         ls ~/acrn-work/MyConfiguration/launch_user_vm_id1.sh
512
513.. _gsg_build:
514
515.. rst-class:: numbered-step
516
517Build ACRN
518**********
519
520#. On the development computer, build the ACRN hypervisor:
521
522   .. code-block:: bash
523
524      cd ~/acrn-work/acrn-hypervisor
525      debian/debian_build.sh clean && debian/debian_build.sh -c ~/acrn-work/MyConfiguration
526
527   The build typically takes a few minutes. When done, the build generates several
528   Debian packages in the parent (``~/acrn-work``) directory:
529
530   .. code-block:: bash
531
532      cd ../
533      ls *.deb
534         acrnd_*.deb
535         acrn-dev_*.deb
536         acrn-devicemodel_*.deb
537         acrn-doc_*.deb
538         acrn-hypervisor_*.deb
539         acrn-lifemngr_*.deb
540         acrn-system_*.deb
541         acrn-tools_*.deb
542         grub-acrn_*.deb
543
544   These Debian packages contain the ACRN hypervisor and tools to ease installing
545   ACRN on the target.
546
547#. Build the ACRN kernel for the Service VM:
548
549   a. If you have built the ACRN kernel before, run the following command to
550      remove all artifacts from the previous build. Otherwise, an error will
551      occur during the build.
552
553      .. code-block:: bash
554
555         cd ~/acrn-work/acrn-kernel
556         make distclean
557
558   #. Build the ACRN kernel:
559
560      .. code-block:: bash
561
562         cd ~/acrn-work/acrn-kernel
563         cp kernel_config_service_vm .config
564         make olddefconfig
565         make -j $(nproc) deb-pkg
566
567   The kernel build can take 15 minutes or less on a fast computer, but could
568   take two hours or more depending on the performance of your development
569   computer. When done, the build generates four Debian packages in the
570   directory above the build root directory:
571
572   .. code-block:: bash
573
574      cd ..
575      ls *acrn-service-vm*.deb
576         linux-headers-6.1.80-acrn-service-vm_6.1.80-acrn-service-vm-1_amd64.deb
577         linux-image-6.1.80-acrn-service-vm_6.1.80-acrn-service-vm-1_amd64.deb
578         linux-libc-dev_6.1.80-acrn-service-vm-1_amd64.deb
579
580#. Use the ``scp`` command to copy files from your development computer to the
581   target system.  Replace ``10.0.0.200`` with the target system's IP address
582   you found earlier::
583
584     sudo scp ~/acrn-work/acrn*.deb \
585         ~/acrn-work/grub*.deb \
586         ~/acrn-work/*acrn-service-vm*.deb \
587         ~/acrn-work/MyConfiguration/launch_user_vm_id1.sh \
588         acrn@10.0.0.200:~/acrn-work
589
590.. _gsg-install-acrn:
591
592.. rst-class:: numbered-step
593
594Install ACRN
595************
596
597#. On the target system, install the ACRN Debian package and ACRN kernel Debian packages using these
598   commands:
599
600   .. code-block:: bash
601
602      cd ~/acrn-work
603      cp ./acrn*.deb ./grub*.deb ./*acrn-service-vm*.deb /tmp
604      sudo apt install /tmp/acrn*.deb /tmp/grub*.deb /tmp/*acrn-service-vm*.deb
605
606#. Modify the GRUB menu display using ``sudo vi /etc/default/grub``, comment out the hidden style
607   and changing the timeout to 5 seconds (leave other lines as they are), as shown::
608
609      #GRUB_TIMEOUT_STYLE=hidden
610      GRUB_TIMEOUT=5
611
612   and install the new GRUB menu using::
613
614      sudo update-grub
615
616#. Reboot the system:
617
618   .. code-block:: bash
619
620      sudo reboot
621
622   The target system will reboot into the ACRN hypervisor and
623   start the Ubuntu Service VM.
624
625#. Confirm that you see the GRUB menu with "Ubuntu with ACRN hypervisor, with Linux 6.1.80-acrn-service-vm (ACRN 3.3)"
626   entry. Select it and proceed to booting ACRN. (It may be auto-selected, in which case it
627   will boot with this option automatically in 5 seconds.)
628
629   Example grub menu shown as below:
630
631   .. code-block:: console
632
633                              GNU GRUB version 2.04
634      ────────────────────────────────────────────────────────────────────────────────
635      Ubuntu
636      Advanced options for Ubuntu
637      Ubuntu-ACRN Board Inspector, with Linux 6.5.0-18-generic
638      Ubuntu-ACRN Board Inspector, with Linux 6.1.80-acrn-service-vm
639      Memory test (memtest86+x64.efi)
640      Memory test (memtest86+x64.efi, serial console)
641      Ubuntu with ACRN hypervisor, with Linux 6.5.0-18-generic (ACRN 3.3)
642      *Ubuntu with ACRN hypervisor, with Linux 6.1.80-acrn-service-vm (ACRN 3.3)
643      UEFI Firmware Settings
644
645.. _gsg-run-acrn:
646
647.. rst-class:: numbered-step
648
649Run ACRN and the Service VM
650******************************
651
652The ACRN hypervisor boots the Ubuntu Service VM automatically.
653
654#. On the target, log in to the Service VM using the ``acrn`` username and
655   password you set up previously. (It will look like a normal
656   graphical Ubuntu session.)
657
658#. Verify that the hypervisor is running by checking ``dmesg`` in the Service
659   VM:
660
661   .. code-block:: bash
662
663      dmesg | grep -i hypervisor
664
665   You should see "Hypervisor detected: ACRN" in the output. Example output of a
666   successful installation (yours may look slightly different):
667
668   .. code-block:: console
669
670      [  0.000000] Hypervisor detected: ACRN
671
672#. Enable and start the Service VM's system daemon for managing network configurations,
673   so the Device Model can create a bridge device (acrn-br0) that provides User VMs with
674   wired network access:
675
676   .. warning::
677      The IP address of Service VM may change after executing the following command.
678
679   .. code-block:: bash
680
681      sudo cp /usr/share/doc/acrnd/examples/* /etc/systemd/network
682      sudo systemctl enable --now systemd-networkd
683
684.. _gsg-user-vm:
685
686.. rst-class:: numbered-step
687
688Launch the User VM
689*******************
690
691#. On the target system, use the web browser to visit the `official Ubuntu website <https://releases.ubuntu.com/jammy/>`__ and
692   get the Ubuntu Desktop 22.04 LTS ISO image
693   ``ubuntu-22.04.4-desktop-amd64.iso`` for the User VM. (The same image you
694   specified earlier in the ACRN Configurator UI.) Alternatively, instead of
695   downloading it again, you could use ``scp`` to copy the ISO
696   image file from the development system to the ``~/acrn-work`` directory on the target system.
697
698#. If you downloaded the ISO file on the target system, copy it from the
699   Downloads directory to the ``~/acrn-work/`` directory (the location we said
700   in the ACRN Configurator for the scenario configuration for the VM), for
701   example:
702
703   .. code-block:: bash
704
705      cp ~/Downloads/ubuntu-22.04.4-desktop-amd64.iso ~/acrn-work
706
707#. Launch the User VM:
708
709   .. code-block:: bash
710
711      sudo chmod +x ~/acrn-work/launch_user_vm_id1.sh
712      sudo ~/acrn-work/launch_user_vm_id1.sh
713
714#. It may take about a minute for the User VM to boot and start running the
715   Ubuntu image. You will see a lot of output, then the console of the User VM
716   will appear as follows:
717
718   .. code-block:: console
719
720      Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.5.0-18-generic x86_64)
721
722      * Documentation:  https://help.ubuntu.com
723      * Management:     https://landscape.canonical.com
724      * Support:        https://ubuntu.com/advantage
725
726      Expanded Security Maintenance for Applications is not enabled.
727
728      0 updates can be applied immediately.
729
730      Enable ESM Apps to receive additional future security updates.
731      See https://ubuntu.com/esm or run: sudo pro status
732
733
734      The list of available updates is more than a week old.
735      To check for new updates run: sudo apt update
736
737      The programs included with the Ubuntu system are free software;
738      the exact distribution terms for each program are described in the
739      individual files in /usr/share/doc/*/copyright.
740
741      Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
742      applicable law.
743
744      To run a command as administrator (user "root"), use "sudo <command>".
745      See "man sudo_root" for details.
746
747      ubuntu@ubuntu:~$
748
749#. This User VM and the Service VM are running different Ubuntu images. Use this
750   command to see that the User VM is running the downloaded Ubuntu image:
751
752   .. code-block:: console
753
754      acrn@ubuntu:~$ uname -r
755      6.5.0-18-generic
756
757   Then open a new terminal window and use the command to see that the Service
758   VM is running the ``acrn-kernel`` Service VM image:
759
760   .. code-block:: console
761
762      acrn@asus-MINIPC-PN64:~$ uname -r
763      6.1.80-acrn-service-vm
764
765   The User VM has launched successfully. You have completed this ACRN setup.
766
767#. (Optional) To shut down the User VM, run this command in the terminal that is
768   connected to the User VM:
769
770   .. code-block:: bash
771
772      sudo poweroff
773
774.. _gsg-next-steps:
775
776Next Steps
777**************
778
779* :ref:`overview_dev` describes the ACRN configuration process, with links to
780  additional details.
781
782* A follow-on :ref:`GSG_sample_app` tutorial shows how to
783  configure, build, and run a more real-world sample application with a Real-time
784  VM communicating with an HMI VM via inter-VM shared memory (IVSHMEM).
785