diff --git a/extra/build.sh b/extra/build.sh index 6ff88b92..2b2bac7d 100755 --- a/extra/build.sh +++ b/extra/build.sh @@ -51,6 +51,11 @@ else args="$*" fi +# Check for debug flag and append +if [ x$2 == x"--debug" ]; then + args="$args -- -DEXTRA_CONF_FILE=../extra/debug.conf" +fi + echo echo "Build target: $target $args" diff --git a/extra/debug.conf b/extra/debug.conf new file mode 100644 index 00000000..147a3494 --- /dev/null +++ b/extra/debug.conf @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: Apache-2.0 +# Debug configuration for Arduino Core Zephyr + +# Enable debug mode +CONFIG_DEBUG=y + +# Enable assertions +CONFIG_ASSERT=y +#CONFIG_ASSERT_VERBOSE=y + +# Enable stack overflow detection +CONFIG_STACK_SENTINEL=y +CONFIG_STACK_CANARIES=y + +# Enable thread monitoring and debugging +CONFIG_THREAD_MONITOR=y +CONFIG_THREAD_NAME=y +CONFIG_DEBUG_THREAD_INFO=y + +# Disable compiler optimizations +#CONFIG_DEBUG_OPTIMIZATIONS=y + +# Enable and configure the shell +CONFIG_SHELL=y +#CONFIG_NET_SHELL=y +#CONFIG_NET_L2_WIFI_SHELL=y +CONFIG_SHELL_STACK_SIZE=8192 + +# Enable runtime statistics +CONFIG_SYS_HEAP_RUNTIME_STATS=y +CONFIG_THREAD_RUNTIME_STATS=y diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt index 8688fc86..428885a7 100644 --- a/loader/CMakeLists.txt +++ b/loader/CMakeLists.txt @@ -16,6 +16,20 @@ project(app LANGUAGES C CXX) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/blobs) +# Memory region relocation based on Kconfig +# Relocate LLEXT heap if region specified +if(NOT "${CONFIG_LLEXT_HEAP_REGION}" STREQUAL "") + zephyr_code_relocate(FILES ${ZEPHYR_BASE}/subsys/llext/llext_mem.c + LOCATION ${CONFIG_LLEXT_HEAP_REGION}_BSS_NOINIT) +endif() + +# Relocate main stack if region specified +if(NOT "${CONFIG_MAIN_STACK_REGION}" STREQUAL "") + zephyr_code_relocate(FILES ${ZEPHYR_BASE}/kernel/init.c + LOCATION ${CONFIG_MAIN_STACK_REGION}_BSS_NOINIT) +endif() + + # for USB device stack NEXT target_sources_ifdef(CONFIG_USB_DEVICE_STACK_NEXT app PRIVATE ${CMAKE_CURRENT_LIST_DIR}/../cores/arduino/usb_device_descriptor.c diff --git a/loader/Kconfig b/loader/Kconfig new file mode 100644 index 00000000..f6ee6330 --- /dev/null +++ b/loader/Kconfig @@ -0,0 +1,19 @@ +# +# Copyright (c) 2025 Arduino +# +# SPDX-License-Identifier: Apache-2.0 +# + +source "Kconfig.zephyr" + +config LLEXT_HEAP_REGION + string "LLEXT heap memory region" + depends on CODE_DATA_RELOCATION + help + Specify the memory region for LLEXT heap. + +config MAIN_STACK_REGION + string "Main stack memory region" + depends on CODE_DATA_RELOCATION + help + Specify the memory region for main stack. diff --git a/loader/fixups.c b/loader/fixups.c index ba6be7f3..42afca2d 100644 --- a/loader/fixups.c +++ b/loader/fixups.c @@ -1,6 +1,13 @@ #include #include +#ifndef CONFIG_CPP +void __cxa_pure_virtual() { + while (1) + ; +} +#endif + int disable_mpu_rasr_xn(void) { uint32_t index; /* Kept the max index as 8(irrespective of soc) because the sram diff --git a/loader/llext_exports.c b/loader/llext_exports.c index c9bbc142..30ccc866 100644 --- a/loader/llext_exports.c +++ b/loader/llext_exports.c @@ -82,9 +82,14 @@ EXPORT_SYMBOL(usb_enable); EXPORT_SYMBOL(usb_disable); #endif +#if CONFIG_LOG EXPORT_SYMBOL(z_log_msg_runtime_vcreate); +FORCE_EXPORT_SYM(log_const_sketch) +#endif +#if defined(CONFIG_LOG_RUNTIME_FILTERING) FORCE_EXPORT_SYM(log_dynamic_sketch) +#endif #if defined(CONFIG_NETWORKING) FORCE_EXPORT_SYM(net_if_foreach); diff --git a/variants/arduino_giga_r1_stm32h747xx_m7/arduino_giga_r1_stm32h747xx_m7.conf b/variants/arduino_giga_r1_stm32h747xx_m7/arduino_giga_r1_stm32h747xx_m7.conf index c1050099..29d512f8 100644 --- a/variants/arduino_giga_r1_stm32h747xx_m7/arduino_giga_r1_stm32h747xx_m7.conf +++ b/variants/arduino_giga_r1_stm32h747xx_m7/arduino_giga_r1_stm32h747xx_m7.conf @@ -16,8 +16,10 @@ CONFIG_SHELL_STACK_SIZE=32768 CONFIG_MAIN_STACK_SIZE=32768 CONFIG_LLEXT_HEAP_SIZE=128 -CONFIG_FPU=y +CONFIG_CPP=n +CONFIG_SHELL=n +CONFIG_FPU=y CONFIG_ADC=y CONFIG_DAC=y CONFIG_PWM=y @@ -39,13 +41,12 @@ CONFIG_MBEDTLS=y CONFIG_MBEDTLS_BUILTIN=y CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y CONFIG_MBEDTLS_ENABLE_HEAP=y -CONFIG_MBEDTLS_HEAP_SIZE=60000 +CONFIG_MBEDTLS_HEAP_SIZE=80000 CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=7168 CONFIG_MBEDTLS_HASH_ALL_ENABLED=y CONFIG_MBEDTLS_CMAC=y CONFIG_VIDEO=y -CONFIG_VIDEO_LOG_LEVEL_DBG=y CONFIG_VIDEO_STM32_DCMI=y CONFIG_VIDEO_BUFFER_POOL_NUM_MAX=3 CONFIG_VIDEO_BUFFER_POOL_SZ_MAX=614400 @@ -134,7 +135,4 @@ CONFIG_DNS_SERVER1="8.8.8.8" CONFIG_NET_CONFIG_AUTO_INIT=n CONFIG_NET_CONNECTION_MANAGER=y #CONFIG_WIFI_NM_MAX_MANAGED_INTERFACES=2 - -CONFIG_NET_SHELL=y CONFIG_NET_L2_ETHERNET_MGMT=y -CONFIG_NET_L2_WIFI_SHELL=y diff --git a/variants/arduino_portenta_c33_r7fa6m5bh3cfc/arduino_portenta_c33_r7fa6m5bh3cfc.conf b/variants/arduino_portenta_c33_r7fa6m5bh3cfc/arduino_portenta_c33_r7fa6m5bh3cfc.conf index 8a7a1178..c79f252c 100644 --- a/variants/arduino_portenta_c33_r7fa6m5bh3cfc/arduino_portenta_c33_r7fa6m5bh3cfc.conf +++ b/variants/arduino_portenta_c33_r7fa6m5bh3cfc/arduino_portenta_c33_r7fa6m5bh3cfc.conf @@ -18,11 +18,12 @@ CONFIG_USBD_LOG_LEVEL_ERR=y CONFIG_LLEXT_STORAGE_WRITABLE=n CONFIG_FPU=y - CONFIG_USERSPACE=n CONFIG_ARM_MPU=n -CONFIG_SHELL_STACK_SIZE=8192 +CONFIG_CPP=n +CONFIG_SHELL=n + CONFIG_MAIN_STACK_SIZE=32768 CONFIG_LLEXT_HEAP_SIZE=128 CONFIG_HEAP_MEM_POOL_SIZE=32768 @@ -34,8 +35,6 @@ CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192 CONFIG_ADC=y CONFIG_PWM=y -CONFIG_NET_CORE_LOG_LEVEL_DBG=y - CONFIG_NETWORKING=y CONFIG_NET_IPV6=n CONFIG_NET_IPV4=y @@ -74,7 +73,7 @@ CONFIG_MBEDTLS=y CONFIG_MBEDTLS_BUILTIN=y CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y CONFIG_MBEDTLS_ENABLE_HEAP=y -CONFIG_MBEDTLS_HEAP_SIZE=60000 +CONFIG_MBEDTLS_HEAP_SIZE=80000 CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=7168 CONFIG_MBEDTLS_HASH_ALL_ENABLED=y CONFIG_MBEDTLS_CMAC=y @@ -85,7 +84,6 @@ CONFIG_NANOPB=y CONFIG_NET_CONFIG_AUTO_INIT=n CONFIG_NET_CONNECTION_MANAGER=y CONFIG_WIFI_NM_MAX_MANAGED_INTERFACES=2 -CONFIG_NET_L2_WIFI_SHELL=y CONFIG_NET_MGMT_EVENT_QUEUE_SIZE=32 CONFIG_NET_IF_MAX_IPV4_COUNT=3 diff --git a/variants/arduino_portenta_h7_stm32h747xx_m7/arduino_portenta_h7_stm32h747xx_m7.conf b/variants/arduino_portenta_h7_stm32h747xx_m7/arduino_portenta_h7_stm32h747xx_m7.conf index a5cc5a0a..4d5631b2 100644 --- a/variants/arduino_portenta_h7_stm32h747xx_m7/arduino_portenta_h7_stm32h747xx_m7.conf +++ b/variants/arduino_portenta_h7_stm32h747xx_m7/arduino_portenta_h7_stm32h747xx_m7.conf @@ -10,9 +10,12 @@ CONFIG_UART_LINE_CTRL=y CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT=y CONFIG_LLEXT_STORAGE_WRITABLE=n - CONFIG_SHARED_MULTI_HEAP=y -CONFIG_HEAP_MEM_POOL_SIZE=65536 +CONFIG_HEAP_MEM_POOL_SIZE=32768 +CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=-1 + +CONFIG_CPP=n +CONFIG_SHELL=n CONFIG_FPU=y CONFIG_ICACHE=y @@ -23,10 +26,13 @@ CONFIG_USERSPACE=n CONFIG_ARM_MPU=y CONFIG_MAX_THREAD_BYTES=4 -CONFIG_SHELL_STACK_SIZE=32768 CONFIG_MAIN_STACK_SIZE=32768 CONFIG_LLEXT_HEAP_SIZE=128 +CONFIG_CODE_DATA_RELOCATION=y +CONFIG_MAIN_STACK_REGION="DTCM" +CONFIG_LLEXT_HEAP_REGION="SRAM2" + CONFIG_ADC=y CONFIG_PWM=y CONFIG_DMA=y @@ -40,13 +46,10 @@ CONFIG_SDHC_INIT_PRIORITY=75 CONFIG_SDIO_STACK=y CONFIG_CYW4343W=y CONFIG_WIFI=y -CONFIG_NET_L2_WIFI_SHELL=y CONFIG_AIROC_WIFI_CUSTOM=y CONFIG_STM32_MEMMAP=y -CONFIG_NET_CORE_LOG_LEVEL_DBG=y - CONFIG_NETWORKING=y CONFIG_NET_IPV6=n CONFIG_NET_IPV4=y @@ -58,8 +61,6 @@ CONFIG_DNS_RESOLVER=y CONFIG_DNS_SERVER_IP_ADDRESSES=y CONFIG_DNS_SERVER1="8.8.8.8" -CONFIG_INIT_STACKS=y - CONFIG_NET_SOCKETS=y CONFIG_NET_SOCKETS_NET_MGMT=y CONFIG_NET_SOCKETS_SOCKOPT_TLS=y @@ -82,13 +83,12 @@ CONFIG_MBEDTLS=y CONFIG_MBEDTLS_BUILTIN=y CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y CONFIG_MBEDTLS_ENABLE_HEAP=y -CONFIG_MBEDTLS_HEAP_SIZE=60000 +CONFIG_MBEDTLS_HEAP_SIZE=80000 CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=7168 CONFIG_MBEDTLS_HASH_ALL_ENABLED=y CONFIG_MBEDTLS_CMAC=y CONFIG_VIDEO=y -CONFIG_VIDEO_LOG_LEVEL_DBG=y CONFIG_VIDEO_STM32_DCMI=y CONFIG_VIDEO_BUFFER_POOL_NUM_MAX=3 CONFIG_VIDEO_BUFFER_POOL_SZ_MAX=614400