zephyr/samples/subsys/llext/modules
Adam Wojasinski 2e0aaecaa8 llext: Include aarch64 in LLEXT sample
Add entries in sample to test aarch64 architecture that supports
llext subsystem.

Signed-off-by: Adam Wojasinski <awojasinski@baylibre.com>
2024-09-12 14:48:55 +02:00
..
src llext: use EXPORT_SYMBOL() universally 2024-09-02 12:31:52 -04:00
CMakeLists.txt
Kconfig samples/llext/modules: build hello_world as built-in by default 2024-08-30 11:43:29 -04:00
README.rst samples/llext/modules: build hello_world as built-in by default 2024-08-30 11:43:29 -04:00
prj.conf samples/llext/modules: build hello_world as built-in by default 2024-08-30 11:43:29 -04:00
sample.yaml llext: Include aarch64 in LLEXT sample 2024-09-12 14:48:55 +02:00

README.rst

.. zephyr:code-sample:: llext-modules
   :name: Linkable loadable extensions "module" sample
   :relevant-api: llext_apis

    Call a function in a loadable extension module,
    either built-in or loaded at runtime.

Overview
********

This sample demonstrates the use of the :ref:`llext` subsystem in Zephyr. The
llext subsystem allows for the loading of relocatable ELF files at runtime;
their symbols can be accessed and functions called.

Specifically, this shows how to call a simple "hello world" function,
implemented in :zephyr_file:`samples/subsys/llext/modules/src/hello_world_ext.c`.
This is achieved in two different ways, depending on the value of the Kconfig
symbol ``CONFIG_HELLO_WORLD_MODE``:

- if it is ``y``, the function is directly compiled and called by the Zephyr
  application. The caller code used in this case is in
  :zephyr_file:`samples/subsys/llext/modules/src/main_builtin.c`.

- if it is ``m``, the function is compiled as an llext and it is included in
  the application as a binary blob. At runtime, the llext subsystem is used to
  load the extension and call the function. The caller code is in
  :zephyr_file:`samples/subsys/llext/modules/src/main_module.c`.

Requirements
************

A board with a supported llext architecture and console. This can also be
executed in QEMU emulation on the :ref:`qemu_xtensa <qemu_xtensa>` or
:ref:`qemu_cortex_r5 <qemu_cortex_r5>` virtual boards.

Building and running
********************

- By default, the sample will compile the function along with the rest of
  Zephyr in the same binary. This can be verified via the following commands:

  .. zephyr-app-commands::
     :zephyr-app: samples/subsys/llext/modules
     :board: qemu_xtensa
     :goals: build run
     :compact:

- The following commands build and run the sample so that the extension code is
  compiled separately and included in the Zephyr image as a binary blob:

  .. zephyr-app-commands::
     :zephyr-app: samples/subsys/llext/modules
     :board: qemu_xtensa
     :goals: build run
     :west-args: -T sample.llext.modules.module_build
     :compact:

  .. important::
     Take a look at :zephyr_file:`samples/subsys/llext/modules/sample.yaml` for
     the additional architecture-specific configurations required in this case.

To build for a different board, replace ``qemu_xtensa`` in the commands above
with the desired board name.