Linkable loadable extensions “module” sample

Overview

This sample demonstrates the use of the Linkable Loadable Extensions (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 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:

Requirements

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

Building and running

  • The following commands build and run the sample so that the files are linked together in the same binary:

    west build -b qemu_xtensa -T sample.llext.modules.builtin_build samples/subsys/llext/modules
    west build -t run
    
  • 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:

    west build -b qemu_xtensa -T sample.llext.modules.module_build samples/subsys/llext/modules
    west build -t run
    

    Take a look at 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.