Libreria C standard PicoLibc 1.1 disponibile

Keith Packard, attivo sviluppatore Debian, leader del progetto X.Org e creatore di molte estensioni X, tra cui XRender, XComposite e XRandR, presentata rilascio di una nuova libreria C standard PicoLibc 1.1, sviluppato per l'uso su dispositivi incorporati con memoria permanente e RAM limitate. Durante lo sviluppo, parte del codice è stata presa in prestito dalla biblioteca newlib dal progetto Cygwin e AVRLibc, sviluppato per i microcontrollori Atmel AVR. Codice PicoLibc distribuito da sotto licenza BSD. L'assembly della libreria è supportato per le architetture ARM (32 bit), i386, RISC-V, x86_64 e PowerPC.

Keith Packard ha iniziato lo sviluppo dopo non essere riuscito a trovare un'opzione Libc decente che potesse essere utilizzata su dispositivi embedded con poca RAM. Il progetto è in fase di sviluppo dallo scorso anno. Nella prima fase, il progetto era una variante di newlib, le funzioni di stdio in cui sono state sostituite con una versione compatta di avrlibc (stdio in newlib non era adatto a causa del suo elevato consumo di risorse). Poiché il lavoro attuale di Keith prevede un lavoro continuo con l'architettura RISC-V e lo sviluppo di strumenti per dispositivi embedded, ha recentemente esaminato lo stato delle implementazioni di libc e ha concluso che con qualche modifica, la combinazione di newlib e avrlibc potrebbe essere una buona soluzione per scopi generali. soluzione. Inizialmente il progetto si sviluppò sotto il nome “newlib-nano”, ma per evitare confusione con la libreria Newlib venne ribattezzato PicoLibc.

Nella sua forma attuale, Picolibc ha già lavorato per rimuovere tutto il codice che non è fornito con la licenza BSD (questo codice non è stato utilizzato durante la creazione per dispositivi embedded), il che ha notevolmente semplificato la situazione con la licenza per il progetto. L'implementazione dei flussi locali è stata spostata da 'struct _reent' al meccanismo TLS (archiviazione locale del thread). La versione compatta di stdio, presa in prestito dal codice della libreria avrlibc, è attivata per impostazione predefinita (gli inserti assembler specifici di ATmel vengono riscritti in C). Per l'assembly è stato utilizzato il toolkit Meson, che ha permesso di non essere vincolati agli script di assembly newlib e di semplificare il trasferimento delle modifiche da newlib. Aggiunta una versione semplificata del codice di inizializzazione (crt0), allegata al file eseguibile ed eseguita prima che il controllo venga trasferito alla funzione main().

Nella versione Picolibc 1.1:

  • Aggiunta libreria ausiliaria per supportare la tecnologia "semihosting"consente al codice in esecuzione in un ambiente debugger o emulatore di utilizzare i meccanismi I/O del sistema host;
  • Per i sistemi che supportano le chiamate di sistema open, close, read e write, tinystdio aggiunge interfacce I/O POSIX stdio standardizzate, incluse le funzioni fopen e fdopen, oltre a collegare stdin/stdout/stderr ai descrittori di file definiti da POSIX;
  • Sono state mantenute le modifiche recenti dal codice base newlib. Compresi gli stub libm aggiunti per fenv.h, che può essere utilizzato su sistemi senza supporto in virgola mobile;
  • Aggiunto un esempio di creazione dell'applicazione “Hello world” con picolibc per sistemi ARM e RISC-V;
  • Rimosse le directory newlib, libm e mathfp, che contenevano codice sperimentale inutilizzato.

Fonte: opennet.ru

Aggiungi un commento