Доступна стандартная Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° PicoLibc 1.1

ΠšΠΈΡ‚ ΠŸΠ°ΠΊΠΊΠ°Ρ€Π΄ (Keith Packard), Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Debian, Π»ΠΈΠ΄Π΅Ρ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° X.Org ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ мноТСства X-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ XRender, XComposite ΠΈ XRandR, прСдставил выпуск Π½ΠΎΠ²ΠΎΠΉ стандартной Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ PicoLibc 1.1, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ для примСнСния Π½Π° встраиваСмых устройствах с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° заимствована ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ newlib ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π‘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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