ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ PicoLibc 1.1 ์‚ฌ์šฉ ๊ฐ€๋Šฅ

ํ™œ๋™์ ์ธ Debian ๊ฐœ๋ฐœ์ž์ด์ž X.Org ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ๋”์ด์ž XRender, XComposite ๋ฐ XRandR์„ ํฌํ•จํ•œ ๋งŽ์€ X ํ™•์žฅ์˜ ์ฐฝ์‹œ์ž์ธ Keith Packard๋Š” ๋„์ž… ๋œ ์ƒˆ๋กœ์šด ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถœ์‹œ PicoLibc 1.1, ์ œํ•œ๋œ ์˜๊ตฌ ์ €์žฅ ๊ณต๊ฐ„๊ณผ RAM์„ ๊ฐ–์ถ˜ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์— ์ฝ”๋“œ์˜ ์ผ๋ถ€๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋นŒ๋ ค์™”์Šต๋‹ˆ๋‹ค. ๋‰ด๋ฆฝ Cygwin ํ”„๋กœ์ ํŠธ์—์„œ AVR ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Atmel AVR ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. PicoLibc ์ฝ”๋“œ ๋ฐฐํฌ์ž BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ. ARM(32๋น„ํŠธ), i386, RISC-V, x86_64 ๋ฐ PowerPC ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

Keith Packard๋Š” RAM์ด ๊ฑฐ์˜ ์—†๋Š” ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ Libc ์˜ต์…˜์„ ์ฐพ์ง€ ๋ชปํ•œ ํ›„ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ž‘๋…„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ํ”„๋กœ์ ํŠธ๋Š” stdio์˜ ๊ธฐ๋Šฅ์ด avrlibc์˜ ์ปดํŒฉํŠธ ๋ฒ„์ „์œผ๋กœ ๋Œ€์ฒด๋œ newlib์˜ ๋ณ€ํ˜•์ด์—ˆ์Šต๋‹ˆ๋‹ค(newlib์˜ stdio๋Š” ๋†’์€ ๋ฆฌ์†Œ์Šค ์†Œ๋น„์— ์ ํ•ฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). Keith์˜ ํ˜„์žฌ ์ž‘์—…์—๋Š” RISC-V ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์šฉ ๋„๊ตฌ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์ง€์†์ ์ธ ์ž‘์—…์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ตœ๊ทผ libc ๊ตฌํ˜„ ์ƒํƒœ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์•ฝ๊ฐ„๋งŒ ์กฐ์ •ํ•˜๋ฉด newlib์™€ avrlibc์˜ ์กฐํ•ฉ์ด ์ข‹์€ ๋ฒ”์šฉ ๊ตฌํ˜„์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…. ์ฒ˜์Œ์— ํ”„๋กœ์ ํŠธ๋Š” "newlib-nano"๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ Newlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ํ˜ผ๋™์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด PicoLibc๋กœ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ˜•ํƒœ์—์„œ Picolibc๋Š” ์ด๋ฏธ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์ฝ”๋“œ(์ด ์ฝ”๋“œ๋Š” ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์šฉ์œผ๋กœ ๋นŒ๋“œํ•  ๋•Œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ)๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ํ”„๋กœ์ ํŠธ ๋ผ์ด์„ผ์Šค์˜ ์ƒํ™ฉ์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ŠคํŠธ๋ฆผ ๊ตฌํ˜„์ด 'struct _reent'์—์„œ TLS ๋ฉ”์ปค๋‹ˆ์ฆ˜(์Šค๋ ˆ๋“œ ๋กœ์ปฌ ์ €์žฅ์†Œ). avrlibc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ์—์„œ ๋นŒ๋ฆฐ stdio์˜ ์ปดํŒฉํŠธ ๋ฒ„์ „์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค(ATmel ํŠน์ • ์–ด์…ˆ๋ธ”๋Ÿฌ ์‚ฝ์ž…์€ C๋กœ ๋‹ค์‹œ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค). ์–ด์…ˆ๋ธ”๋ฆฌ์—๋Š” Meson ํˆดํ‚ท์ด ์‚ฌ์šฉ๋˜์–ด newlib ์–ด์…ˆ๋ธ”๋ฆฌ ์Šคํฌ๋ฆฝํŠธ์— ์–ฝ๋งค์ด์ง€ ์•Š๊ณ  newlib์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ „์†ก์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ์ฝ”๋“œ(crt0)์˜ ๋‹จ์ˆœํ™”๋œ ๋ฒ„์ „์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰ ํŒŒ์ผ์— ์ฒจ๋ถ€ํ•˜๊ณ  ์ œ์–ด๊ฐ€ main() ํ•จ์ˆ˜๋กœ ์ „์†ก๋˜๊ธฐ ์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Picolibc ๋ฒ„์ „ 1.1์—์„œ:

  • ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋ณด์กฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค."์„ธ๋ฏธํ˜ธ์ŠคํŒ…"๋””๋ฒ„๊ฑฐ ๋˜๋Š” ์—๋ฎฌ๋ ˆ์ดํ„ฐ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ I/O ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์—ด๊ธฐ, ๋‹ซ๊ธฐ, ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ,tinystdio๋Š” fopen ๋ฐ fdopen ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•œ ํ‘œ์ค€ํ™”๋œ POSIX stdio I/O ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  stdin/stdout/stderr์„ POSIX ์ •์˜ ํŒŒ์ผ ์„ค๋ช…์ž์— ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
  • newlib ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ตœ๊ทผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋œ libm ์Šคํ… ํฌํ•จ fenv.h, ๋ถ€๋™ ์†Œ์ˆ˜์  ์ง€์›์ด ์—†๋Š” ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ARM ๋ฐ RISC-V ์‹œ์Šคํ…œ์šฉ picolibc๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "Hello world" ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ์˜ˆ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์‹คํ—˜ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ newlib, libm ๋ฐ mathfp ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€