doc: smh: Update semihosting documentation

This documents how to use semihosting, the new semihosting features, and
how to migrate from smhload.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
This commit is contained in:
Sean Anderson 2022-03-22 16:59:25 -04:00 committed by Tom Rini
parent 74d11d37e2
commit eeb54e81ca

View File

@ -10,6 +10,12 @@ console I/O, etc. Please see `Arm's semihosting documentation
<https://developer.arm.com/documentation/100863/latest/>`_ for more
information.
Platform Support
----------------
Versatile Express
^^^^^^^^^^^^^^^^^
For developing on armv8 virtual fastmodel platforms, semihosting is a
valuable tool since it allows access to image/configuration files before
eMMC or other NV media are available.
@ -31,13 +37,70 @@ vexpress_aemv8.h but differentiate the two models by the presence or
absence of ``CONFIG_BASE_FVP``. This change is tested and works on both the
Foundation and Base fastmodel simulators.
QEMU
^^^^
Another ARM emulator which supports semihosting is `QEMU
<https://www.qemu.org/>`_. To enable semihosting, enable
``CONFIG_SERIAL_PROBE_ALL`` when configuring U-Boot, and use
``-semihosting`` when invoking QEMU. Adding ``-nographic`` can also be
helpful. When using a semihosted serial console, QEMU will block waiting
for input. This will cause the GUI to become unresponsive. To mitigate
this, try adding ``-nographic``. For more information about building and
running QEMU, refer to the :doc:`board documentation
<../board/emulation/qemu-arm>`.
OpenOCD
^^^^^^^
Any ARM platform can use semihosting with an attached debugger. One such
debugger with good support for a variety of boards and JTAG adapters is
`OpenOCD <https://openocd.org/>`_. Semihosting is not enabled by default,
so you will need to enable it::
$ openocd -f <your board config> -c init -c halt -c \
'arm semihosting enable' -c resume
Note that enabling semihosting can only be done after attaching to the
board with ``init``, and must be done while the CPU is halted.
Loading files
-------------
The semihosting code adds a "hostfs"::
The semihosting code adds a "semihosting filesystem"::
smhload <image> <address> [env var]
load hostfs - <address> <image>
That will load an image from the host filesystem into RAM at the specified
address and optionally store the load end address in the specified
environment variable.
address. If you are using U-Boot SPL, you can also use ``BOOT_DEVICE_SMH``
which will load ``CONFIG_SPL_FS_LOAD_PAYLOAD_NAME``.
Host console
------------
U-Boot can use the host's console instead of a physical serial device by
enabling ``CONFIG_SERIAL_SEMIHOSTING``. If you don't have
``CONFIG_DM_SERIAL`` enabled, make sure you disable any other serial
drivers.
Migrating from ``smhload``
--------------------------
If you were using the ``smhload`` command, you can migrate commands like::
smhload <file> <address> [<end var>]
to a generic load command like::
load hostfs - <address> <file>
The ``load`` command will set the ``filesize`` variable with the size of
the file. The ``fdt chosen`` command has been updated to take a size
instead of an end address. If you were adding the initramfs to your device
tree like::
fdt chosen <address> <end var>
you can now run::
fdt chosen <address> $filesize