error: 'PM_storage_log_ID' undeclared here (not in a function)

I am trying to create a partition on my external flash using littlefs

Here is the line that is returning me an error

FS_LITTLEFS_DECLARE_DEFAULT_CONFIG(storage);
static struct fs_mount_t lfs_storage_mnt = {
.type = FS_LITTLEFS,
.fs_data = &storage,
//.storage_dev = (void *)FIXED_PARTITION_ID(storage_log),
.storage_dev = (void *)FLASH_AREA_ID(storage_log),

.mnt_point = "/lfs",
};

Here is the error I am receiving

r/src/main.c.obj -MF CMakeFiles/app.dir/src/main.c.obj.d -o CMakeFiles/app.dir/src/main.c.obj -c project/app/src/main.c
In file included from /home/marlon/ncs/v2.6.0/zephyr/include/zephyr/storage/flash_map.h:275,
                 from /home/marlon/ncs/v2.6.0/zephyr/include/zephyr/fs/littlefs.h:12,
                 from project/app/src/main.c:344:
/home/marlon/ncs/v2.6.0/nrf/include/flash_map_pm.h:43:22: error: 'PM_storage_log_ID' undeclared here (not in a function)
   43 | #define PM_ID(label) PM_##label##_ID
      |                      ^~~
/home/marlon/ncs/v2.6.0/nrf/include/flash_map_pm.h:43:22: note: in definition of macro 'PM_ID'
   43 | #define PM_ID(label) PM_##label##_ID
      |                      ^~~
/home/marlon/ncs/v2.6.0/nrf/include/flash_map_pm.h:49:30: note: in expansion of macro 'FIXED_PARTITION_ID'
   49 | #define FLASH_AREA_ID(label) FIXED_PARTITION_ID(label)
      |                              ^~~~~~~~~~~~~~~~~~
project/app/src/main.c:366:28: note: in expansion of macro 'FLASH_AREA_ID'
  366 |     .storage_dev = (void *)FLASH_AREA_ID(storage_log),
      |                            ^~~~~~~~~~~~~
project/app/src/main.c:362:26: warning: 'lfs_storage_mnt' defined but not used [-Wunused-variable]
  362 | static struct fs_mount_t lfs_storage_mnt = {
      |                          ^~~~~~~~~~~~~~~

WHen hovering over FLASH_AREA_ID, I have this message

identifier "PM_storage_log_ID" is undefinedC/C++(20)
#define FLASH_AREA_ID(label) FIXED_PARTITION_ID(label)

Expands to:

PM_storage_log_ID

(I have basically the same error if I use FIXED_PARTITION_ID)

This is the relevant part of my dts

&qspi {
status = "okay";
pinctrl-0 = <&qspi_default>;
pinctrl-1 = <&qspi_sleep>;
pinctrl-names = "default", "sleep";

external_flash: w25q128jv@0 {
compatible = "nordic,qspi-nor";
reg = <0>;
jedec-id = [ ef 40 18 ];
writeoc = "pp4o";
readoc = "read4io";
sck-frequency = <8000000>;
size-in-bytes = <16777216>; // 16 MB total

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

storage_log: partition@0 {
label = "storage_log";
reg = <0x00000000 0x00200000>;
};

external_data: partition@200000 {
label = "external_data";
reg = <0x00200000 0x00E00000>;
};
};
};
};

and this is the relevant part on my pm_static.yml

sram_primary:
address: 0x20000000
end_address: 0x20038000
region: sram_primary
size: 0x38000

volatile_app_data:
address: 0x20038000
end_address: 0x20040000
placement:
before:
- end
region: sram_primary
size: 0x8000


external_flash:
address: 0x08000000
region: external_flash
size: 0x1000000 # 16 MB
placement:
storage_log:
offset: 0x00000000
size: 0x00200000
external_data:
offset: 0x00200000
size: 0x00E00000

