Dostępna standardowa biblioteka C PicoLibc 1.1

Keith Packard, aktywny deweloper Debiana, lider projektu X.Org i twórca wielu rozszerzeń X, w tym XRender, XComposite i XRandR, przedstawił wydanie nowej standardowej biblioteki C PicoLibc 1.1, rozwijanej z myślą o zastosowaniach w urządzeniach wbudowanych z ograniczoną pamięcią stałą i RAM. W trakcie opracowywania część kodu została zapożyczona z biblioteki newlib z projektu Cygwin i AVR Libc, rozwijanej dla mikro kontrolerów Atmel AVR. Kod PicoLibc rozpowszechniany jest dostępny na licencji BSD. Wspierana jest kompilacja biblioteki dla architektur ARM (32-bit), i386, RISC-V, x86_64 i PowerPC.

Kit Packard rozpoczął rozwój po tym, jak nie mógł znaleźć godnej alternatywy dla Libc, która mogłaby być używana w urządzeniach wbudowanych z niewielką ilością pamięci RAM. Projekt rozwija się od zeszłego roku. Na początku projekt był wariantem newlib, w którym funkcje stdio zostały zastąpione kompaktową wersją z avrlibc (stdio w newlib nie spełniało wymogów z powodu dużego zużycia zasobów). Ponieważ obecna działalność Kita związana jest z ciągłą pracą z architekturą RISC-V oraz rozwojem narzędzi dla urządzeń wbudowanych, niedawno zrewidował stan implementacji libc i doszedł do wniosku, że przy niewielkich przeróbkach połączenie newlib i avrlibc może stać się dobrym uniwersalnym rozwiązaniem. Początkowo projekt rozwijał się pod nazwą „newlib-nano”, ale aby uniknąć zamieszania z biblioteką Newlib, został przemianowany na PicoLibc.

W aktualnej wersji Picolibc już dokonano pracy nad usunięciem całego kodu, który nie był dostarczany na licencji BSD (ten kod nie był używany przy kompilacji dla urządzeń wbudowanych), co znacznie uprościło sytuację z licencją projektu. Implementacja lokalnych wątków została przeniesiona z ‘struct _reent’ na mechanizm TLS (thread-local storage). Włączona domyślnie kompaktowa wersja stdio, przejęta z kodu biblioteki avrlibc (specyficzne dla ATmel wstawki assemblera zostały przepisane w C). Do kompilacji wykorzystano narzędzia Meson, co pozwoliło na uniezależnienie się od skryptów kompilacyjnych newlib i uprościło przenoszenie zmian z newlib. Dodano uproszczoną wersję kodu inicjalizacji (crt0), dołączanego do pliku wykonywalnego i wykonywanego przed przekazaniem kontroli do funkcji main().

W wersji Picolibc 1.1:

  • Dodano pomocniczą bibliotekę, aby wspierać technologię „semihosting„, która pozwala kodowi wykonywanemu w środowisku debuggera lub emulatora korzystać z mechanizmów wejścia/wyjścia systemu gospodarza;
  • Dla systemów wspierających wywołania systemowe open, close, read i write, w tinystdio dodano znormalizowane interfejsy wejścia/wyjścia POSIX stdio, w tym funkcje fopen i fdopen, a także powiązanie stdin/stdout/stderr z określonymi deskryptorami plików w POSIX;
  • Przeniesiono ostatnie zmiany z bazy kodu newlib. W tym dodano stuby libm dla fenv.h, które można wykorzystać w systemach bez wsparcia dla obliczeń zmiennoprzecinkowych;
  • Dodano przykład budowy aplikacji „Hello world” z picolibc dla systemów ARM i RISC-V;
  • Usunięto katalogi newlib, libm i mathfp, które zawierały nieużywany eksperymentalny kod.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster