docs: update rust.rst
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Link: https://lore.kernel.org/r/20250827104147.717203-23-marcandre.lureau@redhat.com Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e4444d71e8
commit
31b35e78be
1 changed files with 32 additions and 29 deletions
|
|
@ -103,15 +103,18 @@ anymore.
|
|||
Writing Rust code in QEMU
|
||||
-------------------------
|
||||
|
||||
QEMU includes four crates:
|
||||
QEMU includes several crates:
|
||||
|
||||
* ``qemu_api`` for bindings to C code and useful functionality
|
||||
* ``common`` provides Rust-only utilities
|
||||
|
||||
* ``qemu_api_macros`` defines several procedural macros that are useful when
|
||||
* ``bql``, ``chardev``, ``hw/core``, ``migration``, ``qom``, ``system``,
|
||||
``util`` for bindings to respective QEMU C library APIs
|
||||
|
||||
* ``qemu_macros`` defines several procedural macros that are useful when
|
||||
writing C code
|
||||
|
||||
* ``pl011`` (under ``rust/hw/char/pl011``) and ``hpet`` (under ``rust/hw/timer/hpet``)
|
||||
are sample devices that demonstrate ``qemu_api`` and ``qemu_api_macros``, and are
|
||||
are sample devices that demonstrate Rust binding usage and ``qemu_macros``, and are
|
||||
used to further develop them. These two crates are functional\ [#issues]_ replacements
|
||||
for the ``hw/char/pl011.c`` and ``hw/timer/hpet.c`` files.
|
||||
|
||||
|
|
@ -124,7 +127,7 @@ This section explains how to work with them.
|
|||
Status
|
||||
''''''
|
||||
|
||||
Modules of ``qemu_api`` can be defined as:
|
||||
The stability of the modules can be defined as:
|
||||
|
||||
- *complete*: ready for use in new devices; if applicable, the API supports the
|
||||
full functionality available in C
|
||||
|
|
@ -140,26 +143,26 @@ Modules of ``qemu_api`` can be defined as:
|
|||
|
||||
The status of the modules is as follows:
|
||||
|
||||
================ ======================
|
||||
module status
|
||||
================ ======================
|
||||
``assertions`` stable
|
||||
``bitops`` complete
|
||||
``callbacks`` complete
|
||||
``cell`` stable
|
||||
``errno`` complete
|
||||
``error`` stable
|
||||
``irq`` complete
|
||||
``log`` proof of concept
|
||||
``memory`` stable
|
||||
``module`` complete
|
||||
``qdev`` stable
|
||||
``qom`` stable
|
||||
``sysbus`` stable
|
||||
``timer`` stable
|
||||
``vmstate`` stable
|
||||
``zeroable`` stable
|
||||
================ ======================
|
||||
========================== ======================
|
||||
module status
|
||||
========================== ======================
|
||||
``bql::cell`` stable
|
||||
``common::assertions`` stable
|
||||
``common::bitops`` complete
|
||||
``common::callbacks`` complete
|
||||
``common::errno`` complete
|
||||
``common::zeroable`` stable
|
||||
``hwcore::irq`` complete
|
||||
``hwcore::qdev`` stable
|
||||
``hwcore::sysbus`` stable
|
||||
``migration::vmstate`` stable
|
||||
``qom`` stable
|
||||
``system::memory`` stable
|
||||
``util::error`` stable
|
||||
``util::log`` proof of concept
|
||||
``util::module`` complete
|
||||
``util::timer`` stable
|
||||
========================== ======================
|
||||
|
||||
.. note::
|
||||
API stability is not a promise, if anything because the C APIs are not a stable
|
||||
|
|
@ -260,7 +263,7 @@ to go from a shared reference to a ``&mut``.
|
|||
|
||||
Whenever C code provides you with an opaque ``void *``, avoid converting it
|
||||
to a Rust mutable reference, and use a shared reference instead. The
|
||||
``qemu_api::cell`` module provides wrappers that can be used to tell the
|
||||
``bql::cell`` module provides wrappers that can be used to tell the
|
||||
Rust compiler about interior mutability, and optionally to enforce locking
|
||||
rules for the "Big QEMU Lock". In the future, similar cell types might
|
||||
also be provided for ``AioContext``-based locking as well.
|
||||
|
|
@ -292,7 +295,7 @@ the wrapper to be declared thread-safe::
|
|||
Writing bindings to C code
|
||||
''''''''''''''''''''''''''
|
||||
|
||||
Here are some things to keep in mind when working on the ``qemu_api`` crate.
|
||||
Here are some things to keep in mind when working on the QEMU Rust crate.
|
||||
|
||||
**Look at existing code**
|
||||
Very often, similar idioms in C code correspond to similar tricks in
|
||||
|
|
@ -355,7 +358,7 @@ from the type after ``as`` in the invocation of ``parse_macro_input!``::
|
|||
.into()
|
||||
}
|
||||
|
||||
The ``qemu_api_macros`` crate has utility functions to examine a
|
||||
The ``qemu_macros`` crate has utility functions to examine a
|
||||
``DeriveInput`` and perform common checks (e.g. looking for a struct
|
||||
with named fields). These functions return ``Result<..., syn::Error>``
|
||||
and can be used easily in the procedural macro function::
|
||||
|
|
@ -396,7 +399,7 @@ Right now, only the nightly version of ``rustfmt`` is supported. This
|
|||
might change in the future. While CI checks for correct formatting via
|
||||
``cargo fmt --check``, maintainers can fix this for you when applying patches.
|
||||
|
||||
It is expected that ``qemu_api`` provides full ``rustdoc`` documentation for
|
||||
It is expected that QEMU Rust crates provides full ``rustdoc`` documentation for
|
||||
bindings that are in their final shape or close.
|
||||
|
||||
Adding dependencies
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue