esp32s3: Enhance protected build linker scripts and memory layout
Instead of setting kernel/user space instruction and data ROM as hard-coded values on linker, set them according to the max size of the kernel image set by CONFIG_ESP32S3_KERNEL_IMAGE_SIZE. This is done by making KIROM, UIROM, KDROM and UDROM dependent on the kernel size value. Also, override CONFIG_NUTTX_USERSPACE config according to CONFIG_ESP32S3_KERNEL_IMAGE_SIZE by using a custom PREBUILD definition.
This commit is contained in:
parent
4f83811a09
commit
1197a80741
@ -1355,13 +1355,36 @@ config ESP32S3_PARTITION_TABLE_OFFSET
|
|||||||
default 0x8000
|
default 0x8000
|
||||||
depends on ESP32S3_APP_FORMAT_LEGACY
|
depends on ESP32S3_APP_FORMAT_LEGACY
|
||||||
|
|
||||||
|
config ESP32S3_KERNEL_OFFSET
|
||||||
|
hex
|
||||||
|
default 0x10000
|
||||||
|
depends on ESP32S3_APP_FORMAT_LEGACY
|
||||||
|
|
||||||
if BUILD_PROTECTED
|
if BUILD_PROTECTED
|
||||||
|
|
||||||
config ESP32S3_USER_IMAGE_OFFSET
|
config ESP32S3_KERNEL_IMAGE_SIZE
|
||||||
hex "User image offset"
|
hex "Kernel Image Size"
|
||||||
default 0x90000
|
default 0x100000
|
||||||
|
depends on ESP32S3_APP_FORMAT_LEGACY
|
||||||
---help---
|
---help---
|
||||||
Offset in SPI Flash for flashing the User application firmware image.
|
Max size of the kernel image. This parameter is used to 1) write to
|
||||||
|
the SPI flash, 2) calculate the offset for the user image and 3) set
|
||||||
|
the KIROM, KDROM, UIROM and UDROM parameters in the linker. Please
|
||||||
|
check boards/xtensa/esp32s3/common/scripts/protected_memory.ld for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
config ESP32S3_KERNEL_RAM_SIZE
|
||||||
|
hex "Kernel Allocated RAM"
|
||||||
|
default 0x29000
|
||||||
|
range 0x10000 0x54700
|
||||||
|
depends on ESP32S3_APP_FORMAT_LEGACY
|
||||||
|
---help---
|
||||||
|
Selects the amount of RAM available to the kernel from the total
|
||||||
|
available amount (337,75KiB). The rest of the memory will be
|
||||||
|
allocated to the user space. Respectively, this config will set the
|
||||||
|
KDRAM and UDRAM parameters of the linker. Please check
|
||||||
|
boards/xtensa/esp32s3/common/scripts/protected_memory.ld for more
|
||||||
|
information.
|
||||||
|
|
||||||
endif # BUILD_PROTECTED
|
endif # BUILD_PROTECTED
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#define USER_IMAGE_OFFSET CONFIG_ESP32S3_USER_IMAGE_OFFSET
|
#define USER_IMAGE_OFFSET CONFIG_ESP32S3_KERNEL_OFFSET + CONFIG_ESP32S3_KERNEL_IMAGE_SIZE
|
||||||
|
|
||||||
#define MMU_BLOCK0_VADDR SOC_DROM_LOW
|
#define MMU_BLOCK0_VADDR SOC_DROM_LOW
|
||||||
#define MMU_SIZE 0x3f0000
|
#define MMU_SIZE 0x3f0000
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
* Application Image properly.
|
* Application Image properly.
|
||||||
*
|
*
|
||||||
* For more information, refer to the bootloader linker scripts:
|
* For more information, refer to the bootloader linker scripts:
|
||||||
* https://github.com/espressif/esp-idf/blob/v4.4.2/components/bootloader/subproject/main/ld/esp32s3/bootloader.ld#L41-L47
|
* https://github.com/espressif/esp-idf/blob/dbb64db552068d440c2659294dcf2a5544fe3b6b/components/bootloader/subproject/main/ld/esp32s3/bootloader.ld#L52
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define SRAM_IRAM_END 0x403cc700
|
#define SRAM_IRAM_END 0x403cc700
|
||||||
@ -73,7 +73,7 @@ MEMORY
|
|||||||
{
|
{
|
||||||
metadata (RX) : org = 0x0, len = 0x30
|
metadata (RX) : org = 0x0, len = 0x30
|
||||||
ROM (RX) : org = ORIGIN(metadata) + LENGTH(metadata),
|
ROM (RX) : org = ORIGIN(metadata) + LENGTH(metadata),
|
||||||
len = 0x100000 - ORIGIN(ROM)
|
len = FLASH_SIZE - ORIGIN(ROM)
|
||||||
|
|
||||||
/* Instruction RAM */
|
/* Instruction RAM */
|
||||||
|
|
||||||
@ -90,13 +90,13 @@ MEMORY
|
|||||||
* constraint that (paddr % 64KB == vaddr % 64KB).
|
* constraint that (paddr % 64KB == vaddr % 64KB).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
KIROM (RX) : org = 0x42000020, len = 0x80000 - 0x20
|
KIROM (RX) : org = 0x42000020, len = CONFIG_ESP32S3_KERNEL_IMAGE_SIZE - 0x20
|
||||||
UIROM (RX) : org = 0x42080000, len = 0x180000
|
UIROM (RX) : org = ORIGIN(KIROM) + LENGTH(KIROM), len = FLASH_SIZE - LENGTH(KIROM)
|
||||||
|
|
||||||
/* Shared data RAM, excluding memory reserved for ROM bss/data/stack. */
|
/* Shared data RAM, excluding memory reserved for ROM bss/data/stack. */
|
||||||
|
|
||||||
KDRAM (RW) : org = ORIGIN(KIRAM) + LENGTH(KIRAM) - I_D_SRAM_OFFSET, len = 64K
|
KDRAM (RW) : org = ORIGIN(KIRAM) + LENGTH(KIRAM) - I_D_SRAM_OFFSET, len = CONFIG_ESP32S3_KERNEL_RAM_SIZE
|
||||||
UDRAM (RW) : org = ORIGIN(KDRAM) + LENGTH(KDRAM), len = 256K
|
UDRAM (RW) : org = ORIGIN(KDRAM) + LENGTH(KDRAM), len = I_D_SRAM_SIZE - LENGTH(KDRAM)
|
||||||
|
|
||||||
/* Flash mapped constant data */
|
/* Flash mapped constant data */
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ MEMORY
|
|||||||
* SRAM contents when loading the User application image.
|
* SRAM contents when loading the User application image.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
KDROM (R) : org = 0x3c000020, len = 0x80000 - 0x20
|
KDROM (R) : org = 0x3c000020, len = CONFIG_ESP32S3_KERNEL_IMAGE_SIZE - 0x20
|
||||||
UDROM (R) : org = 0x3c080030, len = 0x180000 - ORIGIN(ROM)
|
UDROM (R) : org = ORIGIN(KDROM) + LENGTH(KDROM) + ORIGIN(ROM), len = FLASH_SIZE - LENGTH(KDROM) - ORIGIN(ROM)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@ CONFIG_BUILD_PROTECTED=y
|
|||||||
CONFIG_BUILTIN=y
|
CONFIG_BUILTIN=y
|
||||||
CONFIG_DEBUG_FULLOPT=y
|
CONFIG_DEBUG_FULLOPT=y
|
||||||
CONFIG_DEBUG_SYMBOLS=y
|
CONFIG_DEBUG_SYMBOLS=y
|
||||||
|
CONFIG_ESP32S3_KERNEL_IMAGE_SIZE=0x80000
|
||||||
|
CONFIG_ESP32S3_KERNEL_RAM_SIZE=0x10000
|
||||||
CONFIG_ESP32S3_UART0=y
|
CONFIG_ESP32S3_UART0=y
|
||||||
CONFIG_ESP32S3_WCL=y
|
CONFIG_ESP32S3_WCL=y
|
||||||
CONFIG_FS_PROCFS=y
|
CONFIG_FS_PROCFS=y
|
||||||
@ -37,7 +39,6 @@ CONFIG_NSH_BUILTIN_APPS=y
|
|||||||
CONFIG_NSH_FILEIOSIZE=512
|
CONFIG_NSH_FILEIOSIZE=512
|
||||||
CONFIG_NSH_LINELEN=64
|
CONFIG_NSH_LINELEN=64
|
||||||
CONFIG_NSH_READLINE=y
|
CONFIG_NSH_READLINE=y
|
||||||
CONFIG_NUTTX_USERSPACE=0x3c080030
|
|
||||||
CONFIG_PASS1_BUILDIR="boards/xtensa/esp32s3/common/kernel"
|
CONFIG_PASS1_BUILDIR="boards/xtensa/esp32s3/common/kernel"
|
||||||
CONFIG_PREALLOC_TIMERS=4
|
CONFIG_PREALLOC_TIMERS=4
|
||||||
CONFIG_RAM_SIZE=114688
|
CONFIG_RAM_SIZE=114688
|
||||||
|
@ -80,7 +80,7 @@ ifdef ESPTOOL_BINDIR
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ESP32S3_APP_FORMAT_LEGACY),y)
|
ifeq ($(CONFIG_ESP32S3_APP_FORMAT_LEGACY),y)
|
||||||
APP_OFFSET := 0x10000
|
APP_OFFSET := $(CONFIG_ESP32S3_KERNEL_OFFSET)
|
||||||
APP_IMAGE := nuttx.bin
|
APP_IMAGE := nuttx.bin
|
||||||
FLASH_APP := $(APP_OFFSET) $(APP_IMAGE)
|
FLASH_APP := $(APP_OFFSET) $(APP_IMAGE)
|
||||||
else ifeq ($(CONFIG_ESP32S3_APP_FORMAT_MCUBOOT),y)
|
else ifeq ($(CONFIG_ESP32S3_APP_FORMAT_MCUBOOT),y)
|
||||||
@ -103,7 +103,7 @@ endif
|
|||||||
ESPTOOL_BINS += $(FLASH_APP)
|
ESPTOOL_BINS += $(FLASH_APP)
|
||||||
|
|
||||||
ifeq ($(CONFIG_BUILD_PROTECTED),y)
|
ifeq ($(CONFIG_BUILD_PROTECTED),y)
|
||||||
ESPTOOL_BINS += $(CONFIG_ESP32S3_USER_IMAGE_OFFSET) nuttx_user.bin
|
ESPTOOL_BINS += $(shell printf "%#x\n" $$(( $(CONFIG_ESP32S3_KERNEL_OFFSET) + $(CONFIG_ESP32S3_KERNEL_IMAGE_SIZE) ))) nuttx_user.bin
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# MERGEBIN -- Merge raw binary files into a single file
|
# MERGEBIN -- Merge raw binary files into a single file
|
||||||
@ -159,6 +159,16 @@ define MKIMAGE
|
|||||||
endef
|
endef
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# PREBUILD -- Perform pre build operations
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_BUILD_PROTECTED),y)
|
||||||
|
define PREBUILD
|
||||||
|
$(Q) echo "CONFIG_NUTTX_USERSPACE=$(shell printf "%#x\n" $$(( 0x3c000030 + $(CONFIG_ESP32S3_KERNEL_IMAGE_SIZE) )))" > $(1)/.config.tmp
|
||||||
|
$(Q) kconfig-merge -m $(1)/.config $(1)/.config.tmp
|
||||||
|
$(Q)rm -f $(1)/.config.tmp
|
||||||
|
endef
|
||||||
|
endif
|
||||||
|
|
||||||
# POSTBUILD -- Perform post build operations
|
# POSTBUILD -- Perform post build operations
|
||||||
|
|
||||||
define POSTBUILD
|
define POSTBUILD
|
||||||
|
Loading…
Reference in New Issue
Block a user