The drom0_0_seg is limited to 4MByte minus 24 bytes by the linker script.
The ESP32 has a harvard-architecture core, meaning instructions (code) and data are in seperate memory addresses. The d in drom is the data read only memory, whereas irom would be instruction code (i.e., function code). So, in this drom0_0_seg, constant data created by e.g. const
data arrays is saved.
I’m not sure why the linker script limits this to 4Mbyte, maybe the ESP32 has an architectural limitation here in regards to its memory map / flash controller / mapper. Best to ask the Espressif people if you want to find out.
In any case, I don’t think this limitation applies when you do a paradigm shift from compiling all your assets (which is what jacks up the .flash.rodata
section beyond its allowed limit) to storing the files in the SPIFFS filesystem. For that, just delete all your asset .c
files and move the original files into the data/
folder of the project and upload that to the ESP32 as documented. The code accessing the original arrays will then have to be modified to load the file from SPIFFS into RAM temporarily and work with that.