De release van het LittleFS-project 2.10 is gepubliceerd, dat een compacte bestandssysteem voor ingebouwde apparaten en microcontrollers ontwikkelt. Het bestandssysteem werd oorspronkelijk ontwikkeld door ARM voor het besturingssysteem Mbed OS, maar werd later afgesplitst in een apart project. De FS-code is geschreven in de programmeertaal C en wordt verspreid onder de BSD-licentie. De referentie-implementatie van LittleFS wordt geleverd als een C-bibliotheek, waarop de FUSE-module en wrappers voor verschillende programmeertalen zijn gebaseerd.
Kenmerken van LittleFS:
- Lage resourcevereisten en ondersteuning voor werking onder beperkte RAM-omstandigheden. In de LittleFS-implementatie worden alleen statisch gedefinieerde buffers gebruikt (zonder dynamische geheugentoewijzing) en worden geen recursieve aanroepen gebruikt, waardoor de hoeveelheid RAM en de overheadstructuren van LittleFS op de opslag altijd constant blijven, ongeacht wat er in de FS wordt geschreven en de grootte van de opslag.
- Hulpmiddelen voor slijtage-uitbalancering van Flash-media (wear leveling), die helpen om herhaald gebruik van blokken te minimaliseren en de opruimoperaties op Flash-geheugen gelijkmatig te verdelen, waarvan de controller deze taak niet ondersteunt.
- Zeer hoge fouttolerantie ā De FS beschouwt willekeurige onderbrekingen (afsluiting door uitschakeling van de voeding) als een normale situatie en garandeert dat de opslag op de schijf te allen tijde in een intacte staat is. Om schending van integriteit en gegevensverlies te voorkomen, wordt een copy-on-write (COW) mechanisme toegepast, waarbij wijzigingen de informatie niet overschrijven, maar op een nieuwe locatie worden opgeslagen.
- Atomariteit van operaties, zoals verwijderen en hernoemen, zelfs bij verlies van voeding tijdens hun uitvoering. Wijzigingen aan bestanden worden alleen naar de schijf geschreven na een oproep van sync of close. Ongelijkheden die ontstaan door operaties die niet atomair kunnen worden uitgevoerd, worden opgelost door een speciale deorphan-handler, die door de hele FS-boom gaat na het opstarten.
- Ondersteuning voor POSIX-achtige functies voor het werken met bestanden en mappen.
De inhoud van bestanden in LittleFS wordt gepresenteerd als COW-lijsten (Copy-On-Write), wat een complexiteitsniveau van O(1) biedt bij toevoegingen en O(nlogn) bij lezingen. Blokken worden toegewezen door het scannen van het bestandssysteem op gebruikte blokken in een gebied van vaste grootte, dat wordt opgeslagen als een bitvector. Ter vereenvoudiging van het scannen maken alle mappen deel uit van een gelinkte lijst die het hele bestandssysteem omspant. Als er een fout optreedt bij het schrijven van een blok, wordt een nieuw blok toegewezen en worden de gegevens daarin overgedragen.
Onder de wijzigingen in de nieuwe versie van LittleFS:
- De code voor het parseren van bestandspaden is herzien, waardoor het gedrag van het bestandssysteem dichter bij die van POSIX-systemen is gekomen en beter aansluit bij de verwachtingen van gebruikers in situaties zoals het beƫindigen van paden met een slash, de verwerking van lege paden en navigatie buiten de root van het bestandssysteem.
- Twee nieuwe voorbeelden van blokapparaten, ramcrc32bd en ramrsbd, zijn toegevoegd, waarin een foutcorrectiemechanisme is geĆÆmplementeerd dat compatibel is met LittleFS. In de huidige versie ontbreekt in het bestandssysteem van LittleFS ondersteuning voor het detecteren en corrigeren van fouten, en deze bewerkingen worden naar het niveau van blokapparaten verplaatst.
- De functie lfs_mkdir ondersteunt nu het gebruik van eindigende slashes, d.w.z. de aanroep van lfs_mkdir("a/") leidt nu niet meer tot een foutmelding.
- In de functies lfs_stat en lfs_getattr wordt nu een foutmelding weergegeven bij het gebruik van eindigende slashes, als het bestaande pad in het bestandssysteem geen map is.
- Een poging om een bestand met een eindigende slash in de naam via de functie lfs_file_open te openen, leidt nu tot de fout LFS_ERR_NOTDIR als het bestand geen map is in het bestandssysteem, LFS_ERR_ISDIR als de naam verwijst naar een map in het bestandssysteem, en LFS_O_CREAT als het bestand niet bestaat.
- Een poging om buiten de root van het bestandssysteem te verwijzen, bijvoorbeeld lfs_stat("/../a"), leidt nu tot een foutmelding.
- Het opgeven van een leeg pad is nu geen synoniem meer voor verwijzing naar de rootmap, d.w.z. het aanroepen van lfs_stat("") leidt tot een foutmelding.
Bron: opennet.ru
