UtgÄvan av projektet LittleFS 2.10 har publicerats, vilket utvecklar ett kompakt filsystem för inbyggda enheter och mikrokontroller. Filsystemet skapades ursprungligen av ARM för operativsystemet Mbed OS men har sedan dess separerats till ett eget projekt. Filsystemets kod Àr skriven i C och distribueras under BSD-licens. Den referensimplementation av LittleFS levereras som ett C-bibliotek, baserat pÄ vilket en FUSE-modul och omslag för olika programmeringssprÄk har skapats.
Funktioner i LittleFS:
- LÄga resurskrav och stöd för drift under begrÀnsade RAM-bytestorlekar. I implementationen av LittleFS anvÀnds enbart statiskt definierade buffrar (utan dynamisk minnesallokering) och rekursiva anrop anvÀnds inte, vilket gör att storleken pÄ den anvÀnda RAM-minnet och LittleFS:s styrstrukturer pÄ lagringsenheten alltid förblir konstant, oavsett vad som skrivs till filsystemet och hur stort lagringsutrymmet Àr.
- Verktyg för utslitsutjÀmning av Flash-lagringsmedia (wear leveling), vilket minimerar omanvÀndning av block och jÀmnt distribuerar blockrensningsoperationer pÄ flashminnet, vars kontroller inte tillhandahÄller en lösning för detta problem.
- Mycket hög motstĂ„ndskraft mot fel â filsystemet betraktar oplanerat avbrott (avslutning genom strömavbrott) som en normal situation och garanterar att lagringen pĂ„ disken Ă€r intakt vid varje givet tillfĂ€lle. För att förhindra integritetsbrott och dataförlust anvĂ€nds mekanismen copy-on-write (COW), dĂ€r Ă€ndringar inte skriver över information utan sparas pĂ„ en ny plats.
- Atomicitet i operationer sÄsom radering och ominamning, Àven om strömmen försvinner under deras genomförande. FilÀndringar skrivs till disken endast efter att sync eller close har anropats. Inkonsekvenser orsakade av operationer som inte kan utföras atomÀrt hanteras av en speciell deorphan-behandlare, som gÄr igenom hela filsystemets trÀd efter inladdning.
- Stöd för POSIX-liknande funktioner för arbete med filer och kataloger.
InnehÄllet i filerna i LittleFS representeras av COW-listor CTZ, vilket ger en komplexitetsnivÄ pÄ O(1) vid tillÀgg och O(nlogn) vid lÀsning. Allokering av block sker genom att skanna filsystemet efter anvÀnda block i ett omrÄde av fast storlek, som lagras i form av en bitvektor. För att förenkla skanningen Àr alla mappar en del av en lÀnkad lista som strÀcker sig över hela filsystemet. Om ett fel uppstÄr vid skrivning av ett block allokeras ett nytt block och data överförs till det.
Bland förÀndringarna i den nya versionen av LittleFS:
- Koden för tolkning av filvÀgar har omarbetats för att Äterskapa filsystemets beteende nÀrmare POSIX-system och anvÀndarnas förvÀntningar i situationer som att avsluta vÀgen med en snedstreck, hantera tomma vÀgar och navigera utanför filsystemets rot.
- TvÄ nya exempel pÄ blockenheter ramcrc32bd och ramrsbd har lagts till, dÀr en felkorrigeringsmekanism, kompatibel med LittleFS, har implementerats. I sin nuvarande form saknar LittleFS stöd för att identifiera och korrigera fel, och dessa operationer flyttas till blockenheternas nivÄ.
- Funktionen lfs_mkdir har fÄtt stöd för avslutande snedstreck, dvs. anropet lfs_mkdir("a/") resulterar nu inte lÀngre i ett felmeddelande.
- I funktionerna lfs_stat och lfs_getattr returneras nu ett fel nÀr avslutande snedstreck anvÀnds om den existerande vÀgen i filsystemet inte Àr en mapp.
- Försök att öppna en fil med ett avslutande snedstreck i namnet genom funktionen lfs_file_open kommer nu att leda till felet LFS_ERR_NOTDIR om filen inte Àr en mapp i filsystemet, LFS_ERR_ISDIR om namnet refererar till en mapp i filsystemet, och LFS_O_CREAT om filen inte existerar.
- Försök att komma Ät utanför filsystemets rot, till exempel lfs_stat("/../a"), kommer nu att resultera i ett felmeddelande.
- Att ange en tom vÀg Àr nu inte lÀngre en synonym för att referera till rotmappen, dvs. anropet lfs_stat("") kommer att leda till ett felmeddelande.
KĂ€lla: opennet.ru
