mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-02 20:35:32 +00:00
While we hoped to make the headings consistent over time while doing other edits, we should instead just make the squirrels happy and do them all at once or they'll likely never be made consistent. A python script was used to find the headings, and then a call to https://pypi.org/project/titlecase to transform the title. A visual inspection was used to tweak a few unexpected resulting titles. Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
251 lines
6.5 KiB
ReStructuredText
251 lines
6.5 KiB
ReStructuredText
.. _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
|
|
- Display information about supported hypervisor shell commands
|
|
* - version
|
|
- Display the HV version information
|
|
* - vm_list
|
|
- List all VMs, displaying the VM UUID, ID, name, and state ("Started"=running)
|
|
* - vcpu_list
|
|
- List all vCPUs in all VMs
|
|
* - vcpu_dumpreg <vm_id> <vcpu_id>
|
|
- Dump registers for a specific vCPU
|
|
* - dump_host_mem <hva> <length>
|
|
- Dump the host memory region as specified by the start of the region ``hva`` (in hexadecimal)
|
|
and its length ``length`` (in bytes, decimal number).
|
|
* - dump_guest_mem <vm_id> <gva> <length>
|
|
- Dump a User VM (guest) memory region based on the VM ID (``vm_id``, in decimal),
|
|
the start of the memory region ``gva`` (in hexadecimal) and its length ``length`` (in bytes, decimal number).
|
|
* - vm_console <vm_id>
|
|
- Switch to the VM's console. Use :kbd:`Ctrl` + :kbd:`Space` to return to the ACRN
|
|
shell console
|
|
* - int
|
|
- List interrupt information per CPU
|
|
* - pt
|
|
- Show passthrough device information
|
|
* - vioapic <vm_id>
|
|
- Show virtual IOAPIC (vIOAPIC) information for a specific VM
|
|
* - dump_ioapic
|
|
- Show native IOAPIC information
|
|
* - loglevel <console_loglevel> <mem_loglevel> <npk_loglevel>
|
|
- * If no parameters are given, the command will return the level of
|
|
logging for the console, memory and npk
|
|
* Give (up to) three parameters between ``0`` (none) and ``6`` (verbose)
|
|
to set the loglevel for the console, memory, and npk (in
|
|
that order). If fewer than three parameters are given, the
|
|
loglevels for the remaining areas will not be changed
|
|
* - cpuid <leaf> [subleaf]
|
|
- Display the CPUID leaf [subleaf], in hexadecimal
|
|
* - rdmsr [-p<pcpu_id>] <msr_index>
|
|
- Read the Model-Specific Register (MSR) at index ``msr_index`` (in
|
|
hexadecimal) for CPU ID ``pcpu_id``
|
|
* - wrmsr [-p<pcpu_id>] <msr_index> <value>
|
|
- Write ``value`` (in hexadecimal) to the Model-Specific Register (MSR) at
|
|
index ``msr_index`` (in hexadecimal) for CPU ID ``pcpu_id``
|
|
|
|
Command Examples
|
|
****************
|
|
|
|
The following sections provide further details and examples for some of these commands.
|
|
|
|
Vm_list
|
|
=======
|
|
|
|
``vm_list`` provides the name of each virtual machine and its corresponding ID and
|
|
state.
|
|
|
|
.. figure:: images/shell_image8.png
|
|
:align: center
|
|
|
|
vm_list information
|
|
|
|
Vcpu_list
|
|
=========
|
|
|
|
``vcpu_list`` provides information about virtual CPUs (vCPU), including
|
|
the VM ID, PCPU ID, VCPU ID, VCPU ROLE (primary or secondary), and VCPU
|
|
STATE (init, paused, running, zombie or unknown).
|
|
|
|
.. figure:: images/shell_image7.png
|
|
:align: center
|
|
|
|
vcpu_list information
|
|
|
|
Vcpu_dumpreg
|
|
============
|
|
|
|
``vcpu_dumpreg vmid cpuid`` provides vCPU related information such as
|
|
registers values, etc.
|
|
|
|
In the following example, we dump vCPU0 RIP register value and get into
|
|
the Service VM to search for the currently running function, using these
|
|
commands::
|
|
|
|
cat /proc/kallsyms | grep RIP_value
|
|
|
|
As you can see, vCPU0 is running in
|
|
function ``acpi_idle_do_entry``.
|
|
|
|
.. figure:: images/shell_image10.png
|
|
:align: center
|
|
|
|
vcpu_dumpreg information
|
|
|
|
.. figure:: images/shell_image9.png
|
|
:align: center
|
|
|
|
system map information
|
|
|
|
Dump_host_mem
|
|
=============
|
|
|
|
``dump_host_mem hva length`` provides the specified memory target data such as
|
|
the physical CPU (pCPU) number, etc.
|
|
|
|
In this example, we know the pCPU active bitmap and physical CPU number
|
|
physical memory address through
|
|
``build/hypervisor/acrn.map``. (Note that the path for
|
|
``acrn.map`` depends on how we build the hypervisor.)
|
|
|
|
Then we can dump the memory address of the pCPU active bitmap and CPU
|
|
number, we will know that pCPU active bitmap is 0x000000000000000f and
|
|
pCPU number is 0x0000000000000004.
|
|
|
|
.. figure:: images/shell_image12.png
|
|
:align: center
|
|
|
|
dumpmem information
|
|
|
|
.. figure:: images/shell_image11.png
|
|
:align: center
|
|
|
|
acrn map information
|
|
|
|
Dump_guest_mem
|
|
==============
|
|
|
|
The ``dump_guest_mem`` command can dump guest memory according to the given
|
|
VM ID and guest virtual address (``gva``).
|
|
|
|
In this example, we know the starting address of kernel text segment
|
|
in guest console or through the ``system.map`` (Note that the path for
|
|
``system.map`` depends on how we build the kernel)
|
|
|
|
.. figure:: images/shell_image19.png
|
|
:align: center
|
|
|
|
guest virtual address
|
|
|
|
.. figure:: images/shell_image20.png
|
|
:align: center
|
|
|
|
guest memory information
|
|
|
|
Vm_console
|
|
===========
|
|
|
|
The ``vm_console`` command switches the ACRN's console to become the VM's console.
|
|
Press :kbd:`Ctrl` + :kbd:`Space` to return to the ACRN shell console.
|
|
|
|
Vioapic
|
|
=======
|
|
|
|
``vioapic <vm_id>`` shows the virtual IOAPIC information for a specific
|
|
VM. In the following figure, we show the virtual IOPIC information for
|
|
VM1:
|
|
|
|
.. figure:: images/shell_image6.png
|
|
:align: center
|
|
|
|
vioapic information
|
|
|
|
Dump_ioapic
|
|
===========
|
|
|
|
``dump_ioapic`` provides IOAPIC information and we can get IRQ number,
|
|
IRQ vector number, etc.
|
|
|
|
.. figure:: images/shell_image14.png
|
|
:align: center
|
|
|
|
dump_ioapic information
|
|
|
|
Pt
|
|
==
|
|
|
|
``pt`` provides passthrough detailed information, such as the virtual
|
|
machine number, interrupt type, interrupt request, interrupt vector,
|
|
trigger mode, etc.
|
|
|
|
.. figure:: images/shell_image13.png
|
|
:align: center
|
|
|
|
pt information
|
|
|
|
Int
|
|
===
|
|
|
|
``int`` provides interrupt information on all CPUs and their corresponding
|
|
interrupt vector.
|
|
|
|
.. figure:: images/shell_image17.png
|
|
:align: center
|
|
|
|
int information
|
|
|
|
Cpuid
|
|
=====
|
|
|
|
``cpuid <leaf> [subleaf]`` provides the CPUID leaf [subleaf] in
|
|
hexadecimal.
|
|
|
|
.. figure:: images/shell_image15.png
|
|
:align: center
|
|
|
|
cpuid information
|
|
|
|
RDMSR
|
|
=====
|
|
|
|
We can read model specific register (MSR) to get register
|
|
values through ``rdmsr [-p<pcpu_id>] <msr_index>``.
|
|
|
|
In the following example, we can get IA32_APIC_BASE value of pCPU 0 through
|
|
the command::
|
|
|
|
rdmsr -p0 1b
|
|
|
|
and see that 1B (Hexadecimal) is the IA32_APIC_BASE MSR address.
|
|
|
|
.. figure:: images/shell_image16.png
|
|
:align: center
|
|
|
|
IA32_APIC_BASE register information
|
|
|
|
.. figure:: images/shell_image18.png
|
|
:align: center
|
|
|
|
rdmsr information
|
|
|
|
WRMSR
|
|
=====
|
|
|
|
We can write model specific register (MSR) to set register
|
|
values through ``wrmsr [-p<pcpu_id>] <msr_index> <value>``.
|
|
|
|
In the following example, we can set IA32_APIC_BASE value of pCPU 1 through
|
|
the command::
|
|
|
|
wrmsr -p1 1b 0xfee00c00
|