- Isinasama ng GCC 16 ang katutubong suporta para sa Picolibc, isang ultra-lightweight libc C na nakatuon sa mga embedded system.
- Nagdaragdag ng mga target ang integrasyon
*-picolibc-*at mga bagong opsyon tulad ng--oslib=,--crt0=y--printf=. - Malaki ang nababawasan ng Picolibc sa laki ng firmware kumpara sa Newlib at Newlib-nano, na mahalaga para sa mga aplikasyon ng IoT at edge.
- Pinagsasama ng GCC 16 ang suportang ito sa mga pagpapabuti sa mga modernong arkitektura at C++20 bilang default, na nagpapatibay sa papel nito sa naka-embed na ecosystem.

Ang pagdating ng GCC 16 na may katutubong suporta para sa Picolibc Nagbubuo ito ng lubos na kaguluhan sa mundo ng naka-embed na pag-unladHindi lamang ito "isa pang bersyon" ng parehong lumang compiler, kundi isang mahalagang hakbang tungo sa mas magaan at mas pino na mga toolchain para sa mga microcontroller, IoT device, at edge system kung saan mahalaga ang bawat byte.
Ang nasa likod ng hakbang na ito ay ang beteranong developer Si Keith Packard, na kilala sa kanyang trabaho sa X.Orgna matagal nang nagtataguyod ng Picolibc bilang isang minimalist na C standard library para sa mga embedded system. Dahil sa integrasyon nito sa GCC 16, sa wakas ay tapos na ang pangangailangan para sa mga custom na patch, kakaibang mga configuration, at mga hack para i-link ang library na ito. Ang Picolibc ay nagiging isang first-class citizen sa loob ng GCC ecosystem.
Ano ang Picolibc at bakit ito isinama sa GCC 16?
Ang Picolibc ay isang ultralight na pamantayang aklatan ng C Dinisenyo para mismo sa 32-bit at 64-bit na mga naka-embed na sistema, ito ay isinilang mula sa pagsasama at refactoring ng Newlib at AVR Libc, na may malinaw na layunin: upang mabawasan ang pagkonsumo ng mapagkukunan. ROM at RAM nang hindi isinasantabi ang mga mahahalagang tungkulin ng wikang C.
Hindi tulad ng ibang mas mabibigat na alternatibo, ang Picolibc ay dinisenyo upang ang Madaling maitatapon ng linker ang hindi nagamit na code.nag-aalok ng napakapinong kontrol sa kung aling mga bahagi ng library ang talagang mapupunta sa huling binary. Ito ay mainam para sa mga microcontroller kung saan ang storage ay sinusukat sa ilang kilobytes at ang bawat dagdag na seksyon ng code ay kumakatawan sa isang malaking pamumuhunan. karagdagang gastos, pagkonsumo at pagiging kumplikado.
Hanggang ngayon, ang paggamit ng Picolibc kasama ang GCC ay kasangkot gumawa ng toolchain halos gamit ang kamayAng pag-compile ng library, pag-aayos ng sysroot, pagbabago ng mga boot script, paglalagay ng mga patch, atbp., ay nagbunga ng malalakas na resulta, ngunit ang alitan ay pumigil sa maraming team. Sa GCC 16, ang senaryo na ito ay lubhang nagbabago, dahil Kasama sa compiler ang direkta at opisyal na suporta. para sa naka-embed na libc na ito.
Ang susi ay isinasama ng GCC 16 code tree ang mga kinakailangang pagbabago upang makilala mga target ng uri *-picolibc-* at ang opsyon sa pag-configure --with-picolibcKaya, kapag binubuo ang compiler o gumagamit ng pre-built toolchain, Ang Picolibc ay nagiging opsyon na sinusuportahan ng pabrika, nang walang anumang DIY sa paligid.
Pagsasama ng Picolibc sa GCC 16: mga detalye at mga bagong opsyon
Ang patch na pinagsama sa GCC 16 repository ay hindi lamang nagdaragdag ng pagkilala sa Picolibc bilang isang alternatibong libc: Ipinakikilala rin nito ang mga opsyon na partikular sa compiler dinisenyo upang samantalahin ang magaan na kapaligirang ito sa mga naka-embed na system.
Sa isang banda, ang GCC ay maaari nang makipagtulungan nang walang kahirap-hirap sa mga layunin ng estilo *-picolibc-* (halimbawa, arm-none-picolibc-eabiBukod pa rito, kapag kino-compile ang GCC, posibleng ipasa ang --with-picolibc upang maihanda ng configurator ang kapaligiran gamit ang library na ito bilang pangunahing target, na pinamamahalaan sysroot, mga header at mga boot file mga chords sa Picolibc.
Kasama ng pangunahing integrasyong iyon, inilalantad ng patch ang isang serye ng napaka-interesante na mga karagdagang opsyon kapag naipon para sa Picolibc:
--oslib=Pinapayagan ka nitong pumili ng iba't ibang module na nagpapatupad ng interface sa operating system o runtime environment, na mahalaga kung nagtatrabaho ka sa bare metal, na may Banayad na RTOS o sa mga simulator.--crt0=: tinutukoy ang C boot file (crt0) na gamitin, na nagbibigay ng espasyo para sa iakma ang pagkakasunod-sunod ng boot sa bawat board, bootloader o mga kinakailangan sa pagsisimula.--printf=: nag-aalok ng pagpipilian sa pagitan ng isang buong implementasyon ngprintfo mga pinaikling bersyon, halimbawa mga minimalistang bersyon na nakatuon sa mga integer na nakakatipid ng malaking halaga ng memorya ng programa.
Ang huling opsyon na ito ay kadalasang nakakagawa ng malaking pagkakaiba sa mga totoong proyekto: ang pamilya ng mga tungkulin printf Kadalasan ito ang pinakamabigat na bahagi mula sa libc. Ang kakayahang pumili ng pinababang bersyon, marahil ay pinapanatili lamang ang kinakailangan para sa mga pangunahing UART log, ay nagbibigay-daan sa panghuling binary na maging mas siksik, isang bagay na mahalaga sa mga napakamurang device.
Gumagamit din ang ilang flow ng mga macro at flag tulad ng -Dsystem-libc at mga sysroot configuration na nauugnay sa Picolibc, upang maituring ng compiler ang library na ito bilang ang default na implementasyon ng libc nang hindi kinakailangang magdagdag ng dose-dosenang mga flag sa bawat pagtawag sa GCC.
Ang landas tungo sa "libc diversity" sa GCC
Ang pagsasama ng Picolibc sa GCC 16 ay hindi basta-basta nagmula; nauna ito sa isang debate sa loob mismo ng proyekto ng GCC tungkol sa pangangailangan para sa Itaguyod ang pagkakaiba-iba ng aklatan C opisyal na sinusuportahan. Mga isang taon na ang nakalilipas, nagkaroon na ng usap-usapan sa mga mailing list tungkol sa pagpapagana ng iba't ibang libc na inangkop sa mga partikular na konteksto, at ang Picolibc ay lumitaw bilang isang malinaw na kandidato para sa naka-embed na mundo.
Sa panahong ito, si Keith Packard ay umalis na pakinisin at isumite ang magkakasunod na bersyon ng patch sa listahan gcc-patchesInayos ang integrasyon upang matugunan ang mga pamantayan sa kalidad at pagpapanatili ng compiler. Pinino ng mga talakayan kasama ang mga tagapangalaga ng GCC ang mga detalye tulad ng pagpili ng target, organisasyon ng support file, at ang paggamit ng mga pasadyang opsyon.
Ang resulta ng prosesong ito ng kolaboratibong pagtutulungan ay isang integrasyon na hindi isang simpleng patch, kundi isang ekstensyong naaayon sa panloob na arkitektura ng GCCPinatitibay nito ang ideya ng "libc diversity": ngayon, bilang karagdagan sa karaniwang mga kumbinasyon sa glibc, Newlib o uClibc sa ilang partikular na kapaligiran, Kasama sa listahan ang Picolibc bilang isang magaan at napapanatiling alternatibo sa loob mismo ng puno ng GCC.
Ang pamamaraang ito ay lubos na akma sa kasalukuyang mga uso sa industriya, kung saan ang mga arkitektura tulad ng RISC-V, mga bagong profile ng ARMv9 at mga espesyalisadong SoC para sa mga partikular na aplikasyon. Ang pagkakaroon ng modular at minimalist na libc ay ginagawang mas madali para sa parehong compiler na umangkop sa parehong malakas na server at isang sensor node na may ilang kilobytes lamang ng flash memory.
Relasyon sa Newlib, Newlib-nano at iba pang magaan na libc
Para maunawaan ang mga handog ng Picolibc, makakatulong na tingnan ito sa konteksto kumpara sa iba pang mga klasikong opsyon. Matagal nang ginagamit ang Newlib. ang sanggunian ng libc para sa mga naka-embed na kapaligiran batay sa GCC, at mula rito ay nagmula ang mga variant tulad ng Newlib-nano, na naglalayong bawasan nang kaunti ang laki kapalit ng pagputol ng mga functionality.
Ang Picolibc ay may parehong pinagmulan, ngunit may isang mas agresibong muling pagdisenyo na nakatuon sa modularityAng ideya ay hindi lamang para gawing "medyo mas maliit" ang Newlib, kundi para muling buuin ito upang mas tumpak na maalis ng mga modernong linker ang hindi nagamit na code, na nagpapalaki sa ratio sa pagitan ng kasama na functionality at espasyong okupado.
Ayon sa pagsusuri ng komunidad (hal., mga paghahambing na inilathala sa mga naka-embed na blog sa pag-unlad), ang paglipat sa Picolibc ay maaaring mangahulugan ng mga makabuluhang pagbawas sa paggamit ng flash, laki ng binary, stack at heap kumpara sa Newlib at sa nano variant nito. Sa pagsasagawa, isinasalin ito sa kakayahang magkasya ng mas maraming application logic sa parehong microcontroller, o pag-downgrade sa isang microcontroller na may mas kaunting memorya, kaya nababawasan ang mga gastos sa hardware.
Kasabay nito, ang proyektong Picolibc ay hindi nananatiling nakakulong sa mga pangunahing kaalaman: ipinapakita ng imbakan nito kung paano idinaragdag ang suporta sa 16-bit na mga target, mga pagpapabuti sa pagiging tugma ng POSIX at iba't ibang mga pagpipino na ginagawa itong kaakit-akit din para sa mga hindi gaanong kakaibang arkitektura: ARM Cortex-M, RISC-V, naka-embed na MIPS at iba pa.
Kung ikukumpara sa ibang mga alternatibong magaan tulad ng dietlibc o iba't ibang nanolib, pinipili ng Picolibc ang isang balanse sa pagitan ng laki at pagsunod sa mga pamantayan na akmang-akma lalo na sa mga proyekto kung saan kinakailangan ang mga pare-parehong API, masinsinang pagsubok at, kasabay nito, isang napaka-konkretong bakas ng paa.
Paano gamitin ang Picolibc sa isang naka-embed na workflow
Ang integrasyon sa GCC 16 ay isinasalin sa mga konkretong pagbabago sa pang-araw-araw na gawain ng isang firmware developer. Para makita ito nang malinaw, isipin natin ang isang tipikal na proyekto para sa ARM Cortex-M na may cross-compilation mula sa isang development PC. Ayon sa kaugalian, ang mga toolchain tulad ng arm-none-eabi batay sa Newlib o mga proprietary SDK mula sa tagagawa ng microprocessor.
Gamit ang GCC 16, maaari kang bumuo o mag-download ng toolchain na mayroon nang isang target arm-none-picolibc-eabiKapag kino-configure ang compiler gamit ang opsyong --with-picolibcHanda na ngayong gamitin ang libc na ito bilang pamantayan, kasama ang mga header, sysroot, at mga naaangkop na boot file nito.
Mula roon, ang compilation ay ginagawa gamit ang bagong prefix, halimbawa arm-none-picolibc-eabi-gcckasama ang karaniwang mga flag ng pag-optimize at pag-debug. Kung gusto mong mas pahusayin pa ang laki, maaari mong gamitin ang opsyong --printf= para piliin ang variant ng printf mas magaan kaysa sa nakakatugon sa mga pangangailangan ng proyekto.
Sa mga kapaligirang gumagamit ng Make, CMake, o iba pang mga sistema ng pagbuo, ang pagbabago ay karaniwang limitado sa ayusin ang kahulugan ng toolchain: tukuyin ang bagong prefix, marahil ay iakma ang ilang mga opsyon sa pag-link at suriin na ang mga startup script (crt0) at ang mga linker script file ay umaangkop sa organisasyon ng Picolibc. Sa maraming pagkakataon, ang pagsasaayos na ito ay mas maliit kaysa sa kung ano ang kasama na sa paglipat mula sa isang vendor SDK patungo sa isang "purong" GCC toolchain.
Ang daloy na ito ay nagbubukas ng daan para sa pag-abandona sa mga proprietary o closed environment, pagkakaroon ng portability sa pagitan ng iba't ibang pamilya ng microcontroller, at pagpapanatili ng isang 100% bukas at maaaring pakinggan na toolchain, isang bagay na lalong pinahahalagahan sa mga sektor tulad ng industriya, medisina o automotive.
Epekto sa IoT, edge computing at mga regulated na sektor
Ang tiyempo ng integrasyong ito ay hindi nagkataon: kasabay ito ng isang brutal na paglawak ng Mga IoT device at edge system na gumagana gamit ang limitadong mga mapagkukunan, kadalasang pinapagana ng baterya at malawakang ginagamit. Sa ganitong uri ng mga senaryo, ang pag-save ng memorya ng programa ay nagbibigay-daan lamang, gumamit ng mas murang mga microcontroller at makabuluhang bawasan ang mga gastos sa yunit.
Pinapasimple rin ng pagbabawas ng laki ng firmware ang mga isyu tulad ng Mga update sa OTAkung saan ang bawat kilobyte na mas kaunti ay nangangahulugan ng mas mabilis na mga transmisyon, mas kaunting pagkonsumo ng enerhiya, at mas mababang posibilidad ng mga error sa mga hindi matatag na network. Ang Picolibc, sa pamamagitan ng pagpapagana ng mas compact na mga binary kapag isinama sa GCC 16, ay may direktang epekto sa mga ganitong uri ng operasyon.
Sa mga regulated na industriya (pangangalaga sa kalusugan, automotive, riles, atbp.), kapansin-pansin din ang mga bentahe. Bagama't ang pormal na sertipikasyon ng isang LIBC ay nangangailangan ng mga partikular na kagamitan at proseso, ang pagkakaroon ng access sa isang maliit, modular at medyo madaling i-audit na library Nagbubukas ito ng daan para sa pag-aalok ng mga sertipikadong toolchain o iyong mga sumailalim sa masusing pagsusuri sa seguridad.
Kasabay nito, ang taya na ito sa Picolibc ay umaayon sa trend patungo sa bukas na mga toolchain ng silikongaya ng kaso sa RISC-V ecosystem. Sa mga kapaligirang ito, hindi lamang bukas ang ISA, kundi pati na rin ang compiler, ang libc, at ang iba pang bahagi ng toolchain ay transparent din at pinapanatili ng komunidad.
Ang kombinasyon ng GCC 16, suporta para sa mga modernong arkitektura (ARMv9.6-A, RISC-V, mga bagong henerasyon ng x86 tulad ng AMD Zen 6 o mga bagong Intel processor) at Picolibc bilang isang magaan na libc ay nagpapalakas sa GNU compiler bilang sentral na haligi para sa isang bagong alon ng mga smart device, mula sa mga wearable hanggang sa mga industrial sensor na may mga kakayahan sa lokal na pagsusuri.
Katayuan ng GCC 16, iba pang mga bagong tampok at kapanahunan ng suporta
Ang GCC 16 ay pinaplano bilang pangunahing bersyon ng compiler sa karaniwang siklo ng paglabas nitona may tinatayang palugit ng paglabas sa pagitan ng Marso at Abril kung ang lahat ay magiging ayon sa plano para sa mga tagapangalaga. Nang makumpirma ang pagpasok sa huling yugto ng pag-unlad (yugto 4), ang pokus ay lumipat lamang sa dokumentasyon at pagwawasto ng regresyon, nang hindi tinatanggap ang mga bagong tampok maliban sa mga kasong lubos na makatwiran.
Binanggit sa pinakahuling ulat na may ilang isyu pa ring kailangang lutasin mga regresyon ng prayoridad na P1Ito ang mga pinakamahalaga at pinaka-kritikal na bug. Hanggang sa ang bilang ng mga bug na ito ay umabot sa zero o sa isang katanggap-tanggap na antas, ang mga unang kandidato para sa paglabas ng GCC 16.1 ay hindi mabubuo. Tinitiyak ng disiplinang ito na ang suporta para sa Picolibc ay dumating sa isang sapat na ganap na estado para simulan itong gamitin sa mga totoong proyekto.
Bukod sa suporta ng Picolibc, isinasama ng GCC 16 ang maraming bagong tampok: suporta para sa target Armv9.6-A, paunang implementasyon para sa arkitektura ng AMD Zen 6 (kinilala bilang Znver6) gamit ang mga bagong kakayahan nito sa ISA, mga pagpapabuti sa pamamahala ng pinamamahalaang memorya sa mga AMD GPU, suporta para sa mga susunod na henerasyon ng mga Intel processor tulad ng Nova Lake at Wildcat Lake, at pagtaas sa bilang ng mga default na partisyon sa LTO (Link Time Optimization), bukod sa iba pang mga pagpapabuti.
Sa usapin ng wika, isa sa mga pinakanakikitang desisyon ay ang Ang C++20 ay nagiging default na pamantayan kapag walang ibang tinukoy. Isang bagong front-end para sa wikang Algol 68 ang idinagdag, na nagpapalawak sa listahan ng mga wikang sinusuportahan ng GCC. Ang lahat ng ito ay pinagsama sa Mga pag-aayos ng bug at mga menor de edad na pag-optimize ipinamamahagi sa iba't ibang backend.
Sa kabuuan, ang GCC 16 ay hindi lamang "ang bersyon kung saan kasama ang Picolibc." Ito ay isang malakas na bersyon sa mga tuntunin ng suporta sa arkitektura, modernisasyon ng C++, at mga kakayahan para sa kasalukuyang hardware, kung saan ang pagdaragdag ng isang magaan na libc ay bahagi ng isang mas malawak na pagsisikap. mas malawak na estratehiya sa pag-angkop sa mga modernong pangangailangan ng pag-develop, kapwa sa desktop at, higit sa lahat, sa mga embedded system.
Ang mga teknikal na komunidad at espesyalisadong media ay nagbabalita tungkol sa mga pag-unlad na ito: mula sa mga artikulong nakatuon sa suporta ng Picolibc at sa ideya ng "libc diversity" hanggang sa mga pagsusuri sa mga implikasyon ng mga bagong arkitektura tulad ng AMD Zen 6, pati na rin ang mga talakayan sa social media tungkol sa... Paano gamitin ang GCC 16 sa mga proyekto mula sa mga retro console hanggang sa industrial control.
Ipinahihiwatig ng lahat na, habang papalapit ang pinal na paglabas ng GCC 16.1 at ang mga unang toolchain na may integrated na Picolibc ay nagiging matatag, makakakita tayo ng mas maraming mga kaso ng paggamit sa totoong mundo, mga pagsubok sa paghahambing ng laki at pagganap, at mga praktikal na gabay sa bare-metal, mga script ng linker, at mga partikular na boot sequence gamit ang bagong kombinasyong ito.
Ang suporta ng Picolibc sa GCC 16 ay nagmamarka ng isang mahalagang punto para sa naka-embed na ecosystem: Malaki ang nababawasan nitong friction dahil sa paggamit ng ultra-lightweight na LIBC, na nagbubukas ng daan para sa mas maliliit at mas madaling mapanatiling firmware. Ito ay naaayon sa pangkalahatang kalakaran patungo sa bukas at maaaring i-configure na mga toolchain na iniangkop sa magkakaibang arkitektura. Para sa maraming development team, mahalagang simulan ang pagsubok sa mga sangay ng GCC 16 gamit ang Picolibc ngayon, sukatin ang epekto sa laki, pagganap, at pagpapanatili, at suriin ang kanilang integrasyon sa mga paparating na produkto.
Talaan ng nilalaman
- Ano ang Picolibc at bakit ito isinama sa GCC 16?
- Pagsasama ng Picolibc sa GCC 16: mga detalye at mga bagong opsyon
- Ang landas tungo sa "libc diversity" sa GCC
- Relasyon sa Newlib, Newlib-nano at iba pang magaan na libc
- Paano gamitin ang Picolibc sa isang naka-embed na workflow
- Epekto sa IoT, edge computing at mga regulated na sektor
- Katayuan ng GCC 16, iba pang mga bagong tampok at kapanahunan ng suporta