| .. 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 |
| <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] <inf> littlefs: LittleFS version 2.0, disk version 2.0 |
| [00:00:00.010,559] <err> littlefs: Corrupted dir pair at 0 1 |
| [00:00:00.010,559] <wrn> 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] <inf> littlefs: filesystem mounted! |
| [00:00:00.867,034] <err> 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 <nucleo_h743zi_board>` |
| 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: |