Даступная стандартная Сі-бібліятэка PicoLibc 1.1

Кіт Пакард (Keith Packard), актыўны распрацоўшчык Debian, лідэр праекта X.Org і стваральнік мноства X-пашырэнняў, уключаючы XRender, XComposite і XRandR, прадставіў выпуск новай стандартнай Сі-бібліятэкі PicoLibc 1.1, якая развіваецца для прымянення на ўбудаваных прыладах з абмежаваным памерам пастаяннага сховішча і аператыўнай памяці. Пры распрацоўцы частка кода запазычана з бібліятэкі новая бібліятэка ад праекту Сygwin і AVR Libc, Якая развівалася для мікракантролераў Atmel AVR. Код PicoLibc распаўсюджваецца пад ліцэнзіяй BSD. Падтрымліваецца зборка бібліятэкі для архітэктур ARM (32-bit), i386, RISC-V, x86_64 і PowerPC.

Кіт Пакард прыступіў да распрацоўкі пасля таго, як не змог знайсці годнага варыянту Libc, які можна было выкарыстоўваць на ўбудаваных прыладах з невялікім АЗП. Праект развіваецца з мінулага года. На першым этапе праект уяўляў сабой варыянт newlib, функцыі stdio у якім былі заменены на кампактны варыянт з avrlibc (stdio у newlib не задавальняў вялікім спажываннем рэсурсаў). Бо бягучая дзейнасць Кіта злучана з сталай працай з архітэктурай RISC-V і развіццём інструментара для ўбудавальных прылад, нядаўна ён перагледзеў стан рэалізацый libc і прыйшоў да высновы, што пры невялікай дапрацоўцы камбінацыя newlib і avrlibc можа стаць добрым універсальным рашэннем. Першапачаткова праект развіваўся пад імем "newlib-nano", але каб пазбегнуць блытаніны з бібліятэкай Newlib быў перайменаваны ў PicoLibc.

У бягучым выглядзе ў Picolibc ужо праведзена праца па выдаленні ўсяго кода, які пастаўляецца не пад ліцэнзіяй BSD (дадзены код не выкарыстоўваўся пры зборцы для ўбудавальных прылад), што значна спрасціла сітуацыю з ліцэнзіяй на праект. Рэалізацыя лакальных патокаў пераведзена з 'struct _reent' на механізм TLS (thread-local storage). Актываваны па змаўчанні кампактны варыянт stdio, запазычаны з кода бібліятэкі avrlibc (спецыфічныя для ATmel асэмблерныя ўстаўкі перапісаныя на Сі). Для зборкі задзейнічаны інструментар Meson, што дазволіла не прывязвацца да зборачных сцэнароў newlib і спрасціць перанос змен з newlib. Дададзены спрошчаны варыянт кода ініцыялізацыі (crt0), які прымацоўваецца да выкананага файла і што выконваецца да перадачы кіравання функцыі main().

У версіі Picolibc 1.1:

  • Дададзена дапаможная бібліятэка для падтрымкі тэхналогіі «semihosting«, якая дазваляе коду, які выконваецца ў асяроддзі адладчыка ці эмулятара, выкарыстоўваць механізмы ўводу/высновы хост-сістэмы;
  • Для сістэм, якія падтрымліваюць сістэмныя выклікі open, close, read і write, у tinystdio дададзены стандартызаваныя POSIX-інтэрфейсы ўводу/высновы stdio, уключаючы функцыі fopen і fdopen, а таксама прывязку stdin/stdout/stderr да вызначаных у POSIX файлавых дэскрыптарах;
  • Перанесены нядаўнія змены з кодавай базы newlib. У тым ліку дададзены заглушкі libm для fenv.h, якія можна выкарыстоўваць на сістэмах без падтрымання вылічэнняў з якая плавае кропкай;
  • Дададзены прыклад зборкі прыкладання "Hello world" з picolibc для сістэм ARM і RISC-V;
  • Выдалены каталогі newlib, libm і mathfp, у якіх утрымоўваўся невыкарыстоўваны эксперыментальны код.

Крыніца: opennet.ru

Дадаць каментар