1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zhistech-littlefs

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Литтл ФС — небольшая отказоустойчивая файловая система, предназначенная для микроконтроллеров.

Устойчивость к потере питания — литтл ФС разработана для работы с произвольными сбоями питания. Все файловые операции имеют надёжные гарантии копирования при записи, и в случае потери питания файловая система возвращается к последнему известному исправному состоянию.

Динамическое выравнивание износа — литтл ФС создана с учётом особенностей флеш-памяти и обеспечивает выравнивание износа динамических блоков. Кроме того, литтл ФС может обнаруживать неисправные блоки и работать с ними.

Ограниченное использование RAM/ROM — литтл ФС предназначена для работы с небольшим объёмом памяти. Использование RAM строго ограничено, что означает, что потребление RAM не меняется по мере роста файловой системы. Файловая система не содержит неограниченной рекурсии, а динамическая память ограничена настраиваемыми буферами, которые могут быть предоставлены статически.

Пример

Вот простой пример, который обновляет файл с именем boot_count каждый раз, когда запускается основная программа. Программа может быть прервана в любой момент без потери информации о том, сколько раз она была загружена, и без повреждения файловой системы:

#include "lfs.h"

// переменные, используемые файловой системой
lfs_t lfs;
lfs_file_t file;

// конфигурация файловой системы предоставляется этой структурой
const struct lfs_config cfg = {
    // операции блочного устройства
    .read  = user_provided_block_device_read,
    .prog  = user_provided_block_device_prog,
    .erase = user_provided_block_device_erase,
    .sync  = user_provided_block_device_sync,

    // конфигурация блочного устройства
    .read_size = 16,
    .prog_size = 16,
    .block_size = 4096,
    .block_count = 128,
    .cache_size = 16,
    .lookahead_size = 16,
    .block_cycles = 500,
};

// точка входа
int main(void) {
    // монтируем файловую систему
    int err = lfs_mount(&lfs, &cfg);

    // переформатируем, если не можем смонтировать файловую систему
    // это должно происходить только при первой загрузке
    if (err) {
        lfs_format(&lfs, &cfg);
        lfs_mount(&lfs, &cfg);
    }

    // читаем текущий счётчик
    uint32_t boot_count = 0;
    lfs_file_open(&lfs, &file, "boot_count", LFS_O_RDWR | LFS_O_CREAT);
    lfs_file_read(&lfs, &file, &boot_count, sizeof(boot_count));

    // обновляем счётчик загрузки
    boot_count += 1;
    lfs_file_rewind(&lfs, &file);
    lfs_file_write(&lfs, &file, &boot_count, sizeof(boot_count));

    // помним, что хранилище не обновляется до тех пор, пока файл не будет успешно закрыт
    lfs_file_close(&lfs, &file);

    // освобождаем все ресурсы, которые мы использовали
    lfs_unmount(&lfs);

    // выводим счётчик загрузки на экран
    printf("boot_count: %d\n", boot_count);
}

Использование

Подробную документацию (или, по крайней мере, столько деталей, сколько доступно в настоящее время) можно найти в комментариях в lfs.h.

Литтл ФС принимает конфигурацию структуры, которая определяет, как работает файловая система. Структура конфигурации предоставляет файловой системе операции с блочным устройством и размеры, настраиваемые параметры, которые позволяют сбалансировать использование памяти и производительность, а также необязательные статические буферы, если пользователь хочет избежать динамической памяти.

Состояние литтл ФС хранится в типе lfs_t, который пользователь должен выделить, позволяя одновременно использовать несколько файловых систем. С помощью lfs_t и структуры конфигурации пользователь может отформатировать блочное устройство или смонтировать файловую систему.

После монтирования литтл ФС предоставляет полный набор функций файлов и каталогов, подобных POSIX, с отклонением, заключающимся в том, что выделение структур файловой системы должно осуществляться пользователем.

Все операции POSIX, такие как удаление и переименование, являются атомарными, даже в случае потери питания. Кроме того, обновления файлов фактически не фиксируются в файловой системе до вызова синхронизации или закрытия файла.

