178 lines
5.5 KiB
ReStructuredText
178 lines
5.5 KiB
ReStructuredText
.. _qemu_x86:
|
|
|
|
X86 Emulation (QEMU)
|
|
####################
|
|
|
|
Overview
|
|
********
|
|
|
|
The X86 QEMU board configuration is used to emulate the X86 architecture.
|
|
|
|
.. figure:: qemu_x86.png
|
|
:width: 600px
|
|
:align: center
|
|
:alt: Qemu
|
|
|
|
Qemu (Credit: qemu.org)
|
|
|
|
This board configuration provides support for an x86 Minute IA (Lakemont) CPU
|
|
and the following devices:
|
|
|
|
* HPET
|
|
* Advanced Programmable Interrupt Controller (APIC)
|
|
* NS16550 UART
|
|
|
|
|
|
Hardware
|
|
********
|
|
|
|
Supported Features
|
|
==================
|
|
|
|
This configuration supports the following hardware features:
|
|
|
|
+--------------+------------+-----------------------+
|
|
| Interface | Controller | Driver/Component |
|
|
+==============+============+=======================+
|
|
| HPET | on-chip | system clock |
|
|
+--------------+------------+-----------------------+
|
|
| APIC | on-chip | interrupt controller |
|
|
+--------------+------------+-----------------------+
|
|
| NS16550 | on-chip | serial port |
|
|
| UART | | |
|
|
+--------------+------------+-----------------------+
|
|
|
|
Devices
|
|
=======
|
|
|
|
HPET System Clock Support
|
|
-------------------------
|
|
|
|
The configuration uses an HPET clock frequency of 25 MHz.
|
|
|
|
Serial Port
|
|
-----------
|
|
|
|
The board configuration uses a single serial communication channel that
|
|
uses the NS16550 serial driver operating in polling mode. To override, enable
|
|
the UART_INTERRUPT_DRIVEN Kconfig option, which allows the system to be
|
|
interrupt-driven.
|
|
|
|
If SLIP networking is enabled (see below), an additional serial port will be
|
|
used for it.
|
|
|
|
Known Problems or Limitations
|
|
=============================
|
|
|
|
The following platform features are unsupported:
|
|
|
|
* Isolated Memory Regions
|
|
* Serial port in Direct Memory Access (DMA) mode
|
|
* Serial Peripheral Interface (SPI) flash
|
|
* General-Purpose Input/Output (GPIO)
|
|
* Inter-Integrated Circuit (I2C)
|
|
* Ethernet
|
|
* Supervisor Mode Execution Protection (SMEP)
|
|
|
|
Programming and Debugging
|
|
*************************
|
|
|
|
Applications for the ``qemu_x86`` board configuration can be built and run in
|
|
the usual way for emulated boards (see :ref:`build_an_application` and
|
|
:ref:`application_run` for more details).
|
|
|
|
Flashing
|
|
========
|
|
|
|
While this board is emulated and you can't "flash" it, you can use this
|
|
configuration to run basic Zephyr applications and kernel tests in the QEMU
|
|
emulated environment. For example, with the :ref:`synchronization_sample`:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/synchronization
|
|
:host-os: unix
|
|
:board: qemu_x86
|
|
:goals: run
|
|
|
|
This will build an image with the synchronization sample app, boot it using
|
|
QEMU, and display the following console output:
|
|
|
|
.. code-block:: console
|
|
|
|
***** BOOTING ZEPHYR OS v1.8.99 - BUILD: Jun 27 2017 13:09:26 *****
|
|
threadA: Hello World from x86!
|
|
threadB: Hello World from x86!
|
|
threadA: Hello World from x86!
|
|
threadB: Hello World from x86!
|
|
threadA: Hello World from x86!
|
|
threadB: Hello World from x86!
|
|
threadA: Hello World from x86!
|
|
threadB: Hello World from x86!
|
|
threadA: Hello World from x86!
|
|
threadB: Hello World from x86!
|
|
|
|
Exit QEMU by pressing :kbd:`CTRL+A` :kbd:`x`.
|
|
|
|
For qemu_x86_64 platform, it also supports to use UEFI bootable method
|
|
to run Zephyr applications and kernel tests, but you need to set up
|
|
some environment configurations as follows:
|
|
|
|
* Please install uefi-run in your system environment according to this
|
|
reference link https://github.com/Richard-W/uefi-run.
|
|
|
|
* Please install OVMF in your system environment according to this
|
|
reference link https://github.com/tianocore/tianocore.github.io/wiki/OVMF.
|
|
|
|
* Set system environment variable OVMF_FD_PATH,
|
|
for example: export OVMF_FD_PATH=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd
|
|
|
|
For example, with the test "sample.basic.helloworld.uefi":
|
|
|
|
.. code-block:: console
|
|
|
|
export OVMF_FD_PATH=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd
|
|
west build -b qemu_x86_64 -p auto samples/hello_world/ -DCONF_FILE=prj_uefi.conf
|
|
west build -t run
|
|
|
|
This will build an image with the hello_world sample app, boot it on
|
|
qemu_x86_64 using UEFI, and display the following console output:
|
|
|
|
.. code-block:: console
|
|
|
|
UEFI Interactive Shell v2.2
|
|
EDK II
|
|
UEFI v2.70 (EDK II, 0x00010000)
|
|
Mapping table
|
|
FS0: Alias(s):F0a:;BLK0:
|
|
PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)
|
|
BLK1: Alias(s):
|
|
PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)
|
|
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
|
|
Starting UEFI application...
|
|
*** Zephyr EFI Loader ***
|
|
Zeroing 524544 bytes of memory at 0x105000
|
|
Copying 32768 data bytes to 0x1000 from image offset
|
|
Copying 20480 data bytes to 0x100000 from image offset 32768
|
|
Copying 540416 data bytes to 0x185100 from image offset 53248
|
|
Jumping to Entry Point: 0x112b (48 31 c0 48 31 d2 48)
|
|
*** Booting Zephyr OS build zephyr-v2.6.0-1472-g61810ec36d28 ***
|
|
Hello World! qemu_x86_64
|
|
|
|
Exit QEMU by pressing :kbd:`CTRL+A` :kbd:`x`.
|
|
|
|
Debugging
|
|
=========
|
|
|
|
Refer to the detailed overview about :ref:`application_debugging`.
|
|
|
|
Networking
|
|
==========
|
|
|
|
The board supports SLIP networking over an emulated serial port
|
|
(``CONFIG_NET_SLIP_TAP=y``). The detailed setup is described in
|
|
:ref:`networking_with_qemu`.
|
|
|
|
It is also possible to use the QEMU built-in Ethernet adapter to connect
|
|
to the host system. This is faster than using SLIP and is also the preferred
|
|
way. See :ref:`networking_with_eth_qemu` for details.
|