Standard-C-Bibliothek PicoLibc 1.1 verfügbar

Keith Packard, aktiver Debian-Entwickler, Leiter des X.Org-Projekts und Schöpfer vieler X-Erweiterungen, darunter XRender, XComposite und XRandR, eingeführt Veröffentlichung einer neuen Standard-C-Bibliothek PicoLibc 1.1, entwickelt für den Einsatz auf eingebetteten Geräten mit begrenztem permanenten Speicher und RAM. Während der Entwicklung wurde ein Teil des Codes aus der Bibliothek ausgeliehen neulib aus dem Cygwin-Projekt und AVR-Libc, entwickelt für Atmel AVR-Mikrocontroller. PicoLibc-Code vertrieben von unter BSD-Lizenz. Die Bibliotheksassemblierung wird für ARM- (32-Bit), i386-, RISC-V-, x86_64- und PowerPC-Architekturen unterstützt.

Keith Packard begann mit der Entwicklung, nachdem er keine vernünftige Libc-Option finden konnte, die auf eingebetteten Geräten mit wenig RAM verwendet werden konnte. Das Projekt entwickelt sich seit letztem Jahr. In der ersten Phase handelte es sich bei dem Projekt um eine Variante von newlib, deren Funktionen von stdio durch eine kompakte Version von avrlibc ersetzt wurden (stdio in newlib war aufgrund des hohen Ressourcenverbrauchs nicht geeignet). Da Keiths aktuelle Arbeit die laufende Arbeit mit der RISC-V-Architektur und die Entwicklung von Tools für eingebettete Geräte umfasst, überprüfte er kürzlich den Stand der libc-Implementierungen und kam zu dem Schluss, dass die Kombination von newlib und avrlibc mit ein wenig Optimierung ein guter Allzweck sein könnte Lösung. Ursprünglich wurde das Projekt unter dem Namen „newlib-nano“ entwickelt, aber um Verwechslungen mit der Newlib-Bibliothek zu vermeiden, wurde es in PicoLibc umbenannt.

In seiner aktuellen Form hat Picolibc bereits daran gearbeitet, sämtlichen Code zu entfernen, der nicht unter einer BSD-Lizenz bereitgestellt wird (dieser Code wurde beim Erstellen für eingebettete Geräte nicht verwendet), was die Situation mit der Lizenz für das Projekt erheblich vereinfacht hat. Die Implementierung lokaler Streams wurde von „struct _reent“ auf den TLS-Mechanismus verschoben (Thread-lokaler Speicher). Die kompakte Version von stdio, die dem avrlibc-Bibliothekscode entlehnt ist, ist standardmäßig aktiviert (ATmel-spezifische Assembler-Einfügungen werden in C neu geschrieben). Für die Assemblierung wurde das Meson-Toolkit verwendet, das es ermöglichte, nicht an Newlib-Assembly-Skripte gebunden zu sein und die Übertragung von Änderungen aus Newlib zu vereinfachen. Eine vereinfachte Version des Initialisierungscodes (crt0) wurde hinzugefügt, die an die ausführbare Datei angehängt und ausgeführt wird, bevor die Steuerung an die Funktion main() übergeben wird.

In Picolibc-Version 1.1:

  • Hilfsbibliothek zur Unterstützung der Technologie hinzugefügt.Semihosting„ermöglicht es Code, der in einer Debugger- oder Emulatorumgebung ausgeführt wird, die E/A-Mechanismen des Hostsystems zu verwenden;
  • Für Systeme, die die Systemaufrufe Öffnen, Schließen, Lesen und Schreiben unterstützen, fügt tinystdio standardisierte POSIX-stdio-I/O-Schnittstellen hinzu, einschließlich der Funktionen fopen und fdopen, sowie die Bindung von stdin/stdout/stderr an POSIX-definierte Dateideskriptoren;
  • Aktuelle Änderungen aus der Newlib-Codebasis wurden übernommen. Einschließlich hinzugefügter libm-Stubs für fenv.h, das auf Systemen ohne Gleitkommaunterstützung verwendet werden kann;
  • Ein Beispiel für die Erstellung der „Hello World“-Anwendung mit picolibc für ARM- und RISC-V-Systeme hinzugefügt;
  • Die Verzeichnisse newlib, libm und mathfp wurden entfernt, die ungenutzten experimentellen Code enthielten.

Source: opennet.ru

Kommentar hinzufügen