117 lines
3.7 KiB
Plaintext
117 lines
3.7 KiB
Plaintext
# 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
|
|
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
|
|
help
|
|
Object type for llext
|
|
|
|
config LLEXT_TYPE_ELF_OBJECT
|
|
bool "Single object ELF file"
|
|
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.
|
|
|
|
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_SIZE
|
|
int "llext heap memory size in kilobytes"
|
|
default 8
|
|
help
|
|
Heap size in kilobytes available to llext for dynamic allocation
|
|
|
|
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_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.
|
|
|
|
module = LLEXT
|
|
module-str = llext
|
|
source "subsys/logging/Kconfig.template.log_config"
|
|
|
|
endif
|
|
|
|
menu "Linkable loadable Extension Development Kit (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, as <name>.tar.xz.
|
|
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.
|
|
|
|
config LLEXT_EDK_USERSPACE_ONLY
|
|
bool "Only generate the Userpace 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.
|
|
|
|
endmenu
|