kernel: app_smem: allowing pinning memory partitions
This allows memory partitions to be put into the pinned section so they are available during boot. For example, the stack guard (in libc partition) is needed during boot but before the paging mechanism is initialized. Without pinning it in physical memory, it would fault in early boot process. A new cmake property app_smem,pinned_partitions is introduced so that additional partitions can be pinned if needed. Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This commit is contained in:
parent
e88afd2c37
commit
2117a2a44b
10 changed files with 216 additions and 26 deletions
|
@ -355,6 +355,7 @@ endif()
|
|||
# Declare MPU userspace dependencies before the linker scripts to make
|
||||
# sure the order of dependencies are met
|
||||
if(CONFIG_USERSPACE)
|
||||
add_custom_target(app_smem)
|
||||
set(APP_SMEM_ALIGNED_DEP app_smem_aligned_linker)
|
||||
set(APP_SMEM_UNALIGNED_DEP app_smem_unaligned_linker)
|
||||
endif()
|
||||
|
@ -985,18 +986,42 @@ toolchain_ld_configure_files()
|
|||
if(CONFIG_USERSPACE)
|
||||
set(APP_SMEM_ALIGNED_LD "${PROJECT_BINARY_DIR}/include/generated/app_smem_aligned.ld")
|
||||
set(APP_SMEM_UNALIGNED_LD "${PROJECT_BINARY_DIR}/include/generated/app_smem_unaligned.ld")
|
||||
|
||||
if(CONFIG_LINKER_USE_PINNED_SECTION)
|
||||
set(APP_SMEM_PINNED_ALIGNED_LD
|
||||
"${PROJECT_BINARY_DIR}/include/generated/app_smem_pinned_aligned.ld")
|
||||
set(APP_SMEM_PINNED_UNALIGNED_LD
|
||||
"${PROJECT_BINARY_DIR}/include/generated/app_smem_pinned_unaligned.ld")
|
||||
|
||||
if(NOT CONFIG_LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT)
|
||||
# The libc partition may hold symbols that are required during boot process,
|
||||
# for example, stack guard (if enabled). So the libc partition must be pinned
|
||||
# if not sections are in physical memory at boot, as the paging mechanism is
|
||||
# only initialized post-kernel.
|
||||
set_property(TARGET app_smem APPEND PROPERTY pinned_partitions "z_libc_partition")
|
||||
endif()
|
||||
|
||||
get_property(APP_SMEM_PINNED_PARTITION_LIST TARGET app_smem PROPERTY pinned_partitions)
|
||||
if(APP_SMEM_PINNED_PARTITION_LIST)
|
||||
list(JOIN APP_SMEM_PINNED_PARTITION_LIST "," APP_SMEM_PINNED_PARTITION_LIST_ARG_CSL)
|
||||
set(APP_SMEM_PINNED_PARTITION_LIST_ARG "--pinpartitions=${APP_SMEM_PINNED_PARTITION_LIST_ARG_CSL}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(OBJ_FILE_DIR "${PROJECT_BINARY_DIR}/../")
|
||||
|
||||
add_custom_target(
|
||||
${APP_SMEM_ALIGNED_DEP}
|
||||
DEPENDS
|
||||
${APP_SMEM_ALIGNED_LD}
|
||||
${APP_SMEM_PINNED_ALIGNED_LD}
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
${APP_SMEM_UNALIGNED_DEP}
|
||||
DEPENDS
|
||||
${APP_SMEM_UNALIGNED_LD}
|
||||
${APP_SMEM_PINNED_UNALIGNED_LD}
|
||||
)
|
||||
|
||||
if(CONFIG_NEWLIB_LIBC)
|
||||
|
@ -1007,11 +1032,13 @@ if(CONFIG_USERSPACE)
|
|||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${APP_SMEM_UNALIGNED_LD}
|
||||
OUTPUT ${APP_SMEM_UNALIGNED_LD} ${APP_SMEM_PINNED_UNALIGNED_LD}
|
||||
COMMAND ${PYTHON_EXECUTABLE}
|
||||
${ZEPHYR_BASE}/scripts/gen_app_partitions.py
|
||||
-d ${OBJ_FILE_DIR}
|
||||
-o ${APP_SMEM_UNALIGNED_LD}
|
||||
$<$<BOOL:${APP_SMEM_PINNED_UNALIGNED_LD}>:--pinoutput=${APP_SMEM_PINNED_UNALIGNED_LD}>
|
||||
${APP_SMEM_PINNED_PARTITION_LIST_ARG}
|
||||
${NEWLIB_PART}
|
||||
$<TARGET_PROPERTY:zephyr_property_target,COMPILE_OPTIONS>
|
||||
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
||||
|
@ -1029,6 +1056,7 @@ if(CONFIG_USERSPACE)
|
|||
${CODE_RELOCATION_DEP}
|
||||
${APP_SMEM_UNALIGNED_DEP}
|
||||
${APP_SMEM_UNALIGNED_LD}
|
||||
${APP_SMEM_PINNED_UNALIGNED_LD}
|
||||
zephyr_generated_headers
|
||||
)
|
||||
|
||||
|
@ -1061,11 +1089,13 @@ if(CONFIG_USERSPACE)
|
|||
add_dependencies( app_smem_unaligned_prebuilt linker_app_smem_unaligned_script ${OFFSETS_LIB})
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${APP_SMEM_ALIGNED_LD}
|
||||
OUTPUT ${APP_SMEM_ALIGNED_LD} ${APP_SMEM_PINNED_ALIGNED_LD}
|
||||
COMMAND ${PYTHON_EXECUTABLE}
|
||||
${ZEPHYR_BASE}/scripts/gen_app_partitions.py
|
||||
-e $<TARGET_FILE:app_smem_unaligned_prebuilt>
|
||||
-o ${APP_SMEM_ALIGNED_LD}
|
||||
$<$<BOOL:${APP_SMEM_PINNED_ALIGNED_LD}>:--pinoutput=${APP_SMEM_PINNED_ALIGNED_LD}>
|
||||
${APP_SMEM_PINNED_PARTITION_LIST_ARG}
|
||||
${NEWLIB_PART}
|
||||
$<TARGET_PROPERTY:zephyr_property_target,COMPILE_OPTIONS>
|
||||
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue