From 3965593df6b5d2c66842265af016923030cc3ccd Mon Sep 17 00:00:00 2001 From: "David B. Kinder" Date: Thu, 28 Jun 2018 07:55:57 -0700 Subject: [PATCH] doc: reorganize documentation We've been expanding documentation, and now need to organize things a bit cleaner and separate content into new major folders: Introduction, Getting Started, User Guides, Developer Guides, Tutorials, and Release notes.. Signed-off-by: David B. Kinder --- doc/contribute/index.rst | 13 ----- .../contribute_guidelines.rst | 0 .../doc_guidelines.rst | 0 .../images/ACRN-favicon-32x32.png | Bin 0 -> 1607 bytes .../images/ACRN_Logo_200w.png | Bin 0 -> 16396 bytes .../images/ACRN_Logo_300w.png | Bin 0 -> 23801 bytes doc/developer-guides/images/ACRN_Logo_56h.png | Bin 0 -> 13024 bytes doc/developer-guides/images/ACRNlogo.png | Bin 0 -> 6665 bytes .../images/primer-dma-address-mapping.png | Bin .../images/primer-host-gdt.png | Bin .../images/primer-hypervisor-interrupt.png | Bin .../images/primer-mem-layout.png | Bin .../images/primer-pirq-routing.png | Bin .../images/primer-pv-mapping.png | Bin .../images/primer-sos-ept-mapping.png | Bin .../images/primer-symmetric-io.png | Bin .../images/primer-uos-ept-mapping.png | Bin .../images/primer-virtio-net.png | Bin doc/developer-guides/index.rst | 25 ++++++++ .../index.rst => developer-guides/primer.rst} | 0 .../index.rst => getting-started/apl-nuc.rst} | 39 +++++-------- doc/{ => getting-started}/hardware.rst | 22 +++++-- .../images/gsg-bootmenu.png | Bin .../images/gsg-sos-console.png | Bin .../images/gsg-successful-boot.png | Bin .../images/up2-gui.png | Bin doc/getting-started/index.rst | 22 +++++++ .../up2.rst | 41 +++++++++---- doc/howtos/index.rst | 27 --------- doc/howtos/tech/placeholder.rst | 6 -- doc/index.rst | 13 ++--- .../process => tutorials}/docbuild.rst | 2 +- .../process => tutorials}/graphviz.rst | 0 .../images}/acrn-doc-fork.png | Bin .../images/boot-flow.dot | 0 .../images/circle-square.dot | 0 .../process => tutorials}/images/gaspump.dot | 0 .../images/node-shape-edges.dot | 0 .../process => tutorials}/images/record.dot | 0 doc/tutorials/index.rst | 14 +++++ doc/user-guides/acrn-shell.rst | 55 ++++++++++++++++++ doc/user-guides/index.rst | 10 ++++ doc/{ => user-guides}/tools.rst | 2 +- 43 files changed, 193 insertions(+), 98 deletions(-) delete mode 100644 doc/contribute/index.rst rename doc/{contribute => developer-guides}/contribute_guidelines.rst (100%) rename doc/{contribute => developer-guides}/doc_guidelines.rst (100%) create mode 100644 doc/developer-guides/images/ACRN-favicon-32x32.png create mode 100644 doc/developer-guides/images/ACRN_Logo_200w.png create mode 100644 doc/developer-guides/images/ACRN_Logo_300w.png create mode 100644 doc/developer-guides/images/ACRN_Logo_56h.png create mode 100644 doc/developer-guides/images/ACRNlogo.png rename doc/{primer => developer-guides}/images/primer-dma-address-mapping.png (100%) rename doc/{primer => developer-guides}/images/primer-host-gdt.png (100%) rename doc/{primer => developer-guides}/images/primer-hypervisor-interrupt.png (100%) rename doc/{primer => developer-guides}/images/primer-mem-layout.png (100%) rename doc/{primer => developer-guides}/images/primer-pirq-routing.png (100%) rename doc/{primer => developer-guides}/images/primer-pv-mapping.png (100%) rename doc/{primer => developer-guides}/images/primer-sos-ept-mapping.png (100%) rename doc/{primer => developer-guides}/images/primer-symmetric-io.png (100%) rename doc/{primer => developer-guides}/images/primer-uos-ept-mapping.png (100%) rename doc/{primer => developer-guides}/images/primer-virtio-net.png (100%) create mode 100644 doc/developer-guides/index.rst rename doc/{primer/index.rst => developer-guides/primer.rst} (100%) rename doc/{getting_started/index.rst => getting-started/apl-nuc.rst} (93%) rename doc/{ => getting-started}/hardware.rst (58%) rename doc/{getting_started => getting-started}/images/gsg-bootmenu.png (100%) rename doc/{getting_started => getting-started}/images/gsg-sos-console.png (100%) rename doc/{getting_started => getting-started}/images/gsg-successful-boot.png (100%) rename doc/{getting_started => getting-started}/images/up2-gui.png (100%) create mode 100644 doc/getting-started/index.rst rename doc/{getting_started => getting-started}/up2.rst (56%) delete mode 100644 doc/howtos/index.rst delete mode 100644 doc/howtos/tech/placeholder.rst rename doc/{howtos/process => tutorials}/docbuild.rst (99%) rename doc/{howtos/process => tutorials}/graphviz.rst (100%) rename doc/{howtos/process => tutorials/images}/acrn-doc-fork.png (100%) rename doc/{howtos/process => tutorials}/images/boot-flow.dot (100%) rename doc/{howtos/process => tutorials}/images/circle-square.dot (100%) rename doc/{howtos/process => tutorials}/images/gaspump.dot (100%) rename doc/{howtos/process => tutorials}/images/node-shape-edges.dot (100%) rename doc/{howtos/process => tutorials}/images/record.dot (100%) create mode 100644 doc/tutorials/index.rst create mode 100644 doc/user-guides/acrn-shell.rst create mode 100644 doc/user-guides/index.rst rename doc/{ => user-guides}/tools.rst (81%) diff --git a/doc/contribute/index.rst b/doc/contribute/index.rst deleted file mode 100644 index 196e9f09c..000000000 --- a/doc/contribute/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. _contribute: - -Contributing to the Project -########################### - -As an open-source project, we welcome and encourage the community to submit -patches for code, documentation, tests, and more, directly to the project. - -.. toctree:: - :maxdepth: 1 - - contribute_guidelines.rst - doc_guidelines.rst diff --git a/doc/contribute/contribute_guidelines.rst b/doc/developer-guides/contribute_guidelines.rst similarity index 100% rename from doc/contribute/contribute_guidelines.rst rename to doc/developer-guides/contribute_guidelines.rst diff --git a/doc/contribute/doc_guidelines.rst b/doc/developer-guides/doc_guidelines.rst similarity index 100% rename from doc/contribute/doc_guidelines.rst rename to doc/developer-guides/doc_guidelines.rst diff --git a/doc/developer-guides/images/ACRN-favicon-32x32.png b/doc/developer-guides/images/ACRN-favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..eb4798442d67b0805b9ae5969098a152bc11ddc4 GIT binary patch literal 1607 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 literal 0 HcmV?d00001 diff --git a/doc/developer-guides/images/ACRNlogo.png b/doc/developer-guides/images/ACRNlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9a4195943cd1aac27f827e86f6512b41129cd6 GIT binary patch literal 6665 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 (UP2) is also -known to work and the few specificities for it are described -in :ref:`getting_started_up2`. +Two Apollo Lake Intel platforms, described in :ref:`hardware`, are currently +supported for ACRN development: -The recommended NUC hardware configuration is: - -- NUC: `NUC Kit - NUC6CAYH `__ -- `UEFI BIOS (version 0047) `__. -- Memory: 8G DDR3 -- SSD: 120G SATA +- The `UP Squared board `_ (UP2) is also + known to work and its setup is described in :ref:`getting-started-up2`. Firmware update on the NUC ========================== @@ -44,8 +31,9 @@ Set up a Clear Linux Operating System ===================================== Currently, an installable version of ARCN does not exist. Therefore, you -need to setup a base Clear Linux OS to bootstrap ACRN on your platform. You'll -need a network connection for your platform to complete this setup. +need to setup a base Clear Linux OS and you'll build and bootstrap ACRN +on your platform. You'll need a network connection for your platform to +complete this setup. .. note:: ACRN requires Clear Linux version 22140 or newer. The instructions below @@ -163,7 +151,8 @@ partition. Follow these steps: 1. ``bootloader=``: this sets the EFI executable to be loaded once the hypervisor is up and running. This is typically the bootloader of the Service OS and the - default value is to use the Clearlinux bootloader, i.e.: ``\EFI\org.clearlinux\bootloaderx64.efi``. + default value is to use the Clearlinux bootloader, i.e.: + ``\EFI\org.clearlinux\bootloaderx64.efi``. #. ``uart=``: this tells the hypervisor where the serial port (UART) is found or whether it should be disabled. There are three forms for this parameter: diff --git a/doc/hardware.rst b/doc/getting-started/hardware.rst similarity index 58% rename from doc/hardware.rst rename to doc/getting-started/hardware.rst index b66a7d861..a0e925441 100644 --- a/doc/hardware.rst +++ b/doc/getting-started/hardware.rst @@ -7,7 +7,7 @@ We welcome community contributions to help build Project ACRN support for a broad collection of architectures and platforms. This initial release of Project ACRN has been tested on the following -hardware platform. +hardware platforms. Intel Apollo Lake NUC ********************* @@ -22,6 +22,9 @@ search online for where to purchase this NUC from `Amazon`_, `SimplyNUC`_, and other vendors. Be sure to purchase the NUC with the recommended memory and storage options noted above. +Visit the :ref:`getting-started-apl-nuc` page for instructions on how to set +up ACRN on the NUC. + .. _AnandTech review: https://www.anandtech.com/show/12295/intel-nuc6cayh-arches-canyon-apollo-lake-ucff-pc-review @@ -34,8 +37,19 @@ recommended memory and storage options noted above. UP Squared board **************** -The `UP Squared board `_ (UP2) is the x86 maker board based on Intel Apollo Lake platform. The UP boards have been used in IoT, industrial automation, digital signage and more. The UP2 features Intel `Celeron N3550 `_ and Intel `Pentium N4200 `_ SoCs. Both have been confirmed to work with ACRN. +The `UP Squared board `_ (UP2) is +an x86 maker board based on the Intel Apollo Lake platform. The UP boards +are used in IoT, industrial automation, digital signage, and more. -You can purchase this board directly online from `UP Shop `_ or contact one of the `local reseller `_. +The UP2 features Intel `Celeron N3550 +`_ +and Intel `Pentium N4200 +`_ +SoCs. Both have been confirmed to work with ACRN. -Visit the :ref:`getting_started_up2` page for instructions on how to set up ACRN on the UP2 board. +You can purchase this board directly online from `UP Shop +`_ or contact one of the `local reseller +`_. + +Visit the :ref:`getting-started-up2` page for instructions on how to set +up ACRN on the UP2 board. diff --git a/doc/getting_started/images/gsg-bootmenu.png b/doc/getting-started/images/gsg-bootmenu.png similarity index 100% rename from doc/getting_started/images/gsg-bootmenu.png rename to doc/getting-started/images/gsg-bootmenu.png diff --git a/doc/getting_started/images/gsg-sos-console.png b/doc/getting-started/images/gsg-sos-console.png similarity index 100% rename from doc/getting_started/images/gsg-sos-console.png rename to doc/getting-started/images/gsg-sos-console.png diff --git a/doc/getting_started/images/gsg-successful-boot.png b/doc/getting-started/images/gsg-successful-boot.png similarity index 100% rename from doc/getting_started/images/gsg-successful-boot.png rename to doc/getting-started/images/gsg-successful-boot.png diff --git a/doc/getting_started/images/up2-gui.png b/doc/getting-started/images/up2-gui.png similarity index 100% rename from doc/getting_started/images/up2-gui.png rename to doc/getting-started/images/up2-gui.png diff --git a/doc/getting-started/index.rst b/doc/getting-started/index.rst new file mode 100644 index 000000000..2c8fc9da3 --- /dev/null +++ b/doc/getting-started/index.rst @@ -0,0 +1,22 @@ +.. _getting_started: + +Getting Started Guides +###################### + +After reading the :ref:`introduction`, use these guides to get started +using ACRN in a reference setup. We'll show how to set up your +development and target hardware, and then how to boot up the ACRN +hypervisor and the `Clear Linux`_ Service OS and Guest OS on the Intel +(EFI) platform. + +.. _Clear Linux: https://clearlinux.org + +ACRN development is currently supported on Apollo Lake Intel platforms, +described in :ref:`hardware`. Follow the setup guides listed here: + +.. toctree:: + :maxdepth: 1 + + hardware.rst + apl-nuc.rst + up2.rst diff --git a/doc/getting_started/up2.rst b/doc/getting-started/up2.rst similarity index 56% rename from doc/getting_started/up2.rst rename to doc/getting-started/up2.rst index 7a21d8bb8..1fad73a98 100644 --- a/doc/getting_started/up2.rst +++ b/doc/getting-started/up2.rst @@ -1,4 +1,4 @@ -.. _getting_started_up2: +.. _getting-started-up2: Getting started guide for UP2 board ################################### @@ -6,22 +6,40 @@ Getting started guide for UP2 board Hardware setup ************** -The `UP Squared board `_ (UP2) is the x86 maker board based on Intel Apollo Lake platform. The UP boards have been used in IoT, industrial automation, digital signage and more. The UP2 features Intel `Celeron N3550 `_ and Intel `Pentium N4200 `_ SoCs. Both have been confirmed to work with ACRN. +The `UP Squared board `_ (UP2) is +an x86 maker board based on the Intel Apollo Lake platform. The UP boards +are used in IoT applications, industrial automation, digital signage, and more. + +The UP2 features Intel `Celeron N3550 +`_ +and Intel `Pentium N4200 +`_ +SoCs. Both have been confirmed to work with ACRN. Connecting to the serial port ============================= -The UP2 board has two serial ports. Please refer to the `UP2 specifications `_ for more information. We'll access the serial port through the I/O pins in the 40-pin HAT connector using a `USB TTL serial cable `_. Connect pin 6 (``GND``), pin 8 (``TX``) and pin 10 (``RX``) of the HAT connector to respectively the ``GND``, ``RX`` and ``TX`` pins of your USB serial cable. Plug the USB TTL serial cable into your PC and use a console emulation tool such as ``minicom`` or ``putty`` to communicate with the UP2 board for debugging. +The UP2 board has two serial ports. Please refer to the `UP2 +specifications `_ +for more information. We'll access the serial port through the I/O pins +in the 40-pin HAT connector using a `USB TTL serial cable +`_. Connect pin 6 +(``GND``), pin 8 (``TX``) and pin 10 (``RX``) of the HAT connector to +respectively the ``GND``, ``RX`` and ``TX`` pins of your USB serial +cable. Plug the USB TTL serial cable into your PC and use a console +emulation tool such as ``minicom`` or ``putty`` to communicate with the +UP2 board for debugging. Software setup ************** Setting up the ACRN hypervisor (and associated components) on the UP2 board is no different than other hardware platforms so please follow -the instructions provided in the :ref:`getting_started`. +the instructions provided in the :ref:`getting-started-apl-nuc`, with +the additional information below. There are a few parameters specific to the UP2 board that differ from -what is referenced in the :ref:`getting_started` section: +what is referenced in the :ref:`getting-started-apl-nuc` section: 1. Serial Port settings #. Storage device name @@ -36,16 +54,16 @@ You will need to keep these in mind in a few places: # mount /dev/mmcblk0p1 /mnt * When adjusting the ``acrn.conf`` file - + * Change the ``options`` line and set ``pci_devices_ignore=(0:18:1)`` * Set the ``root=`` parameter using the ``PARTUUID`` or device name directly * When configuring the EFI firmware to boot the ACRN hypervisor by default - .. code-block:: console + .. code-block:: console - # efibootmgr -c -l "\EFI\acrn\acrn.efi" -d /dev/mmcblk0 -p 1 -L "ACRN Hypervisor" \ - -u "bootloader=\EFI\org.clearlinux\bootloaderx64.efi uart=mmio@0x9141e000" + # efibootmgr -c -l "\EFI\acrn\acrn.efi" -d /dev/mmcblk0 -p 1 -L "ACRN Hypervisor" \ + -u "bootloader=\EFI\org.clearlinux\bootloaderx64.efi uart=mmio@0x9141e000" UP2 serial port setting ======================= @@ -81,6 +99,5 @@ Running the hypervisor ********************** Now that the hypervisor and Service OS have been installed on your UP2 board, -you can proceed with the rest of the instructions in the :ref:`getting_started` -and install the User OS (UOS). - +you can proceed with the rest of the instructions in the +:ref:`getting-started-apl-nuc` and install the User OS (UOS). diff --git a/doc/howtos/index.rst b/doc/howtos/index.rst deleted file mode 100644 index 8f3bedc53..000000000 --- a/doc/howtos/index.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. _howtos: - -How-Tos -####### - -Our technical documentation for Project ACRN is being developed right -along with the features. Here are some how-to technical notes that help -explain how you can use ACRN capabilities. - - -Technical Notes -=============== - -.. toctree:: - :maxdepth: 1 - :glob: - - tech/* - -Process Notes -============= - -.. toctree:: - :maxdepth: 1 - :glob: - - process/* diff --git a/doc/howtos/tech/placeholder.rst b/doc/howtos/tech/placeholder.rst deleted file mode 100644 index 01ea3aa10..000000000 --- a/doc/howtos/tech/placeholder.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. _wip: - -Work in Progress -################ - -This is a placeholder doc for technical how-to articles in-progress. diff --git a/doc/index.rst b/doc/index.rst index eb7c67044..3eb8c9b44 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -25,16 +25,11 @@ Sections :maxdepth: 1 introduction/index.rst - hardware.rst - getting_started/index.rst - getting_started/up2.rst - primer/index.rst - howtos/index.rst + getting-started/index.rst + user-guides/index.rst + developer-guides/index.rst + tutorials/index.rst release_notes.rst - contribute/index.rst - reference/kconfig/index.rst - api/index.rst - tools.rst Indices and Tables ****************** diff --git a/doc/howtos/process/docbuild.rst b/doc/tutorials/docbuild.rst similarity index 99% rename from doc/howtos/process/docbuild.rst rename to doc/tutorials/docbuild.rst index c679edd33..63575ad93 100644 --- a/doc/howtos/process/docbuild.rst +++ b/doc/tutorials/docbuild.rst @@ -75,7 +75,7 @@ repos (though https clones work too): #. Use your browser to visit https://github.com/projectacrn and do a fork of the **acrn-hypervisor** repo to your personal GitHub account.) - .. image:: acrn-doc-fork.png + .. image:: images/acrn-doc-fork.png :align: center #. At a command prompt, create the working folder and clone the acrn-hypervisor diff --git a/doc/howtos/process/graphviz.rst b/doc/tutorials/graphviz.rst similarity index 100% rename from doc/howtos/process/graphviz.rst rename to doc/tutorials/graphviz.rst diff --git a/doc/howtos/process/acrn-doc-fork.png b/doc/tutorials/images/acrn-doc-fork.png similarity index 100% rename from doc/howtos/process/acrn-doc-fork.png rename to doc/tutorials/images/acrn-doc-fork.png diff --git a/doc/howtos/process/images/boot-flow.dot b/doc/tutorials/images/boot-flow.dot similarity index 100% rename from doc/howtos/process/images/boot-flow.dot rename to doc/tutorials/images/boot-flow.dot diff --git a/doc/howtos/process/images/circle-square.dot b/doc/tutorials/images/circle-square.dot similarity index 100% rename from doc/howtos/process/images/circle-square.dot rename to doc/tutorials/images/circle-square.dot diff --git a/doc/howtos/process/images/gaspump.dot b/doc/tutorials/images/gaspump.dot similarity index 100% rename from doc/howtos/process/images/gaspump.dot rename to doc/tutorials/images/gaspump.dot diff --git a/doc/howtos/process/images/node-shape-edges.dot b/doc/tutorials/images/node-shape-edges.dot similarity index 100% rename from doc/howtos/process/images/node-shape-edges.dot rename to doc/tutorials/images/node-shape-edges.dot diff --git a/doc/howtos/process/images/record.dot b/doc/tutorials/images/record.dot similarity index 100% rename from doc/howtos/process/images/record.dot rename to doc/tutorials/images/record.dot diff --git a/doc/tutorials/index.rst b/doc/tutorials/index.rst new file mode 100644 index 000000000..19da1d670 --- /dev/null +++ b/doc/tutorials/index.rst @@ -0,0 +1,14 @@ +.. _tutorials: + +Tutorials +######### + +Here are some technical notes that help explain how you can use +and work with ACRN capabilities and its development environment. + + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/doc/user-guides/acrn-shell.rst b/doc/user-guides/acrn-shell.rst new file mode 100644 index 000000000..1b9a02505 --- /dev/null +++ b/doc/user-guides/acrn-shell.rst @@ -0,0 +1,55 @@ +.. acrnshell: + +ACRN Shell Commands +################### + +The ACRN hypervisor shell supports the following commands: + +.. list-table:: + :header-rows: 1 + :widths: 40 60 + + * - Command (and parameters) + - Description + * - help + - Displays information about supported hypervisor shell commands + * - vm_list + - Lists all VMs, displaying VM Name, VM ID, and VM State (ON=running) + * - vcpu_list + - Lists all VCPUs in all VMs + * - vcpu_pause + - Pauses a specific VCPU + * - vcpu_resume + - Resumes a specific VCPU + * - vcpu_dumpreg + - Dumps registers for a specific VCPU + * - vcpu_dumpmem + - Dumps memory for a specific VCPU, starting a given address, and for + a given length (in bytes) + * - vm_console + - Switches to the SOS's console + * - int + - Lists interrupt information per CPU + * - pt + - Shows pass-through device information + * - reboot + - Triggers a system warm reboot (immediately) + * - lsreq + - Shows ioreq information + * - dump_ioapic + - Shows native ioapic information + * - vmexit + - Shows vmexit profiling + * - logdump + - Dumps the log buffer for the physical CPU + * - trace + - Dumps a CPU's recent events within milliseconds + * - get_loglevel + - Get the loglevel + * - set_loglevel [mem_loglevel] + - Set loglevel [0 (none) - 6 (verbose)] for the console and optionally + for memory + * - cpuid [subleaf] + - Displays the CPUID leaf [subleaf], in hexadecimal + * - crash + - Triggers a system crash diff --git a/doc/user-guides/index.rst b/doc/user-guides/index.rst new file mode 100644 index 000000000..c6ce7b0e3 --- /dev/null +++ b/doc/user-guides/index.rst @@ -0,0 +1,10 @@ +.. _userguides: + +User Guides +########### + +.. toctree:: + :maxdepth: 2 + + acrn-shell.rst + tools.rst diff --git a/doc/tools.rst b/doc/user-guides/tools.rst similarity index 81% rename from doc/tools.rst rename to doc/user-guides/tools.rst index a18016692..37c2c663f 100644 --- a/doc/tools.rst +++ b/doc/user-guides/tools.rst @@ -7,4 +7,4 @@ Tools :glob: :maxdepth: 1 - tools/** + ../tools/**