You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
6.8 KiB
201 lines
6.8 KiB
# Copyright (c) 2023 Intel Corporation |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
menuconfig LLEXT |
|
bool "Linkable loadable extensions" |
|
select CACHE_MANAGEMENT if DCACHE |
|
select KERNEL_WHOLE_ARCHIVE |
|
depends on !HARVARD |
|
help |
|
Enable the linkable loadable extension subsystem |
|
|
|
if LLEXT |
|
|
|
choice LLEXT_BINARY_TYPE |
|
prompt "Binary object type for llext" |
|
default LLEXT_TYPE_ELF_OBJECT if ARM || ARM64 |
|
default LLEXT_TYPE_ELF_SHAREDLIB if XTENSA |
|
default LLEXT_TYPE_ELF_RELOCATABLE if RISCV |
|
help |
|
Object type for llext |
|
|
|
config LLEXT_TYPE_ELF_OBJECT |
|
bool "Single object ELF file" |
|
depends on !RISCV |
|
help |
|
Build and expect object files as binary object type for the |
|
llext subsystem. A single compiler invocation is used to |
|
generate the object file. Currently not supported on RISC-V. |
|
|
|
config LLEXT_TYPE_ELF_RELOCATABLE |
|
bool "Relocatable ELF file" |
|
help |
|
Build and expect relocatable (partially linked) files as the |
|
binary object type for the llext subsystem. These object files |
|
are generated by the linker by combining multiple object files |
|
into a single one. |
|
|
|
config LLEXT_TYPE_ELF_SHAREDLIB |
|
bool "Shared library ELF file" |
|
help |
|
Build and expect shared libraries as binary object type for |
|
the llext subsystem. The usual linking process is used to |
|
generate the shared library from multiple object files. |
|
|
|
endchoice |
|
|
|
config LLEXT_HEAP_DYNAMIC |
|
bool "Do not allocate static LLEXT heap" |
|
help |
|
Some applications require loading extensions into the memory which does not |
|
exist during the boot time and cannot be allocated statically. Make the application |
|
responsible for LLEXT heap allocation. Do not allocate LLEXT heap statically. |
|
|
|
Application must call llext_heap_init() in order to assign a buffer to be used |
|
as the LLEXT heap, otherwise LLEXT modules will not load. When the application |
|
does not need LLEXT functionality any more, it should call llext_heap_uninit(), |
|
which releases control of the buffer back to the application. |
|
|
|
config LLEXT_HEAP_SIZE |
|
int "llext heap memory size in kilobytes" |
|
depends on !LLEXT_HEAP_DYNAMIC |
|
default 8 |
|
help |
|
Heap size in kilobytes available to llext for dynamic allocation |
|
|
|
config LLEXT_BUILD_PIC |
|
bool "Use -fPIC when building LLEXT" |
|
depends on XTENSA |
|
default y if LLEXT_TYPE_ELF_SHAREDLIB |
|
help |
|
By default LLEXT compilation is performed with -fno-pic -fno-pie compiler |
|
flags. Some platforms can benefit from using -fPIC instead, in which case |
|
most internal linking is performed by the linker at build time. Select "y" |
|
to make use of that advantage. |
|
|
|
config LLEXT_SHELL |
|
bool "llext shell commands" |
|
depends on SHELL |
|
help |
|
Manage llext with shell commands for loading, unloading, and introspection |
|
|
|
config LLEXT_SHELL_MAX_SIZE |
|
int "Maximum size of llext in bytes" |
|
depends on LLEXT_SHELL |
|
default 8192 |
|
help |
|
When loading llext with shell it is stored in a temporary buffer of this size |
|
|
|
config LLEXT_STORAGE_WRITABLE |
|
bool "llext storage is writable" |
|
default y if XTENSA |
|
help |
|
Select if LLEXT storage is writable, i.e. if extensions are stored in |
|
RAM and can be modified in place |
|
|
|
config LLEXT_EXPORT_DEVICES |
|
bool "Export all DT devices to llexts" |
|
help |
|
When enabled, all Zephyr devices defined in the device tree are |
|
made available to llexts via the standard DT_ / DEVICE_* macros. |
|
|
|
config LLEXT_EXPORT_DEV_IDS_BY_HASH |
|
bool "Use hash of device path in device name" |
|
depends on LLEXT_EXPORT_DEVICES |
|
help |
|
When enabled, exported device names are generated from a hash of the |
|
node path instead of an ordinal number. Identifiers generated this |
|
way are stable across rebuilds. |
|
|
|
config LLEXT_EXPORT_BUILTINS_BY_SLID |
|
bool "Export built-in symbols to llexts via SLIDs" |
|
help |
|
When enabled, symbols exported from the Zephyr kernel |
|
or application (via EXPORT_SYMBOL) are linked to LLEXTs |
|
via Symbol Link Identifiers (SLIDs) instead of name. |
|
|
|
Enabling this option provides a huge size reduction, |
|
makes the linking process faster and provides more |
|
confidentiality, as exported symbol names are dropped |
|
from the binary. However, it can make LLEXT debugging |
|
harder and prevents usage of 'llext_find_sym' to look |
|
up symbols from the built-in table by name. It also |
|
requires the LLEXTs to be post-processed after build. |
|
|
|
config LLEXT_IMPORT_ALL_GLOBALS |
|
bool "Import all global symbols from extensions" |
|
help |
|
When loading an extension, by default only symbols that are mentioned |
|
in the '.exported_sym' section (possibly via EXPORT_SYMBOL) are made |
|
available to the Zephyr core. |
|
|
|
This option instead allows all global symbols from extensions to be |
|
used by the main application. This is useful to load basic extensions |
|
that have been compiled without the full Zephyr EDK. |
|
|
|
config LLEXT_EXPERIMENTAL |
|
bool "LLEXT experimental functionality" |
|
help |
|
Include support for LLEXT experimental and unstable functionality that |
|
has a very high likelihood to change in the future. |
|
|
|
module = LLEXT |
|
module-str = llext |
|
source "subsys/logging/Kconfig.template.log_config" |
|
|
|
endif |
|
|
|
menuconfig LLEXT_EDK |
|
bool "Linkable loadable Extension Development Kit (EDK)" |
|
default y if LLEXT |
|
help |
|
Enable the generation of an Extension Development Kit (EDK) for the |
|
Linkable Loadable Extension subsystem. The EDK is an archive that |
|
contains the necessary files and build settings to build extensions |
|
for Zephyr without the need to have the full Zephyr source tree. |
|
|
|
if LLEXT_EDK |
|
|
|
config LLEXT_EDK_NAME |
|
string "Name for llext EDK (Extension Development Kit)" |
|
default "llext-edk" |
|
help |
|
<name> will be used when generating the EDK file; the appropriate |
|
extension will be appended depending on the chosen output format. |
|
It will also be used, normalized, as the prefix for the variable |
|
stating EDK location, used on generated Makefile.cflags. For |
|
instance, the default name, "llext-edk", becomes LLEXT_EDK_INSTALL_DIR. |
|
|
|
choice LLEXT_EDK_FORMAT |
|
prompt "EDK compression and output format" |
|
default LLEXT_EDK_FORMAT_TAR_XZ |
|
|
|
config LLEXT_EDK_FORMAT_TAR_XZ |
|
bool ".tar.xz" |
|
help |
|
Use GNU tar with XZ compression for the EDK file. Highest compression |
|
ratio, slower choice. |
|
|
|
config LLEXT_EDK_FORMAT_TAR_ZSTD |
|
bool ".tar.Z" |
|
help |
|
Use GNU tar with Zstd compression for the EDK file. Way faster than |
|
XZ, but still with a high compression ratio. |
|
|
|
config LLEXT_EDK_FORMAT_ZIP |
|
bool ".zip" |
|
help |
|
Use Zip format and compression for the EDK file. This is the most |
|
portable option, but it may not compress as well as XZ or Zstd. |
|
|
|
endchoice |
|
|
|
config LLEXT_EDK_USERSPACE_ONLY |
|
bool "Only generate the Userspace codepath on syscall stubs for the EDK" |
|
help |
|
Syscall stubs can contain code that verifies if running code is at user |
|
or kernel space and route the call accordingly. If the EDK is expected |
|
to be used by userspace only extensions, this option will make EDK stubs |
|
not contain the routing code, and only generate the userspace one. |
|
|
|
endif
|
|
|