Другие примечания

Литтл ФС написана на языке C и должна компилироваться любым компилятором, соответствующим стандарту C99.

Все вызовы литтл ФС могут возвращать отрицательный код ошибки. Ошибки могут быть либо одной из тех, что указаны в перечислении enum lfs_error в lfs.h, либо ошибкой, возвращаемой пользователем. Литтл ФС (LittleFS)

ЛиттлФС может быть полезен для отладки. ЛиттлФС — это простая файловая система, предназначенная для встраиваемых устройств с ограниченными ресурсами.

  • ЛиттлФС-JS — оболочка для ЛиттлФС на JavaScript. Не совсем понятно, зачем она нужна, но она удобна для демонстрационных целей. Вы можете увидеть её в действии здесь.
  • ЛиттлФС-Python — оболочка для ЛиттлФС на Python. Проект позволяет создавать образы файловой системы на вашем ПК. Проверьте, подойдёт ли вам ЛиттлФС, создайте образы для последующей загрузки в целевую память или просмотрите содержимое двоичного образа целевой памяти.
  • ЛиттлФС2-Rust — оболочка для ЛиттлФС на Rust. Этот проект позволяет использовать ЛиттлФС с дружественным API Rust, используя преимущества безопасности памяти и других гарантий Rust.
  • Nim-ЛиттлФС — оболочка и API для ЛиттлФС на Nim. Включает реализацию FUSE на основе ЛиттлФС-Fuse.
  • Хамелон (Chamelon) — чистая реализация ЛиттлФС на OCaml, разработанная для использования с проектом операционной системы MirageOS. Она совместима со стандартной реализацией, хотя и с некоторыми оговорками.
  • ЛиттлФС-Disk-Img-Viewer — эффективное по использованию памяти веб-приложение для просмотра образов дисков ЛиттлФС в вашем веб-браузере.
  • МКЛФС (Mklfs) — инструмент командной строки для создания образов ЛиттлФС. Используется в экосистеме Lua RTOS.
  • Мкл ЛиттлФС (mklittlefs) — инструмент командной строки для создания образов ЛиттлФС. Используется в экосистемах ESP8266 и RP2040.
  • Пико ЛиттлФС USB (pico-littlefs-usb) — интерфейс для ЛиттлФС, который эмулирует файловую систему FAT12 через USB. Позволяет монтировать ЛиттлФС на хост-ПК без дополнительных драйверов.
  • Mbed OS — самый простой способ начать работу с ЛиттлФС — перейти на Mbed, в котором уже есть драйверы блочных устройств для большинства форм встроенного хранилища. ЛиттлФС доступен в Mbed OS как класс LittleFileSystem.
  • SPIFFS — ещё одна отличная встроенная файловая система для флэш-памяти NOR. Как более традиционная журналируемая файловая система с полным статическим выравниванием износа, SPIFFS, вероятно, превзойдёт ЛиттлФС во флэш-памяти небольшого объёма, такой как внутренняя флэш-память микроконтроллеров.
  • Дхара (Dhara) — интересный слой трансляции флэш-памяти NAND, предназначенный для небольших микроконтроллеров. Он предлагает статическое выравнивание износа и устойчивость к питанию с фиксированной структурой указателей O(|address|), хранящейся в каждом блоке и в ОЗУ.
  • ЧаНс ФатФС (ChaN's FatFs) — лёгкая переделка печально известной файловой системы FAT для устройств масштаба микроконтроллера. Из-за ограничений FAT она не может обеспечить устойчивость к потере питания, но обеспечивает лёгкое взаимодействие с ПК.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Небольшая отказоустойчивая файловая система, предназначенная для микроконтроллеров. Развернуть Свернуть
BSD-3-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/zhistech-littlefs.git
git@api.gitlife.ru:oschina-mirror/zhistech-littlefs.git
oschina-mirror
zhistech-littlefs
zhistech-littlefs
master