Parents
  • I changed some stuff and now I have this error:

    [575/613] Linking C executable zephyr/zephyr_pre0.elf
    FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map projeto/app/build_4/zephyr/zephyr_pre0.map
    : && ccache /home/marlon/ncs/toolchains/2be090971e/opt/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc -gdwarf-4 zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr/zephyr_pre0.elf zephyr/CMakeFiles/offsets.dir/./arch/arm/core/offsets/offsets.c.obj -fuse-ld=bfd -T zephyr/linker_zephyr_pre0.cmd -Wl,-Map=projeto/app/build_4/zephyr/zephyr_pre0.map -Wl,--whole-archive app/libapp.a zephyr/libzephyr.a zephyr/arch/common/libarch__common.a zephyr/arch/arch/arm/core/libarch__arm__core.a zephyr/arch/arch/arm/core/cortex_m/libarch__arm__core__cortex_m.a zephyr/arch/arch/arm/core/mpu/libarch__arm__core__mpu.a zephyr/lib/libc/picolibc/liblib__libc__picolibc.a zephyr/lib/libc/common/liblib__libc__common.a zephyr/soc/soc/arm/nordic_nrf/libsoc__arm__nordic_nrf.a zephyr/subsys/fs/libsubsys__fs.a zephyr/subsys/modbus/libsubsys__modbus.a zephyr/subsys/random/libsubsys__random.a zephyr/subsys/bluetooth/common/libsubsys__bluetooth__common.a zephyr/subsys/bluetooth/host/libsubsys__bluetooth__host.a zephyr/subsys/dfu/boot/libsubsys__dfu__boot.a zephyr/subsys/input/libsubsys__input.a zephyr/subsys/net/libsubsys__net.a zephyr/subsys/net/l2/ppp/libsubsys__net__l2__ppp.a zephyr/subsys/net/ip/libsubsys__net__ip.a zephyr/subsys/net/lib/lwm2m/libsubsys__net__lib__lwm2m.a zephyr/subsys/net/lib/config/libsubsys__net__lib__config.a zephyr/subsys/net/lib/http/libsubsys__net__lib__http.a zephyr/subsys/net/conn_mgr/libsubsys__net__conn_mgr.a zephyr/drivers/adc/libdrivers__adc.a zephyr/drivers/auxdisplay/libdrivers__auxdisplay.a zephyr/drivers/clock_control/libdrivers__clock_control.a zephyr/drivers/console/libdrivers__console.a zephyr/drivers/entropy/libdrivers__entropy.a zephyr/drivers/flash/libdrivers__flash.a zephyr/drivers/gpio/libdrivers__gpio.a zephyr/drivers/i2c/libdrivers__i2c.a zephyr/drivers/input/libdrivers__input.a zephyr/drivers/modem/libdrivers__modem.a zephyr/drivers/net/libdrivers__net.a zephyr/drivers/pinctrl/libdrivers__pinctrl.a zephyr/drivers/pwm/libdrivers__pwm.a zephyr/drivers/sensor/max31865/libdrivers__sensor__max31865.a zephyr/drivers/sensor/ntc_thermistor/libdrivers__sensor__ntc_thermistor.a zephyr/drivers/serial/libdrivers__serial.a zephyr/drivers/spi/libdrivers__spi.a zephyr/drivers/timer/libdrivers__timer.a zephyr/drivers/watchdog/libdrivers__watchdog.a modules/nrf/lib/dk_buttons_and_leds/lib..__nrf__lib__dk_buttons_and_leds.a modules/nrf/lib/multithreading_lock/lib..__nrf__lib__multithreading_lock.a modules/nrf/lib/fatal_error/lib..__nrf__lib__fatal_error.a modules/nrf/subsys/bluetooth/controller/lib..__nrf__subsys__bluetooth__controller.a modules/nrf/subsys/dfu/dfu_target/lib..__nrf__subsys__dfu__dfu_target.a modules/nrf/subsys/mpsl/init/lib..__nrf__subsys__mpsl__init.a modules/nrf/subsys/mpsl/fem/lib..__nrf__subsys__mpsl__fem.a modules/nrf/subsys/fw_info/lib..__nrf__subsys__fw_info.a modules/nrf/drivers/mpsl/clock_control/lib..__nrf__drivers__mpsl__clock_control.a modules/nrf/drivers/mpsl/flash_sync/lib..__nrf__drivers__mpsl__flash_sync.a modules/nrf/drivers/mpsl/temp_nrf5/lib..__nrf__drivers__mpsl__temp_nrf5.a modules/nrf/drivers/hw_cc3xx/lib..__nrf__drivers__hw_cc3xx.a modules/mcuboot/boot/bootutil/zephyr/libmcuboot_util.a modules/mbedtls/libmbedTLSBase.a modules/mbedtls/libmbedTLSCrypto.a modules/mbedtls/libmbedTLSX509.a modules/mbedtls/libmodules__mbedtls.a modules/hal_nordic/nrfx/libmodules__hal_nordic__nrfx.a modules/littlefs/libmodules__littlefs.a modules/segger/libmodules__segger.a modules/zcbor/libmodules__zcbor.a modules/projeto-firmware-library/libOrbitz_SDK.a modules/projeto-firmware-library/lib/drivers/modem/lib..__..__..__Desktop__projeto__projeto-firmware-library__lib__drivers__modem.a modules/modules/revision/lib..__..__..__Desktop__projeto__icv-firmware-legacy-new-pcb__app__modules__revision.a -Wl,--no-whole-archive zephyr/kernel/libkernel.a -L"/home/marlon/ncs/toolchains/2be090971e/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/thumb/v7e-m+fp/hard" -L/projeto/icv-firmware-legacy-new-pcb/app/build_4/zephyr -lgcc Test/libTest.a drivers/modem/libmodem.a drivers/p1/libp1.a Test/libTest.a drivers/modem/libmodem.a drivers/p1/libp1.a drivers/pump/libpump.a drivers/temperature/libtemperature.a drivers/external_flash/libexternal_flash.a drivers/flow/libflow.a drivers/pressure/libpressure.a drivers/valve/libvalve.a drivers/qdec/libqdec.a drivers/thermostat/libthermostat.a drivers/gpiointerrupt/libgpiointerrupt.a drivers/ch_heater/libch_heater.a drivers/dhw/libdhw.a drivers/display/libdisplay.a zephyr/kernel/libkernel.a zephyr/arch/common/libisr_tables.a modules/mbedtls/libmbedTLSBase.a modules/mbedtls/libmbedTLSCrypto.a modules/mbedtls/libmbedTLSX509.a -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mfp16-format=ieee -mtp=soft -Wl,--gc-sections -Wl,--build-id=none -Wl,--sort-common=descending -Wl,--sort-section=alignment -Wl,-u,_OffsetAbsSyms -Wl,-u,_ConfigAbsSyms -nostdlib -static -Wl,-X -Wl,-N -Wl,--orphan-handling=warn -Wl,-no-pie -DPICOLIBC_DOUBLE_PRINTF_SCANF /home/marlon/ncs/v2.6.0/nrfxlib/crypto/nrf_cc310_platform/lib/cortex-m4/hard-float/no-interrupts/libnrf_cc310_platform_0.9.19.a /home/marlon/ncs/v2.6.0/nrfxlib/softdevice_controller/lib/cortex-m4/hard-float/libsoftdevice_controller_peripheral.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/common/lib/cortex-m4/hard-float/libmpsl_fem_common.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/nrf21540_gpio/lib/cortex-m4/hard-float/libmpsl_fem_nrf21540_gpio.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/nrf21540_gpio_spi/lib/cortex-m4/hard-float/libmpsl_fem_nrf21540_gpio_spi.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/simple_gpio/lib/cortex-m4/hard-float/libmpsl_fem_simple_gpio.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/lib/cortex-m4/hard-float/libmpsl.a --specs=picolibc.specs -lc -lgcc && cd /projeto/icv-firmware-legacy-new-pcb/app/build_4/zephyr && /home/marlon/ncs/toolchains/2be090971e/usr/local/bin/cmake -E true
    /home/marlon/ncs/toolchains/2be090971e/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: app/libapp.a(main.c.obj):projeto/app/src/main.c:288: undefined reference to `z_fsmp_logfs'
    collect2: error: ld returned 1 exit status
    ninja: build stopped: subcommand failed.
    FATAL ERROR: command exited with status 1: /home/marlon/ncs/toolchains/2be090971e/usr/local/bin/cmake --build /projeto/app/build_4


    My dts


    &qspi {
    status = "okay";
    pinctrl-0 = <&qspi_default>;
    pinctrl-1 = <&qspi_sleep>;
    pinctrl-names = "default", "sleep";

    external_flash: w25q128jv@0 {
    compatible = "nordic,qspi-nor";
    reg = <0>;
    jedec-id = [ ef 40 18 ];
    writeoc = "pp4o";
    readoc = "read4io";
    sck-frequency = <8000000>;
    size-in-bytes = <16777216>; // 16 MB total
    partitions {
    compatible = "fixed-partitions";
    #address-cells = <1>;
    #size-cells = <1>;
    storage_log: partition@0 {
    label = "storage_log";
    reg = < 0x0 0x200000 >;
    };
    };
    };
    };

    (...)

    fstab {
    compatible = "zephyr,fstab";

    logfs: littlefs {
    compatible = "zephyr,fstab,littlefs";
    partition = <&storage_log>;
    mount-point = "/lfs";
    automount;
    read-size = <16>;
    prog-size = <16>;
    cache-size = <64>;
    lookahead-size = <32>;
    block-cycles = <512>;
    };
    };

    my code

    #define PARTITION_NODE DT_NODELABEL(logfs)

    #if DT_NODE_EXISTS(PARTITION_NODE)
    FS_FSTAB_DECLARE_ENTRY(logfs);
    struct fs_mount_t *logfs_mnt = &FS_FSTAB_ENTRY(logfs);
    #else
    FS_LITTLEFS_DECLARE_DEFAULT_CONFIG(storage);
    static struct fs_mount_t lfs_storage_mnt = {
    .type = FS_LITTLEFS,
    .fs_data = &storage,
    .storage_dev = (void *)FIXED_PARTITION_ID(storage_log),
    .mnt_point = "/lfs",
    };
    struct fs_mount_t *logfs_mnt = &lfs_storage_mnt;
    #endif



    static void logfs_write_test_file(void)
    {
    struct fs_file_t file;
    fs_file_t_init(&file);

    int rc = fs_open(&file, "/lfs/test.txt", FS_O_CREATE | FS_O_WRITE);
    if (rc < 0) {
    LOG_ERR("Failed to open file: %d", rc);
    return;
    }

    const char *msg = "Hello from LittleFS\n";
    ssize_t written = fs_write(&file, msg, strlen(msg));
    if (written < 0) {
    LOG_ERR("Write failed: %zd", written);
    } else {
    LOG_INF("Written %zd bytes to test.txt", written);
    }

    fs_close(&file);
    }

    static void logfs_list_dir(const char *path)
    {
    struct fs_dir_t dir;
    struct fs_dirent entry;
    fs_dir_t_init(&dir);

    int rc = fs_opendir(&dir, path);
    if (rc < 0) {
    LOG_ERR("Failed to open dir %s: %d", path, rc);
    return;
    }

    LOG_INF("Listing directory: %s", path);
    while (fs_readdir(&dir, &entry) == 0 && entry.name[0] != 0) {
    LOG_INF(" %c %s (size = %u)",
    entry.type == FS_DIR_ENTRY_DIR ? 'd' : 'f',
    entry.name, (unsigned int)entry.size);
    }

    fs_closedir(&dir);
    }


    int init_logfs(void)
    {
    int rc;

    // Opcional: apagar o conteúdo da partição antes de montar
    const struct flash_area *pfa;
    rc = flash_area_open((uintptr_t)logfs_mnt->storage_dev, &pfa);
    if (rc < 0) {
    LOG_ERR("Erro ao abrir partição: %d", rc);
    return rc;
    }

    rc = flash_area_erase(pfa, 0, pfa->fa_size);
    if (rc < 0) {
    LOG_ERR("Erro ao apagar partição: %d", rc);
    flash_area_close(pfa);
    return rc;
    }
    flash_area_close(pfa);

    // Montar o sistema de arquivos
    rc = fs_mount(logfs_mnt);
    if (rc < 0) {
    LOG_ERR("Falha ao montar LittleFS: %d", rc);
    return rc;
    }

    LOG_INF("LittleFS montado com sucesso em %s", logfs_mnt->mnt_point);
    return 0;
    }

    my yml


    sram_primary:
    address: 0x20000000
    end_address: 0x20038000
    region: sram_primary
    size: 0x38000

    volatile_app_data:
    address: 0x20038000
    end_address: 0x20040000
    placement:
    before:
    - end
    region: sram_primary
    size: 0x8000


    external_flash:
    address: 0x12000000
    region: external_flash
    size: 0x01000000 # 16 MB total

    storage_log:
    address: 0x12000000
    size: 0x00200000 # 2 MB
    region: external_flash
    placement:
    before:
    - end

Reply
  • I changed some stuff and now I have this error:

    [575/613] Linking C executable zephyr/zephyr_pre0.elf
    FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map projeto/app/build_4/zephyr/zephyr_pre0.map
    : && ccache /home/marlon/ncs/toolchains/2be090971e/opt/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc -gdwarf-4 zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr/zephyr_pre0.elf zephyr/CMakeFiles/offsets.dir/./arch/arm/core/offsets/offsets.c.obj -fuse-ld=bfd -T zephyr/linker_zephyr_pre0.cmd -Wl,-Map=projeto/app/build_4/zephyr/zephyr_pre0.map -Wl,--whole-archive app/libapp.a zephyr/libzephyr.a zephyr/arch/common/libarch__common.a zephyr/arch/arch/arm/core/libarch__arm__core.a zephyr/arch/arch/arm/core/cortex_m/libarch__arm__core__cortex_m.a zephyr/arch/arch/arm/core/mpu/libarch__arm__core__mpu.a zephyr/lib/libc/picolibc/liblib__libc__picolibc.a zephyr/lib/libc/common/liblib__libc__common.a zephyr/soc/soc/arm/nordic_nrf/libsoc__arm__nordic_nrf.a zephyr/subsys/fs/libsubsys__fs.a zephyr/subsys/modbus/libsubsys__modbus.a zephyr/subsys/random/libsubsys__random.a zephyr/subsys/bluetooth/common/libsubsys__bluetooth__common.a zephyr/subsys/bluetooth/host/libsubsys__bluetooth__host.a zephyr/subsys/dfu/boot/libsubsys__dfu__boot.a zephyr/subsys/input/libsubsys__input.a zephyr/subsys/net/libsubsys__net.a zephyr/subsys/net/l2/ppp/libsubsys__net__l2__ppp.a zephyr/subsys/net/ip/libsubsys__net__ip.a zephyr/subsys/net/lib/lwm2m/libsubsys__net__lib__lwm2m.a zephyr/subsys/net/lib/config/libsubsys__net__lib__config.a zephyr/subsys/net/lib/http/libsubsys__net__lib__http.a zephyr/subsys/net/conn_mgr/libsubsys__net__conn_mgr.a zephyr/drivers/adc/libdrivers__adc.a zephyr/drivers/auxdisplay/libdrivers__auxdisplay.a zephyr/drivers/clock_control/libdrivers__clock_control.a zephyr/drivers/console/libdrivers__console.a zephyr/drivers/entropy/libdrivers__entropy.a zephyr/drivers/flash/libdrivers__flash.a zephyr/drivers/gpio/libdrivers__gpio.a zephyr/drivers/i2c/libdrivers__i2c.a zephyr/drivers/input/libdrivers__input.a zephyr/drivers/modem/libdrivers__modem.a zephyr/drivers/net/libdrivers__net.a zephyr/drivers/pinctrl/libdrivers__pinctrl.a zephyr/drivers/pwm/libdrivers__pwm.a zephyr/drivers/sensor/max31865/libdrivers__sensor__max31865.a zephyr/drivers/sensor/ntc_thermistor/libdrivers__sensor__ntc_thermistor.a zephyr/drivers/serial/libdrivers__serial.a zephyr/drivers/spi/libdrivers__spi.a zephyr/drivers/timer/libdrivers__timer.a zephyr/drivers/watchdog/libdrivers__watchdog.a modules/nrf/lib/dk_buttons_and_leds/lib..__nrf__lib__dk_buttons_and_leds.a modules/nrf/lib/multithreading_lock/lib..__nrf__lib__multithreading_lock.a modules/nrf/lib/fatal_error/lib..__nrf__lib__fatal_error.a modules/nrf/subsys/bluetooth/controller/lib..__nrf__subsys__bluetooth__controller.a modules/nrf/subsys/dfu/dfu_target/lib..__nrf__subsys__dfu__dfu_target.a modules/nrf/subsys/mpsl/init/lib..__nrf__subsys__mpsl__init.a modules/nrf/subsys/mpsl/fem/lib..__nrf__subsys__mpsl__fem.a modules/nrf/subsys/fw_info/lib..__nrf__subsys__fw_info.a modules/nrf/drivers/mpsl/clock_control/lib..__nrf__drivers__mpsl__clock_control.a modules/nrf/drivers/mpsl/flash_sync/lib..__nrf__drivers__mpsl__flash_sync.a modules/nrf/drivers/mpsl/temp_nrf5/lib..__nrf__drivers__mpsl__temp_nrf5.a modules/nrf/drivers/hw_cc3xx/lib..__nrf__drivers__hw_cc3xx.a modules/mcuboot/boot/bootutil/zephyr/libmcuboot_util.a modules/mbedtls/libmbedTLSBase.a modules/mbedtls/libmbedTLSCrypto.a modules/mbedtls/libmbedTLSX509.a modules/mbedtls/libmodules__mbedtls.a modules/hal_nordic/nrfx/libmodules__hal_nordic__nrfx.a modules/littlefs/libmodules__littlefs.a modules/segger/libmodules__segger.a modules/zcbor/libmodules__zcbor.a modules/projeto-firmware-library/libOrbitz_SDK.a modules/projeto-firmware-library/lib/drivers/modem/lib..__..__..__Desktop__projeto__projeto-firmware-library__lib__drivers__modem.a modules/modules/revision/lib..__..__..__Desktop__projeto__icv-firmware-legacy-new-pcb__app__modules__revision.a -Wl,--no-whole-archive zephyr/kernel/libkernel.a -L"/home/marlon/ncs/toolchains/2be090971e/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/thumb/v7e-m+fp/hard" -L/projeto/icv-firmware-legacy-new-pcb/app/build_4/zephyr -lgcc Test/libTest.a drivers/modem/libmodem.a drivers/p1/libp1.a Test/libTest.a drivers/modem/libmodem.a drivers/p1/libp1.a drivers/pump/libpump.a drivers/temperature/libtemperature.a drivers/external_flash/libexternal_flash.a drivers/flow/libflow.a drivers/pressure/libpressure.a drivers/valve/libvalve.a drivers/qdec/libqdec.a drivers/thermostat/libthermostat.a drivers/gpiointerrupt/libgpiointerrupt.a drivers/ch_heater/libch_heater.a drivers/dhw/libdhw.a drivers/display/libdisplay.a zephyr/kernel/libkernel.a zephyr/arch/common/libisr_tables.a modules/mbedtls/libmbedTLSBase.a modules/mbedtls/libmbedTLSCrypto.a modules/mbedtls/libmbedTLSX509.a -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mfp16-format=ieee -mtp=soft -Wl,--gc-sections -Wl,--build-id=none -Wl,--sort-common=descending -Wl,--sort-section=alignment -Wl,-u,_OffsetAbsSyms -Wl,-u,_ConfigAbsSyms -nostdlib -static -Wl,-X -Wl,-N -Wl,--orphan-handling=warn -Wl,-no-pie -DPICOLIBC_DOUBLE_PRINTF_SCANF /home/marlon/ncs/v2.6.0/nrfxlib/crypto/nrf_cc310_platform/lib/cortex-m4/hard-float/no-interrupts/libnrf_cc310_platform_0.9.19.a /home/marlon/ncs/v2.6.0/nrfxlib/softdevice_controller/lib/cortex-m4/hard-float/libsoftdevice_controller_peripheral.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/common/lib/cortex-m4/hard-float/libmpsl_fem_common.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/nrf21540_gpio/lib/cortex-m4/hard-float/libmpsl_fem_nrf21540_gpio.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/nrf21540_gpio_spi/lib/cortex-m4/hard-float/libmpsl_fem_nrf21540_gpio_spi.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/fem/simple_gpio/lib/cortex-m4/hard-float/libmpsl_fem_simple_gpio.a /home/marlon/ncs/v2.6.0/nrfxlib/mpsl/lib/cortex-m4/hard-float/libmpsl.a --specs=picolibc.specs -lc -lgcc && cd /projeto/icv-firmware-legacy-new-pcb/app/build_4/zephyr && /home/marlon/ncs/toolchains/2be090971e/usr/local/bin/cmake -E true
    /home/marlon/ncs/toolchains/2be090971e/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: app/libapp.a(main.c.obj):projeto/app/src/main.c:288: undefined reference to `z_fsmp_logfs'
    collect2: error: ld returned 1 exit status
    ninja: build stopped: subcommand failed.
    FATAL ERROR: command exited with status 1: /home/marlon/ncs/toolchains/2be090971e/usr/local/bin/cmake --build /projeto/app/build_4


    My dts


    &qspi {
    status = "okay";
    pinctrl-0 = <&qspi_default>;
    pinctrl-1 = <&qspi_sleep>;
    pinctrl-names = "default", "sleep";

    external_flash: w25q128jv@0 {
    compatible = "nordic,qspi-nor";
    reg = <0>;
    jedec-id = [ ef 40 18 ];
    writeoc = "pp4o";
    readoc = "read4io";
    sck-frequency = <8000000>;
    size-in-bytes = <16777216>; // 16 MB total
    partitions {
    compatible = "fixed-partitions";
    #address-cells = <1>;
    #size-cells = <1>;
    storage_log: partition@0 {
    label = "storage_log";
    reg = < 0x0 0x200000 >;
    };
    };
    };
    };

    (...)

    fstab {
    compatible = "zephyr,fstab";

    logfs: littlefs {
    compatible = "zephyr,fstab,littlefs";
    partition = <&storage_log>;
    mount-point = "/lfs";
    automount;
    read-size = <16>;
    prog-size = <16>;
    cache-size = <64>;
    lookahead-size = <32>;
    block-cycles = <512>;
    };
    };

    my code

    #define PARTITION_NODE DT_NODELABEL(logfs)

    #if DT_NODE_EXISTS(PARTITION_NODE)
    FS_FSTAB_DECLARE_ENTRY(logfs);
    struct fs_mount_t *logfs_mnt = &FS_FSTAB_ENTRY(logfs);
    #else
    FS_LITTLEFS_DECLARE_DEFAULT_CONFIG(storage);
    static struct fs_mount_t lfs_storage_mnt = {
    .type = FS_LITTLEFS,
    .fs_data = &storage,
    .storage_dev = (void *)FIXED_PARTITION_ID(storage_log),
    .mnt_point = "/lfs",
    };
    struct fs_mount_t *logfs_mnt = &lfs_storage_mnt;
    #endif



    static void logfs_write_test_file(void)
    {
    struct fs_file_t file;
    fs_file_t_init(&file);

    int rc = fs_open(&file, "/lfs/test.txt", FS_O_CREATE | FS_O_WRITE);
    if (rc < 0) {
    LOG_ERR("Failed to open file: %d", rc);
    return;
    }

    const char *msg = "Hello from LittleFS\n";
    ssize_t written = fs_write(&file, msg, strlen(msg));
    if (written < 0) {
    LOG_ERR("Write failed: %zd", written);
    } else {
    LOG_INF("Written %zd bytes to test.txt", written);
    }

    fs_close(&file);
    }

    static void logfs_list_dir(const char *path)
    {
    struct fs_dir_t dir;
    struct fs_dirent entry;
    fs_dir_t_init(&dir);

    int rc = fs_opendir(&dir, path);
    if (rc < 0) {
    LOG_ERR("Failed to open dir %s: %d", path, rc);
    return;
    }

    LOG_INF("Listing directory: %s", path);
    while (fs_readdir(&dir, &entry) == 0 && entry.name[0] != 0) {
    LOG_INF(" %c %s (size = %u)",
    entry.type == FS_DIR_ENTRY_DIR ? 'd' : 'f',
    entry.name, (unsigned int)entry.size);
    }

    fs_closedir(&dir);
    }


    int init_logfs(void)
    {
    int rc;

    // Opcional: apagar o conteúdo da partição antes de montar
    const struct flash_area *pfa;
    rc = flash_area_open((uintptr_t)logfs_mnt->storage_dev, &pfa);
    if (rc < 0) {
    LOG_ERR("Erro ao abrir partição: %d", rc);
    return rc;
    }

    rc = flash_area_erase(pfa, 0, pfa->fa_size);
    if (rc < 0) {
    LOG_ERR("Erro ao apagar partição: %d", rc);
    flash_area_close(pfa);
    return rc;
    }
    flash_area_close(pfa);

    // Montar o sistema de arquivos
    rc = fs_mount(logfs_mnt);
    if (rc < 0) {
    LOG_ERR("Falha ao montar LittleFS: %d", rc);
    return rc;
    }

    LOG_INF("LittleFS montado com sucesso em %s", logfs_mnt->mnt_point);
    return 0;
    }

    my yml


    sram_primary:
    address: 0x20000000
    end_address: 0x20038000
    region: sram_primary
    size: 0x38000

    volatile_app_data:
    address: 0x20038000
    end_address: 0x20040000
    placement:
    before:
    - end
    region: sram_primary
    size: 0x8000


    external_flash:
    address: 0x12000000
    region: external_flash
    size: 0x01000000 # 16 MB total

    storage_log:
    address: 0x12000000
    size: 0x00200000 # 2 MB
    region: external_flash
    placement:
    before:
    - end

Children
No Data
Related