407 lines
12 KiB
Plaintext
407 lines
12 KiB
Plaintext
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
|
#
|
|
|
|
choice
|
|
prompt "Build heap manager"
|
|
default MM_DEFAULT_MANAGER
|
|
|
|
config MM_DEFAULT_MANAGER
|
|
bool "Default heap manager"
|
|
---help---
|
|
NuttX original memory manager strategy.
|
|
|
|
config MM_TLSF_MANAGER
|
|
bool "TLSF heap manager"
|
|
---help---
|
|
TLSF memory manager strategy.
|
|
|
|
config MM_CUSTOMIZE_MANAGER
|
|
bool "Customized heap manager"
|
|
---help---
|
|
Customized memory manager policy. The build will fail
|
|
if the MM heap module not defined by customer.
|
|
|
|
endchoice
|
|
|
|
config MM_KERNEL_HEAP
|
|
bool "Kernel dedicated heap"
|
|
default BUILD_PROTECTED || BUILD_KERNEL
|
|
---help---
|
|
Under Flat build, this option will enable a separate heap for the kernel.
|
|
By separating the kernel and userspace heaps, the user is granted more
|
|
control over the heaps placement within the memory hierarchy, which is
|
|
specially useful for microcontrollers that provide External RAM.
|
|
Besides segregating the kernel and userspace allocations, this feature
|
|
does not prevent the userspace from accessing the kernel heap.
|
|
|
|
As for Protected and Kernel builds, this feature partitions heap memory
|
|
into two parts:
|
|
(1) a protected, kernel-mode heap accessible only by the NuttX kernel,
|
|
and (2) an unprotected user-mode heap for use by applications.
|
|
If you are only interested in protecting the kernel from read access,
|
|
then this option is not necessary. If you wish to secure the kernel data
|
|
as well, then this option should be selected.
|
|
|
|
The kernel heap size that is used is provided a a platform-specific
|
|
up_allocate_kheap() interface. This configuration setting is made
|
|
available to that platform specific code. However, the
|
|
up_allocate_kheap() interface may chose to ignore this setting if it
|
|
has a more appropriate heap allocation strategy.
|
|
|
|
config MM_KERNEL_HEAPSIZE
|
|
int "Kernel heap size"
|
|
default 8192
|
|
depends on MM_KERNEL_HEAP
|
|
---help---
|
|
This is the size of the a protected, kernel-mode heap (in bytes).
|
|
The remaining of available memory is given to the unprotected
|
|
user-mode heap. This value may need to be aligned to units of the
|
|
size of the smallest memory protection region.
|
|
|
|
config MM_DEFAULT_ALIGNMENT
|
|
int "Memory default alignment in bytes"
|
|
default 0
|
|
range 0 64
|
|
---help---
|
|
The memory default alignment in bytes, if this value is 0, the real
|
|
memory default alignment is equal to sizoef(uintptr), if this value
|
|
is not 0, this value must be 2^n and at least sizeof(uintptr).
|
|
|
|
config MM_SMALL
|
|
bool "Small memory model"
|
|
default n
|
|
depends on MM_DEFAULT_MANAGER
|
|
---help---
|
|
Each memory allocation has a small allocation overhead. The size
|
|
of that overhead is normally determined by the "width" of the
|
|
address support by the MCU. MCUs that support 16-bit addressability
|
|
have smaller overhead than devices that support 32-bit addressability.
|
|
However, there are many MCUs that support 32-bit addressability *but*
|
|
have internal SRAM of size less than or equal to 64Kb. In this case,
|
|
MM_SMALL can be defined so that those MCUs will also benefit
|
|
from the smaller, 16-bit-based allocation overhead.
|
|
|
|
WARNING: This selection will also change the alignment of allocated
|
|
memory. For example, on ARM memory will have 8-byte alignment by
|
|
default. If MM_SMALL is selected, then allocated memory will have
|
|
only 4-byte alignment. This may be important on some platforms where
|
|
64-bit data is in allocated structures and 8-byte alignment is required.
|
|
|
|
config MM_REGIONS
|
|
int "Number of memory regions"
|
|
default 1
|
|
---help---
|
|
If the architecture includes multiple, non-contiguous regions of
|
|
memory to allocate from, this specifies the number of memory regions
|
|
that the memory manager must handle and enables the API
|
|
mm_addregion(heap, start, end);
|
|
|
|
config MM_MAP_COUNT_MAX
|
|
int "The maximum number of memory map areas for each task"
|
|
default 1024
|
|
---help---
|
|
The maximum number of memory map areas for each task.
|
|
|
|
config ARCH_HAVE_HEAP2
|
|
bool
|
|
default n
|
|
|
|
if ARCH_HAVE_HEAP2
|
|
|
|
config HEAP2_BASE
|
|
hex "Start address of second user heap region"
|
|
default 0x00000000
|
|
---help---
|
|
The base address of the second heap region.
|
|
|
|
config HEAP2_SIZE
|
|
int "Size of the second user heap region"
|
|
default 0
|
|
---help---
|
|
The size of the second heap region.
|
|
|
|
endif # ARCH_HAVE_HEAP2
|
|
|
|
config GRAN
|
|
bool "Enable Granule Allocator"
|
|
default n
|
|
---help---
|
|
Enable granule allocator support. Allocations will be aligned to the
|
|
granule size; allocations will be in units of the granule size.
|
|
Larger granules will give better performance and less overhead but
|
|
more losses of memory due to alignment and quantization waste.
|
|
|
|
NOTE: The current implementation also restricts the maximum
|
|
allocation size to 32 granules. That restriction could be
|
|
eliminated with some additional coding effort.
|
|
|
|
config GRAN_INTR
|
|
bool "Interrupt level support"
|
|
default n
|
|
depends on GRAN
|
|
---help---
|
|
Normally mutual exclusive access to granule allocator data is assured
|
|
using a semaphore. If this option is set then, instead, mutual
|
|
exclusion logic will disable interrupts. While this options is more
|
|
invasive to system performance, it will also support use of the granule
|
|
allocator from interrupt level logic.
|
|
|
|
config DEBUG_GRAN
|
|
bool "Granule Allocator Debug"
|
|
default n
|
|
depends on GRAN && DEBUG_FEATURES
|
|
---help---
|
|
Just like DEBUG_MM, but only generates output from the gran
|
|
allocation logic.
|
|
|
|
config MM_PGALLOC
|
|
bool "Enable Page Allocator"
|
|
default n
|
|
depends on ARCH_USE_MMU
|
|
select GRAN
|
|
---help---
|
|
Enable support for a MMU physical page allocator based on the
|
|
granule allocator.
|
|
|
|
if MM_PGALLOC
|
|
|
|
config MM_PGSIZE
|
|
int "Page Size"
|
|
default 4096
|
|
---help---
|
|
The MMU page size. Must be one of {1024, 2048, 4096, 8192, or
|
|
16384}. This is easily extensible, but only those values are
|
|
currently support.
|
|
|
|
config DEBUG_PGALLOC
|
|
bool "Page Allocator Debug"
|
|
default n
|
|
depends on DEBUG_FEATURES
|
|
---help---
|
|
Just like DEBUG_MM, but only generates output from the page
|
|
allocation logic.
|
|
|
|
endif # MM_PGALLOC
|
|
|
|
config MM_SHM
|
|
bool "Shared memory support"
|
|
default n
|
|
depends on MM_PGALLOC && BUILD_KERNEL
|
|
select ARCH_VMA_MAPPING
|
|
---help---
|
|
Build support for mapping physical memory to user-space via
|
|
shared memory interfaces like shmget(), shmat(), shmctl(),
|
|
etc, or device mapping interfaces like vm_map_region() etc.
|
|
|
|
config MM_KMAP
|
|
bool "Support for dynamic kernel virtual mappings"
|
|
default n
|
|
depends on MM_PGALLOC && BUILD_KERNEL
|
|
select ARCH_KVMA_MAPPING
|
|
---help---
|
|
Build support for dynamically mapping pages from the page pool into
|
|
kernel virtual memory. This includes pages that are already mapped
|
|
for user.
|
|
|
|
config MM_HEAP_MEMPOOL_THRESHOLD
|
|
int "The default size of threshold to avoid using multiple mempool in heap"
|
|
default -1
|
|
---help---
|
|
If the size of the memory requested by the user is less
|
|
than the threshold, the memory will be requested from the
|
|
multiple mempool by default.
|
|
> 0 Enable pool feature, and set umm/kmm pool threshold size.
|
|
== 0 Enable pool feature, but disable the umm/kmm pool function.
|
|
< 0 Disable pool feature.
|
|
|
|
config MM_HEAP_MEMPOOL_EXPAND_SIZE
|
|
int "The expand size for each mempool in multiple mempool"
|
|
default 4096
|
|
depends on MM_HEAP_MEMPOOL_THRESHOLD > 0
|
|
---help---
|
|
This size describes the size of each expansion of each memory
|
|
pool with insufficient memory in the multi-level memory pool.
|
|
|
|
config MM_HEAP_MEMPOOL_DICTIONARY_EXPAND_SIZE
|
|
int "The expand size for multiple mempool's dictionary"
|
|
default MM_HEAP_MEMPOOL_EXPAND_SIZE
|
|
depends on MM_HEAP_MEMPOOL_THRESHOLD > 0
|
|
---help---
|
|
This size describes the multiple mempool dictionary expand.
|
|
|
|
config MM_HEAP_MEMPOOL_CHUNK_SIZE
|
|
int "The multiples pool chunk size"
|
|
default 0
|
|
depends on MM_HEAP_MEMPOOL_THRESHOLD > 0
|
|
---help---
|
|
This size describes the multiple mempool chunk size.
|
|
|
|
config MM_HEAP_MEMPOOL_BACKTRACE_SKIP
|
|
int "The skip depth of backtrace for mempool"
|
|
default 6
|
|
depends on MM_HEAP_MEMPOOL_THRESHOLD != 0 && MM_BACKTRACE > 0
|
|
---help---
|
|
This number is the skipped backtrace depth for mempool.
|
|
|
|
config FS_PROCFS_EXCLUDE_MEMPOOL
|
|
bool "Exclude mempool"
|
|
default DEFAULT_SMALL
|
|
depends on FS_PROCFS
|
|
|
|
config MM_KASAN
|
|
bool "Kernel Address Sanitizer"
|
|
default n
|
|
---help---
|
|
KASan is a fast compiler-based tool for detecting memory
|
|
bugs in native code. After turn on this option, Please
|
|
add -fsanitize=kernel-address to CFLAGS/CXXFLAGS too.
|
|
|
|
config MM_KASAN_ALL
|
|
bool "Enable KASan for the entire image"
|
|
depends on MM_KASAN
|
|
default y
|
|
---help---
|
|
This option activates address sanitizer for the entire image.
|
|
If you don't enable this option, you have to explicitly specify
|
|
"-fsanitize=kernel-address" for the files/directories you want
|
|
to check. Enabling this option will get image size increased
|
|
and performance decreased significantly.
|
|
|
|
config MM_KASAN_DISABLE_READS_CHECK
|
|
bool "Disable reads check"
|
|
depends on MM_KASAN
|
|
default n
|
|
---help---
|
|
This option disable kasan reads check. It speeds up performance
|
|
compared with default read/write check. Only disable it when you are
|
|
sure there's no need to do so. Or performance is too bad and only focus
|
|
on writes check.
|
|
|
|
config MM_KASAN_DISABLE_WRITES_CHECK
|
|
bool "Disable writes check"
|
|
depends on MM_KASAN
|
|
default n
|
|
---help---
|
|
This option disable kasan writes check.
|
|
|
|
config MM_KASAN_GLOBAL
|
|
bool "Enable global data check"
|
|
depends on MM_KASAN
|
|
default n
|
|
---help---
|
|
This option enables KASan global data check.
|
|
It's used to extract segments in the linker script.
|
|
Two new segments need to be created, one being
|
|
".kasan.unused: { *(.data..LASANLOC*) }",
|
|
used to eliminate excess data generated.
|
|
One is ".kasan.global:{
|
|
KEEP ( *(. data.. LASAN0))
|
|
KEEP ( *(. data. rel. local.. LASAN0))
|
|
}", used to extract data generated by the compiler
|
|
|
|
config MM_KASAN_DISABLE_PANIC
|
|
bool "Disable panic on kasan error"
|
|
depends on MM_KASAN
|
|
default n
|
|
---help---
|
|
This option disable panic on kasan error. It will print error info
|
|
and continue to run.
|
|
|
|
config MM_UBSAN
|
|
bool "Undefined Behavior Sanitizer"
|
|
default n
|
|
---help---
|
|
UBSan is a fast undefined behavior detector. UBSan modifies
|
|
the program at compile-time to catch various kinds of
|
|
undefined behavior during program execution
|
|
|
|
config MM_UBSAN_ALL
|
|
bool "Enable UBSan for the entire image"
|
|
depends on MM_UBSAN
|
|
default y
|
|
---help---
|
|
This option activates UBSan instrumentation for the
|
|
entire image. If you don't enable this option, you have to
|
|
explicitly specify "-fsanitize=undefined" for
|
|
the files/directories you want to check. Enabling this option
|
|
will get image size increased and performance decreased
|
|
significantly.
|
|
|
|
config MM_UBSAN_OPTION
|
|
string "UBSan options"
|
|
depends on MM_UBSAN
|
|
default "-fsanitize=undefined"
|
|
---help---
|
|
This option activates specified UBSan instrumentation. Please
|
|
refer to https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
|
|
for available options.
|
|
|
|
config MM_UBSAN_TRAP_ON_ERROR
|
|
bool "Enable UBSan trap on error to crash immediately"
|
|
depends on MM_UBSAN
|
|
default n
|
|
---help---
|
|
The undefined instruction trap should cause your program to crash,
|
|
save the code space significantly.
|
|
|
|
config MM_UBSAN_DUMMY
|
|
bool "Bypass Undefined Behaviour Sanitizer Runtime Actions"
|
|
default n
|
|
depends on MM_UBSAN
|
|
---help---
|
|
Keep UBSAN compile time but disable runtime actions.
|
|
|
|
config MM_FILL_ALLOCATIONS
|
|
bool "Fill allocations with debug value"
|
|
default n
|
|
---help---
|
|
Fill all malloc() allocations with MM_ALLOC_MAGIC.
|
|
Fill all add_addregion() with MM_INIT_MAGIC.
|
|
Fill all free() with MM_FREE_MAGIC.
|
|
This helps detecting uninitialized variable errors.
|
|
|
|
config MM_BACKTRACE
|
|
int "The depth of backtrace"
|
|
default -1
|
|
---help---
|
|
Config the depth of backtrace in memory block by specified this
|
|
config: disable backtrace by -1, only record pid info by zero and
|
|
enable record backtrace info by 8(fixed depth).
|
|
|
|
config MM_BACKTRACE_SKIP
|
|
int "The skip depth of backtrace"
|
|
depends on MM_BACKTRACE > 0
|
|
default 3
|
|
|
|
config MM_BACKTRACE_DEFAULT
|
|
bool "Enable the backtrace record by default"
|
|
default n
|
|
depends on MM_BACKTRACE > 0
|
|
|
|
config MM_DUMP_ON_FAILURE
|
|
bool "Dump heap info on allocation failure"
|
|
default n
|
|
depends on DEBUG_MM
|
|
|
|
config MM_DUMP_DETAILS_ON_FAILURE
|
|
bool "Dump all used memory blocks on allocation failure"
|
|
default n
|
|
depends on MM_DUMP_ON_FAILURE
|
|
|
|
config MM_PANIC_ON_FAILURE
|
|
bool "Panic on allocation failure"
|
|
default n
|
|
depends on DEBUG_MM
|
|
|
|
config MM_FREE_DELAYCOUNT_MAX
|
|
int "Maximum memory nodes can be delayed to free"
|
|
default 0
|
|
---help---
|
|
Set to 0 to disable the delayed free mechanism. Otherwise,
|
|
the value decides the maximum number of memory nodes that
|
|
will be delayed to free.
|
|
|
|
source "mm/iob/Kconfig"
|