рдорд╛рдирдХ C рд▓рд╛рдпрдмреНрд░рд░реА PicoLibc 1.1 рдЙрдкрд▓рдмреНрдз

рдХреАрде рдкреЕрдХрд╛рд░реНрдб, рд╕рдХреНрд░рд┐рдп рдбреЗрдмрд┐рдпрди рд╡рд┐рдХрд╕рдХ, X.Org рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рдиреЗрддреЗ рдЖрдгрд┐ XRender, XComposite рдЖрдгрд┐ XRandR рд╕рд╣ рдЕрдиреЗрдХ X рд╡рд┐рд╕реНрддрд╛рд░рд╛рдВрдЪреЗ рдирд┐рд░реНрдорд╛рддрд╛, рдУрд│рдЦ рдХрд░реВрди рджрд┐рд▓реА рдирд╡реАрди рдорд╛рдирдХ C рд▓рд╛рдпрдмреНрд░рд░реАрдЪреЗ рдкреНрд░рдХрд╛рд╢рди PicoLibc 1.1, рдорд░реНрдпрд╛рджрд┐рдд рдХрд╛рдпрдорд╕реНрд╡рд░реВрдкреА рд╕реНрдЯреЛрд░реЗрдЬ рдЖрдгрд┐ RAM рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдХрд░рдгрд╛рдВрд╡рд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рд╡рд┐рдХрд╛рд╕рд╛рджрд░рдореНрдпрд╛рди, рдХреЛрдбрдЪрд╛ рдХрд╛рд╣реА рднрд╛рдЧ рд▓рд╛рдпрдмреНрд░рд░реАрддреВрди рдШреЗрддрд▓рд╛ рд╣реЛрддрд╛ newlib рд╕рд╛рдпрдЧреНрд╡рд┐рди рдкреНрд░рдХрд▓реНрдкрд╛рддреВрди рдЖрдгрд┐ AVR Libc, Atmel AVR рдорд╛рдпрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░рд╕рд╛рдареА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. PicoLibc рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд BSD рдкрд░рд╡рд╛рдиреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд. ARM (32-bit), i386, RISC-V, x86_64 рдЖрдгрд┐ PowerPC рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╕рд╛рдареА рд▓рд╛рдпрдмреНрд░рд░реА рдЕрд╕реЗрдВрдмрд▓реА рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗ.

рдХрд┐рде рдкреЕрдХрд╛рд░реНрдбрдиреЗ рдХрдореА RAM рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдХрд░рдгрд╛рдВрд╡рд░ рд╡рд╛рдкрд░рддрд╛ рдпреЗрдгреНрдпрд╛рдЬреЛрдЧрд╛ Libc рдкрд░реНрдпрд╛рдп рд╢реЛрдзрдгреНрдпрд╛рдд рдЕрдХреНрд╖рдо рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рд╡рд┐рдХрд╛рд╕рд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА. рдЧреЗрд▓реНрдпрд╛ рд╡рд░реНрд╖рднрд░рд╛рдкрд╛рд╕реВрди рд╣рд╛ рдкреНрд░рдХрд▓реНрдк рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЖрд╣реЗ. рдкрд╣рд┐рд▓реНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рдкреНрд░рдХрд▓реНрдк рд╣рд╛ newlib рдЪрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ stdio рдЪреА рдХрд╛рд░реНрдпреЗ avrlibc рдордзреАрд▓ рдХреЙрдореНрдкреЕрдХреНрдЯ рдЖрд╡реГрддреНрддреАрдиреЗ рдмрджрд▓рд▓реА рд╣реЛрддреА (рдиреНрдпреВрд▓рд┐рдмрдордзреАрд▓ stdio рддреНрдпрд╛рдЪреНрдпрд╛ рдЙрдЪреНрдЪ рд╕рдВрд╕рд╛рдзрдирд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдирд╡реНрд╣рддреЗ). рдХреАрдердЪреНрдпрд╛ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдордзреНрдпреЗ RISC-V рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрдгрд┐ рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдХрд░рдгрд╛рдВрд╕рд╛рдареА рдЯреВрд▓реАрдВрдЧрдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╣ рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрд╛рдорд╛рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рддреНрдпрд╛рдВрдиреА рдЕрд▓реАрдХрдбреЗрдЪ libc рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдЪреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдХреЗрд▓реЗ рдЖрдгрд┐ рдЕрд╕рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврд▓рд╛ рдХреА рдереЛрдбреЗ рдмрджрд▓ рдХрд░реВрди, newlib рдЖрдгрд┐ avrlibc рдЪреЗ рд╕рдВрдпреЛрдЬрди рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реЗрддреВ рдЕрд╕реВ рд╢рдХрддреЛ. рдЙрдкрд╛рдп. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рд╣рд╛ рдкреНрд░рдХрд▓реНрдк тАЬрдиреНрдпреВрд▓рд┐рдм-рдиреЕрдиреЛтАЭ рдирд╛рд╡рд╛рдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдЭрд╛рд▓рд╛, рдкрд░рдВрддреБ рдиреНрдпреВрд▓рд┐рдм рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рдЧреЛрдВрдзрд│ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪреЗ рдирд╛рд╡ рдкрд┐рдХреЛрд▓рд┐рдмрд┐рдХ рдЕрд╕реЗ рдареЗрд╡рдгреНрдпрд╛рдд рдЖрд▓реЗ.

рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдлреЙрд░реНрдордордзреНрдпреЗ, Picolibc рдиреЗ BSD рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рди рдкреБрд░рд╡рд▓реЗрд▓реЗ рд╕рд░реНрд╡ рдХреЛрдб рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рдЪреЗ рдХрд╛рдо рдЖрдзреАрдЪ рдХреЗрд▓реЗ рдЖрд╣реЗ (рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдХрд░рдгреЗ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рд╣рд╛ рдХреЛрдб рд╡рд╛рдкрд░рд▓рд╛ рдЧреЗрд▓рд╛ рдирд╛рд╣реА), рдЬреНрдпрд╛рдореБрд│реЗ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдкрд░рд╡рд╛рдиреНрдпрд╛рд╕рд╣ рдкрд░рд┐рд╕реНрдерд┐рддреА рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╕реБрд▓рдн рдЭрд╛рд▓реА рдЖрд╣реЗ. рд╕реНрдерд╛рдирд┐рдХ рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА 'struct _reent' рд╡рд░реВрди TLS рдпрдВрддреНрд░рдгрд╛ (рдереНрд░реЗрдб-рд╕реНрдерд╛рдирд┐рдХ рд╕реНрдЯреЛрд░реЗрдЬ). avrlibc рд▓рд╛рдпрдмреНрд░рд░реА рдХреЛрдбрдордзреВрди рдШреЗрддрд▓реЗрд▓реА stdio рдЪреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЖрд╡реГрддреНрддреА, рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд░рд┐рдп рдХреЗрд▓реА рдЬрд╛рддреЗ (ATmel-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕реЗрдВрдмрд▓рд░ рдЗрдиреНрд╕рд░реНрдЯ C рдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рд▓реА рдЬрд╛рддрд╛рдд). рдореЗрд╕рди рдЯреВрд▓рдХрд┐рдЯрдЪрд╛ рд╡рд╛рдкрд░ рдЕрд╕реЗрдВрдмреНрд▓реАрд╕рд╛рдареА рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛, рдЬреНрдпрд╛рдореБрд│реЗ рдиреНрдпреВрд▓рд┐рдм рдЕрд╕реЗрдВрдмреНрд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╢реА рдЬреЛрдбрд▓реЗ рдЬрд╛рдК рдирдпреЗ рдЖрдгрд┐ newlib рдордзреВрди рдмрджрд▓рд╛рдВрдЪреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реБрд▓рдн рдХрд░рдгреЗ рд╢рдХреНрдп рдЭрд╛рд▓реЗ. рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓рд╢реА рд╕рдВрд▓рдЧреНрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рдХреЛрдб (crt0) рдЪреА рд╕рд░рд▓реАрдХреГрдд рдЖрд╡реГрддреНрддреА рдЬреЛрдбрд▓реА рдЖрдгрд┐ рдирд┐рдпрдВрддреНрд░рдг рдореБрдЦреНрдп() рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╣реЛрдгреНрдпрд╛рдкреВрд░реНрд╡реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ.

Picolibc рдЖрд╡реГрддреНрддреА 1.1 рдордзреНрдпреЗ:

  • рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╣рд╛рдпреНрдпрдХ рд▓рд╛рдпрдмреНрд░рд░реА рдЬреЛрдбрд▓реА "semihosting"рдбрд┐рдмрдЧрд░ рдХрд┐рдВрд╡рд╛ рдЗрдореНрдпреБрд▓реЗрдЯрд░ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рдХреЛрдбрд▓рд╛ рд╣реЛрд╕реНрдЯ рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ I/O рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ;
  • рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓реНрд╕ рдЙрдШрдбрдгреЗ, рдмрдВрдж рдХрд░рдгреЗ, рд╡рд╛рдЪрдгреЗ рдЖрдгрд┐ рд▓рд┐рд╣рд┐рдгреЗ рдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА, tinystdio рдкреНрд░рдорд╛рдгрд┐рдд POSIX stdio I/O рдЗрдВрдЯрд░рдлреЗрд╕ рдЬреЛрдбрддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ fopen рдЖрдгрд┐ fdopen рдлрдВрдХреНрд╢рдиреНрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд, рддрд╕реЗрдЪ POSIX-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддреНрдпрд╛рдВрдирд╛ stdin/stdout/stderr рдмрдВрдзрдирдХрд╛рд░рдХ;
  • рдиреНрдпреБрд▓рд┐рдм рдХреЛрдбрдмреЗрд╕рдордзреАрд▓ рдЕрд▓реАрдХрдбреАрд▓ рдмрджрд▓ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. рд╕рд╛рдареА рдЬреЛрдбрд▓реЗрд▓реЗ libm stubs рд╕рдорд╛рд╡реЗрд╢ fenv.h, рдЬреЗ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдкреЛрд░реНрдЯрд╢рд┐рд╡рд╛рдп рд╕рд┐рд╕реНрдЯрдорд╡рд░ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ;
  • ARM рдЖрдгрд┐ RISC-V рдкреНрд░рдгрд╛рд▓реАрдВрд╕рд╛рдареА picolibc рд╕рд╣ тАЬHello worldтАЭ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд▓реЗ;
  • рди рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдХреЛрдб рдЕрд╕рд▓реЗрд▓реНрдпрд╛ newlib, libm рдЖрдгрд┐ mathfp рдбрд┐рд░реЗрдХреНрдЯрд░реА рдХрд╛рдврд▓реНрдпрд╛.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