LittleFS filesystem

Overview

This sample app demonstrates use of Zephyr’s 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.

Requirements

Flash memory device

The partition labeled “storage” will be used for the file system; see Flash map. 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.

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 Nucleo H743ZI board. It can be also run on any other board with SD/MMC card connected to it.

To build the test:

west build -b nucleo_h743zi samples/subsys/fs/littlefs -- -DCONF_FILE=prj_blk.conf
west flash

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.

west build -b nrf52840dk/nrf52840 samples/subsys/fs/littlefs

Particle Xenon

On this device the file system will be placed on the external SPI NOR flash memory.

west build -b particle_xenon samples/subsys/fs/littlefs