e3d877f811
Add support for userspace with RTIO by making rtio and rtio_iodev k_objects. As well as adding three syscalls for copying in submissions, copying out completions, and starting tasks with submit. For the small devices Zephyr typically runs on one of the most important attributes tends to be low memory usage. To maintain the low footprint of RTIO and its current executor implementations the rings are not shared with userspace. Sharing the rings it turns out would require copying submissions before working with them to avoid TOCTOU issues. The API could still support shared rings in the future so that a kernel thread could directly poll, copy, verify, and start the submitted work. This would require a third executor implementation that maintains its own copy of submissions similiar to how io_uring in Linux works. Signed-off-by: Tom Burdick <thomas.burdick@intel.com>
120 lines
5.1 KiB
CMake
120 lines
5.1 KiB
CMake
# originates from common-ram.ld
|
|
|
|
if(CONFIG_GEN_SW_ISR_TABLE AND CONFIG_DYNAMIC_INTERRUPTS)
|
|
# ld align has been changed to subalign to provide identical behavior scatter vs. ld.
|
|
zephyr_linker_section(NAME sw_isr_table
|
|
GROUP DATA_REGION
|
|
${XIP_ALIGN_WITH_INPUT} SUBALIGN ${CONFIG_ARCH_SW_ISR_TABLE_ALIGN}
|
|
)
|
|
zephyr_linker_section_configure(
|
|
SECTION sw_isr_table
|
|
INPUT ".gnu.linkonce.sw_isr_table*"
|
|
)
|
|
endif()
|
|
|
|
zephyr_linker_section(NAME device_states GROUP DATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
|
|
zephyr_linker_section_configure(SECTION device_states
|
|
KEEP INPUT ".z_devstate" ".z_devstate.*"
|
|
)
|
|
|
|
if(CONFIG_PM_DEVICE)
|
|
zephyr_linker_section(NAME pm_device_slots GROUP DATA_REGION TYPE NOLOAD NOINPUT ${XIP_ALIGN_WITH_INPUT})
|
|
zephyr_linker_section_configure(SECTION pm_device_slots KEEP INPUT ".z_pm_device_slots")
|
|
endif()
|
|
|
|
zephyr_linker_section(NAME initshell GROUP DATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
|
|
zephyr_linker_section_configure(SECTION initshell
|
|
KEEP INPUT ".shell_module_*"
|
|
SYMBOLS __shell_module_start __shell_module_end
|
|
)
|
|
zephyr_linker_section_configure(SECTION initshell
|
|
KEEP INPUT ".shell_cmd_*"
|
|
SYMBOLS __shell_cmd_start __shell_end_end
|
|
)
|
|
|
|
zephyr_linker_section(NAME log_dynamic GROUP DATA_REGION NOINPUT)
|
|
zephyr_linker_section_configure(SECTION log_dynamic KEEP INPUT ".log_dynamic_*")
|
|
|
|
zephyr_iterable_section(NAME _static_thread_data GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
|
|
if(CONFIG_USERSPACE)
|
|
# All kernel objects within are assumed to be either completely
|
|
# initialized at build time, or initialized automatically at runtime
|
|
# via iteration before the POST_KERNEL phase.
|
|
#
|
|
# These two symbols only used by gen_kobject_list.py
|
|
# _static_kernel_objects_begin = .;
|
|
endif()
|
|
|
|
zephyr_iterable_section(NAME k_timer GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_mem_slab GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_heap GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_mutex GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_stack GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_msgq GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_mbox GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_pipe GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_sem GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_queue GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME k_condvar GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
|
|
zephyr_linker_section(NAME _net_buf_pool_area GROUP DATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_linker_section_configure(SECTION _net_buf_pool_area
|
|
KEEP SORT NAME INPUT "._net_buf_pool.static.*"
|
|
SYMBOLS _net_buf_pool_list
|
|
)
|
|
|
|
if(CONFIG_NETWORKING)
|
|
zephyr_iterable_section(NAME net_if GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME net_if_dev GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME net_l2 GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME eth_bridge GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
endif()
|
|
|
|
if(CONFIG_UART_MUX)
|
|
zephyr_linker_section(NAME uart_mux GROUP DATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_linker_section_configure(SECTION uart_mux
|
|
KEEP SORT NAME INPUT ".uart_mux.*"
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_USB_DEVICE_STACK)
|
|
zephyr_linker_section(NAME usb_descriptor GROUP DATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} SUBALIGN 1)
|
|
zephyr_linker_section_configure(SECTION usb_descriptor
|
|
KEEP SORT NAME INPUT ".usb.descriptor*"
|
|
)
|
|
|
|
zephyr_linker_section(NAME usb_data GROUP DATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} SUBALIGN 1)
|
|
zephyr_linker_section_configure(SECTION usb_data
|
|
KEEP SORT NAME INPUT ".usb.data*"
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_USB_DEVICE_BOS)
|
|
zephyr_linker_section(NAME usb_bos_desc GROUP DATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} SUBALIGN 1)
|
|
zephyr_linker_section_configure(SECTION usb_data
|
|
KEEP SORT NAME INPUT ".usb.bos_desc"
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_RTIO)
|
|
zephyr_iterable_section(NAME rtio GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME rtio_iodev GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
endif()
|
|
|
|
#if(CONFIG_USERSPACE)
|
|
# _static_kernel_objects_end = .;
|
|
#endif()
|
|
#
|
|
|
|
if(CONFIG_ZTEST)
|
|
zephyr_iterable_section(NAME ztest_suite_node GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME ztest_suite_stats GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
endif()
|
|
|
|
if(CONFIG_ZTEST_NEW_API)
|
|
zephyr_iterable_section(NAME ztest_unit_test GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME ztest_test_rule GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
zephyr_iterable_section(NAME ztest_expected_result_entry GROUP DATA_REGION ${XIP_ALIGN_WITH_INPUT} SUBALIGN 4)
|
|
endif()
|