.. zephyr:code-sample:: littlefs :name: LittleFS filesystem :relevant-api: file_system_api flash_area_api Use file system API over LittleFS. Overview ******** This sample app demonstrates use of Zephyr's :ref:`file system API ` over `littlefs`_, using file system with files that: * count the number of times the system has booted * holds binary pattern with properly incremented values in it Other information about the file system is also displayed. .. _littlefs: https://github.com/ARMmbed/littlefs Requirements ************ Flash memory device ------------------- The partition labeled "storage" will be used for the file system; see :ref:`flash_map_api`. If that area does not already have a compatible littlefs file system its contents will be replaced by an empty file system. You will see diagnostics like this:: [00:00:00.010,192] littlefs: LittleFS version 2.0, disk version 2.0 [00:00:00.010,559] littlefs: Corrupted dir pair at 0 1 [00:00:00.010,559] littlefs: can't mount (LFS -84); formatting The error and warning are normal for a new file system. After the file system is mounted you'll also see:: [00:00:00.182,434] littlefs: filesystem mounted! [00:00:00.867,034] fs: failed get file or dir stat (-2) This error is also normal for Zephyr not finding a file (the boot count, in this case). Block device (e.g. SD card) --------------------------- One needs to prepare the SD/MMC card with littlefs file system on the host machine with the `lfs`_ program. .. _lfs: https://www.thevtool.com/mounting-littlefs-on-linux-machine/ .. code-block:: console sudo chmod a+rw /dev/sda lfs -d -s -f --read_size=512 --prog_size=512 --block_size=512 --cache_size=512 --lookahead_size=8192 --format /dev/sda lfs -d -s -f --read_size=512 --prog_size=512 --block_size=512 --cache_size=512 --lookahead_size=8192 /dev/sda ./mnt_littlefs cd ./mnt_littlefs echo -en '\x01' > foo.txt cd - fusermount -u ./mnt_littlefs Building and Running ******************** Flash memory device ------------------- This example should work on any board that provides a "storage" partition. Two tested board targets are described below. You can set ``CONFIG_APP_WIPE_STORAGE`` to force the file system to be recreated. Block device (e.g. SD card) --------------------------- This example has been devised and initially tested on :ref:`Nucleo H743ZI ` board. It can be also run on any other board with SD/MMC card connected to it. To build the test: .. zephyr-app-commands:: :zephyr-app: samples/subsys/fs/littlefs :board: nucleo_h743zi :goals: build flash :gen-args: -DCONF_FILE=prj_blk.conf :compact: At the moment, only two types of block devices are acceptable in this sample: SDMMC and MMC. It is possible that both the `zephyr,sdmmc-disk` and `zephyr,mmc-disk` block devices will be present and enabled in the final board dts and configuration files simultaneously, the mount point name for the `littlefs` file system block device will be determined based on the following logic: * if the ``CONFIG_SDMMC_VOLUME_NAME`` configuration is defined, it will be used as the mount point name; * if the ``CONFIG_SDMMC_VOLUME_NAME`` configuration is not defined, but the ``CONFIG_MMC_VOLUME_NAME`` configuration is defined, ``CONFIG_MMC_VOLUME_NAME`` will be used as the mount point name; * if neither ``CONFIG_SDMMC_VOLUME_NAME`` nor ``CONFIG_MMC_VOLUME_NAME`` configurations are defined, the mount point name will not be determined, and an appropriate error will apear during the sample build. NRF52840 Development Kit ======================== On this device the file system will be placed in the SOC flash. .. zephyr-app-commands:: :zephyr-app: samples/subsys/fs/littlefs :board: nrf52840dk_nrf52840 :goals: build :compact: Particle Xenon ============== On this device the file system will be placed on the external SPI NOR flash memory. .. zephyr-app-commands:: :zephyr-app: samples/subsys/fs/littlefs :board: particle_xenon :goals: build :compact: