mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-27 09:02:06 +00:00
Documentation: kunit: document support for QEMU in kunit_tool
Document QEMU support, what it does, and how to use it in kunit_tool. Signed-off-by: Brendan Higgins <brendanhiggins@google.com> Reviewed-by: David Gow <davidgow@google.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
b6d5799b0b
commit
12ca7a893d
2 changed files with 86 additions and 10 deletions
|
@ -145,6 +145,54 @@ to run KUnit resource tests, you could use:
|
||||||
|
|
||||||
This uses the standard glob format for wildcards.
|
This uses the standard glob format for wildcards.
|
||||||
|
|
||||||
|
Running Tests on QEMU
|
||||||
|
=====================
|
||||||
|
|
||||||
|
kunit_tool supports running tests on QEMU as well as via UML (as mentioned
|
||||||
|
elsewhere). The default way of running tests on QEMU requires two flags:
|
||||||
|
|
||||||
|
``--arch``
|
||||||
|
Selects a collection of configs (Kconfig as well as QEMU configs
|
||||||
|
options, etc) that allow KUnit tests to be run on the specified
|
||||||
|
architecture in a minimal way; this is usually not much slower than
|
||||||
|
using UML. The architecture argument is the same as the name of the
|
||||||
|
option passed to the ``ARCH`` variable used by Kbuild. Not all
|
||||||
|
architectures are currently supported by this flag, but can be handled
|
||||||
|
by the ``--qemu_config`` discussed later. If ``um`` is passed (or this
|
||||||
|
this flag is ignored) the tests will run via UML. Non-UML architectures,
|
||||||
|
e.g. i386, x86_64, arm, um, etc. Non-UML run on QEMU.
|
||||||
|
|
||||||
|
``--cross_compile``
|
||||||
|
Specifies the use of a toolchain by Kbuild. The argument passed here is
|
||||||
|
the same passed to the ``CROSS_COMPILE`` variable used by Kbuild. As a
|
||||||
|
reminder this will be the prefix for the toolchain binaries such as gcc
|
||||||
|
for example ``sparc64-linux-gnu-`` if you have the sparc toolchain
|
||||||
|
installed on your system, or
|
||||||
|
``$HOME/toolchains/microblaze/gcc-9.2.0-nolibc/microblaze-linux/bin/microblaze-linux-``
|
||||||
|
if you have downloaded the microblaze toolchain from the 0-day website
|
||||||
|
to a directory in your home directory called ``toolchains``.
|
||||||
|
|
||||||
|
In many cases it is likely that you may want to run an architecture which is
|
||||||
|
not supported by the ``--arch`` flag, or you may want to just run KUnit tests
|
||||||
|
on QEMU using a non-default configuration. For this use case, you can write
|
||||||
|
your own QemuConfig. These QemuConfigs are written in Python. They must have an
|
||||||
|
import line ``from ..qemu_config import QemuArchParams`` at the top of the file
|
||||||
|
and the file must contain a variable called ``QEMU_ARCH`` that has an instance
|
||||||
|
of ``QemuArchParams`` assigned to it. An example can be seen in
|
||||||
|
``tools/testing/kunit/qemu_configs/x86_64.py``.
|
||||||
|
|
||||||
|
Once you have a QemuConfig you can pass it into kunit_tool using the
|
||||||
|
``--qemu_config`` flag; when used this flag replaces the ``--arch`` flag. If we
|
||||||
|
were to do this with the ``x86_64.py`` example from above, the invocation would
|
||||||
|
look something like this:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
./tools/testing/kunit/kunit.py run \
|
||||||
|
--timeout=60 \
|
||||||
|
--jobs=12 \
|
||||||
|
--qemu_config=./tools/testing/kunit/qemu_configs/x86_64.py
|
||||||
|
|
||||||
Other Useful Options
|
Other Useful Options
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
|
|
@ -609,17 +609,45 @@ non-UML architectures:
|
||||||
None of these are reasons not to run your KUnit tests on real hardware; they are
|
None of these are reasons not to run your KUnit tests on real hardware; they are
|
||||||
only things to be aware of when doing so.
|
only things to be aware of when doing so.
|
||||||
|
|
||||||
The biggest impediment will likely be that certain KUnit features and
|
Currently, the KUnit Wrapper (``tools/testing/kunit/kunit.py``) (aka
|
||||||
infrastructure may not support your target environment. For example, at this
|
kunit_tool) only fully supports running tests inside of UML and QEMU; however,
|
||||||
time the KUnit Wrapper (``tools/testing/kunit/kunit.py``) does not work outside
|
this is only due to our own time limitations as humans working on KUnit. It is
|
||||||
of UML. Unfortunately, there is no way around this. Using UML (or even just a
|
entirely possible to support other emulators and even actual hardware, but for
|
||||||
particular architecture) allows us to make a lot of assumptions that make it
|
now QEMU and UML is what is fully supported within the KUnit Wrapper. Again, to
|
||||||
possible to do things which might otherwise be impossible.
|
be clear, this is just the Wrapper. The actualy KUnit tests and the KUnit
|
||||||
|
library they are written in is fully architecture agnostic and can be used in
|
||||||
|
virtually any setup, you just won't have the benefit of typing a single command
|
||||||
|
out of the box and having everything magically work perfectly.
|
||||||
|
|
||||||
Nevertheless, all core KUnit framework features are fully supported on all
|
Again, all core KUnit framework features are fully supported on all
|
||||||
architectures, and using them is straightforward: all you need to do is to take
|
architectures, and using them is straightforward: Most popular architectures
|
||||||
your kunitconfig, your Kconfig options for the tests you would like to run, and
|
are supported directly in the KUnit Wrapper via QEMU. Currently, supported
|
||||||
merge them into whatever config your are using for your platform. That's it!
|
architectures on QEMU include:
|
||||||
|
|
||||||
|
* i386
|
||||||
|
* x86_64
|
||||||
|
* arm
|
||||||
|
* arm64
|
||||||
|
* alpha
|
||||||
|
* powerpc
|
||||||
|
* riscv
|
||||||
|
* s390
|
||||||
|
* sparc
|
||||||
|
|
||||||
|
In order to run KUnit tests on one of these architectures via QEMU with the
|
||||||
|
KUnit wrapper, all you need to do is specify the flags ``--arch`` and
|
||||||
|
``--cross_compile`` when invoking the KUnit Wrapper. For example, we could run
|
||||||
|
the default KUnit tests on ARM in the following manner (assuming we have an ARM
|
||||||
|
toolchain installed):
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
tools/testing/kunit/kunit.py run --timeout=60 --jobs=12 --arch=arm --cross_compile=arm-linux-gnueabihf-
|
||||||
|
|
||||||
|
Alternatively, if you want to run your tests on real hardware or in some other
|
||||||
|
emulation environment, all you need to do is to take your kunitconfig, your
|
||||||
|
Kconfig options for the tests you would like to run, and merge them into
|
||||||
|
whatever config your are using for your platform. That's it!
|
||||||
|
|
||||||
For example, let's say you have the following kunitconfig:
|
For example, let's say you have the following kunitconfig:
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue