Standaard C-bibliotheek PicoLibc 1.1 beschikbaar

Keith Packard, actieve Debian-ontwikkelaar, leider van het X.Org-project en maker van vele X-extensies, waaronder XRender, XComposite en XRandR, ingediend release van een nieuwe standaard C-bibliotheek PicoLibc 1.1, ontwikkeld voor gebruik op embedded apparaten met beperkte permanente opslag en RAM. Tijdens de ontwikkeling is een deel van de code geleend van de bibliotheek nieuwelib van het Cygwin-project en AVR Libc, ontwikkeld voor Atmel AVR-microcontrollers. PicoLibc-code gedistribueerd door onder BSD-licentie. Bibliotheekassemblage wordt ondersteund voor ARM (32-bit), i386, RISC-V, x86_64 en PowerPC-architecturen.

Keith Packard begon met de ontwikkeling nadat hij geen fatsoenlijke Libc-optie kon vinden die kon worden gebruikt op ingebedde apparaten met weinig RAM. Het project is sinds vorig jaar in ontwikkeling. In de eerste fase was het project een variant van newlib, waarbij de functies van stdio werden vervangen door een compacte versie van avrlibc (stdio in newlib was niet geschikt vanwege het hoge bronnenverbruik). Omdat Keiths huidige werk voortdurende werkzaamheden met de RISC-V-architectuur en de ontwikkeling van tools voor ingebedde apparaten omvat, heeft hij onlangs de stand van de libc-implementaties beoordeeld en geconcludeerd dat met een beetje aanpassingen de combinatie van newlib en avrlibc een goed algemeen doel zou kunnen zijn. oplossing. Aanvankelijk ontwikkelde het project zich onder de naam “newlib-nano”, maar om verwarring met de Newlib-bibliotheek te voorkomen werd het omgedoopt tot PicoLibc.

In zijn huidige vorm heeft Picolibc al werk verricht om alle code te verwijderen die niet onder een BSD-licentie wordt geleverd (deze code werd niet gebruikt bij het bouwen voor embedded apparaten), wat de situatie met de licentie voor het project aanzienlijk heeft vereenvoudigd. De implementatie van lokale streams is verplaatst van 'struct _reent' naar het TLS-mechanisme (thread-lokale opslag). De compacte versie van stdio, geleend van de avrlibc-bibliotheekcode, is standaard geactiveerd (ATmel-specifieke assembler-inserts worden herschreven in C). Voor de assemblage werd de Meson-toolkit gebruikt, wat het mogelijk maakte om niet gebonden te zijn aan newlib-assemblagescripts en om de overdracht van wijzigingen vanuit newlib te vereenvoudigen. Een vereenvoudigde versie van de initialisatiecode (crt0) toegevoegd, toegevoegd aan het uitvoerbare bestand en uitgevoerd voordat de besturing wordt overgedragen naar de functie main().

In Picolibc-versie 1.1:

  • Extra bibliotheek toegevoegd om de technologie te ondersteunen "semi-hosting"staat toe dat code die wordt uitgevoerd in een debugger- of emulatoromgeving de I/O-mechanismen van het hostsysteem gebruikt;
  • Voor systemen die de open-, close-, lees- en schrijfsysteemaanroepen ondersteunen, voegt tinystdio gestandaardiseerde POSIX stdio I/O-interfaces toe, inclusief de fopen- en fdopen-functies, evenals het binden van stdin/stdout/stderr aan door POSIX gedefinieerde bestandsdescriptors;
  • Recente wijzigingen uit de newlib-codebase zijn overgenomen. Inclusief toegevoegde libm-stubs voor fenv.h, dat kan worden gebruikt op systemen zonder drijvende-kommaondersteuning;
  • Een voorbeeld toegevoegd van het bouwen van de “Hello world”-applicatie met picolibc voor ARM- en RISC-V-systemen;
  • De mappen newlib, libm en mathfp verwijderd, die ongebruikte experimentele code bevatten.

Bron: opennet.ru

Voeg een reactie