Dostępna standardowa biblioteka C PicoLibc 1.1

Keith Packard, aktywny programista Debiana, lider projektu X.Org i twórca wielu rozszerzeń X, w tym XRender, XComposite i XRandR, wprowadzono wydanie nowej standardowej biblioteki C PicoLibc 1.1, opracowany do użytku na urządzeniach wbudowanych z ograniczoną stałą pamięcią masową i pamięcią RAM. Podczas opracowywania część kodu została pożyczona z biblioteki nowa biblioteka z projektu Cygwin i Biblioteka AVR, opracowany dla mikrokontrolerów Atmel AVR. Kod PicoLibc dystrybuowane przez na licencji BSD. Montaż bibliotek jest obsługiwany dla architektur ARM (32-bitowych), i386, RISC-V, x86_64 i PowerPC.

Keith Packard rozpoczął prace nad programem, gdy nie mógł znaleźć przyzwoitej opcji Libc, której można by używać na urządzeniach wbudowanych z małą ilością pamięci RAM. Projekt rozwija się od ubiegłego roku. W pierwszym etapie projekt był wariantem newlib, w którym funkcje stdio zostały zastąpione kompaktową wersją z avrlibc (stdio w newlib nie nadawało się ze względu na duże zużycie zasobów). Ponieważ obecna praca Keitha obejmuje ciągłą pracę z architekturą RISC-V i rozwój narzędzi dla urządzeń wbudowanych, niedawno dokonał przeglądu stanu implementacji bibliotek libc i doszedł do wniosku, że po drobnych poprawkach połączenie newlib i avrlibc mogłoby być dobrym narzędziem ogólnego przeznaczenia rozwiązanie. Początkowo projekt rozwijał się pod nazwą „newlib-nano”, jednak aby uniknąć pomylenia z biblioteką Newlib, zmieniono jego nazwę na PicoLibc.

W swojej obecnej formie Picolibc wykonał już pracę nad usunięciem całego kodu, który nie jest dostarczany na licencji BSD (kod ten nie był używany przy kompilacji dla urządzeń wbudowanych), co znacznie uprościło sytuację z licencją na projekt. Implementacja strumieni lokalnych została przeniesiona z „struct _reent” do mechanizmu TLS (lokalna pamięć wątków). Kompaktowa wersja stdio, zapożyczona z kodu biblioteki avrlibc, jest domyślnie aktywowana (wstawki asemblera specyficzne dla ATmel są przepisane w C). Do asemblera wykorzystano zestaw narzędzi Meson, co pozwoliło nie być przywiązanym do skryptów asemblera newlib i uprościć przenoszenie zmian z newlib. Dodano uproszczoną wersję kodu inicjującego (crt0), dołączaną do pliku wykonywalnego i wykonywaną przed przekazaniem sterowania do funkcji main().

W programie Picolibc w wersji 1.1:

  • Dodano bibliotekę pomocniczą do obsługi technologii ”półhosting„umożliwia kodowi działającemu w środowisku debugera lub emulatora korzystanie z mechanizmów we/wy systemu hosta;
  • W przypadku systemów obsługujących wywołania systemowe otwierania, zamykania, odczytu i zapisu, tinystdio dodaje standardowe interfejsy we/wy POSIX stdio, w tym funkcje fopen i fdopen, a także wiązanie stdin/stdout/stderr z deskryptorami plików zdefiniowanymi w POSIX;
  • Ostatnie zmiany z bazy kodu newlib zostały przeniesione. Zawiera dodane fragmenty biblioteki libm dla fenv.h, którego można używać w systemach bez obsługi zmiennoprzecinkowej;
  • 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 kod eksperymentalny.

Źródło: opennet.ru

Dodaj komentarz