- GCC 16 integron mbështetje native për Picolibc, një libc C ultra të lehtë i orientuar drejt sistemeve të ngulitura.
- Integrimi shton objektiva
*-picolibc-*dhe opsione të reja si p.sh.--oslib=,--crt0=y--printf=. - Picolibc e zvogëlon ndjeshëm madhësinë e firmware-it krahasuar me Newlib dhe Newlib-nano, gjë që është thelbësore për aplikacionet IoT dhe edge.
- GCC 16 kombinon këtë mbështetje me përmirësime në arkitekturat moderne dhe C++20 si parazgjedhje, duke përforcuar rolin e tij në ekosistemin e ngulitur.

Ardhja e GCC 16 me mbështetje native për Picolibc Po shkakton mjaft entuziazëm në bota e zhvillimit të integruarNuk është thjesht "një version tjetër" i të njëjtit përpilues të vjetër, por një hap i rëndësishëm drejt zinxhirë mjetesh shumë më të lehtë dhe më të rafinuar për mikrokontrolluesit, pajisjet IoT dhe sistemet skajore ku çdo bajt llogaritet.
Pas këtij veprimi qëndron zhvilluesi veteran Keith Packard, i njohur më së miri për punën e tij në X.Orge cila ka promovuar Picolibc si një bibliotekë minimaliste standarde C për sisteme të ngulitura për vite me radhë. Me integrimin e saj në GCC 16, nevoja për patch-e të personalizuara, konfigurime të çuditshme dhe hile për të lidhur këtë bibliotekë më në fund ka mbaruar. Picolibc bëhet një qytetar i klasit të parë brenda ekosistemit të GCC-së.
Çfarë është Picolibc dhe pse është i integruar në GCC 16?
Picolibc është një bibliotekë standarde C ultra e lehtë I projektuar posaçërisht për sisteme të ngulitura 32-bit dhe 64-bit, ai lindi nga konvergjenca dhe rifaktorizimi i Newlib dhe AVR Libc, me një qëllim të qartë: të minimizojë konsumin e burimeve. ROM dhe RAM pa hequr dorë nga funksionet thelbësore të gjuhës C.
Ndryshe nga alternativat e tjera më të rënda, Picolibc është projektuar në mënyrë që Lidhësi mund ta hedhë lehtësisht kodin e papërdorur.duke ofruar kontroll shumë të imët mbi atë se cilat pjesë të bibliotekës përfundojnë në të vërtetë në skedarin binar përfundimtar. Kjo është ideale për mikrokontrolluesit ku hapësira e ruajtjes matet në disa kilobajt dhe çdo seksion shtesë i kodit përfaqëson një investim të konsiderueshëm. kosto shtesë, konsum dhe kompleksitet.
Deri më tani, përdorimi i Picolibc me GCC të përfshirë për të ndërtuar një zinxhir mjetesh pothuajse me dorëKompilimi i bibliotekës, rregullimi i sysroot, modifikimi i skripteve të nisjes, aplikimi i patch-eve etj., dhanë rezultate të fuqishme, por fërkimi i pengoi shumë ekipe. Me GCC 16, ky skenar ndryshon rrënjësisht, pasi Kompiluesi përfshin mbështetje të drejtpërdrejtë dhe zyrtare. për këtë libc të integruar.
Çelësi është që pema e kodit GCC 16 të përfshijë ndryshimet e nevojshme për të njohur objektiva të tipit *-picolibc-* dhe opsioni i konfigurimit --with-picolibcKështu, kur ndërtoni përpiluesin ose përdorni një zinxhir mjetesh të parapërgatitur, Picolibc bëhet një opsion i mbështetur nga fabrika, pa asnjë punë vetë përreth.
Integrimi i Picolibc në GCC 16: detaje dhe opsione të reja
Patch-i që është bashkuar në depon GCC 16 jo vetëm që shton njohjen e Picolibc si një libc alternative: Gjithashtu prezanton opsione specifike për përpiluesin i projektuar për të përfituar nga ky mjedis i lehtë në sistemet e ngulitura.
Nga njëra anë, GCC tani mund të punojë pa probleme me objektivat e stilit *-picolibc-* (për shembull, arm-none-picolibc-eabiPër më tepër, gjatë përpilimit të GCC-së është e mundur të kalohet --with-picolibc në mënyrë që konfiguruesi të përgatisë mjedisin me këtë bibliotekë si objektivin kryesor, duke menaxhuar sysroot, headers dhe boot files akorde për Picolibc.
Së bashku me atë integrim bazë, patch-i ekspozon një seri të opsione shtesë shumë interesante kur kompilohet për Picolibc:
--oslib=Ju lejon të zgjidhni module të ndryshme që zbatojnë ndërfaqen me sistemin operativ ose mjedisin e kohës së ekzekutimit, gjë që është thelbësore nëse punoni në bare metal, me RTOS i lehtë ose në simulatorë.--crt0=: specifikon skedarin e nisjes C (crt0) për t'u përdorur, gjë që lë hapësirë për përshtat sekuencën e nisjes për secilën kërkesë të bordit, ngarkuesit të nisjes ose inicializimit.--printf=ofron një zgjedhje midis një zbatimi të plotë tëprintfose versione të shkurtuara, për shembull versione minimaliste të fokusuara në numra të plotë të cilat kursejnë një sasi të konsiderueshme të memories së programit.
Ky opsion i fundit shpesh bën një ndryshim të madh në projektet reale: familja e funksioneve printf Zakonisht është pjesa më e rëndë nga libc. Të qenit në gjendje të zgjedhësh një version të reduktuar, ndoshta duke mbajtur vetëm atë që është e nevojshme për regjistrat bazë UART, lejon që binarja përfundimtare të jetë shumë më kompakte, diçka thelbësore në pajisjet me kosto shumë të ulët.
Disa rrjedha përdorin gjithashtu makro dhe flamuj si p.sh. -Dsystem-libc dhe konfigurimet e sysroot të shoqëruara me Picolibc, në mënyrë që kompiluesi ta konsiderojë këtë bibliotekë si implementimi i parazgjedhur i libc pa pasur nevojë të shtoni dhjetëra flamuj në secilën thirrje të GCC-së.
Rruga drejt "diversitetit libc" në GCC
Përfshirja e Picolibc në GCC 16 nuk erdhi nga hiçi; ajo u parapri nga një debat brenda vetë projektit GCC rreth nevojës për Promovoni diversitetin e bibliotekave C mbështetet zyrtarisht. Rreth një vit më parë, në listat e postimeve flitej tashmë për aktivizimin e librarive të ndryshme të përshtatura në kontekste specifike, dhe Picolibc u shfaq si një kandidat i qartë për botën e integruar.
Gjatë kësaj kohe, Keith Packard ka shkuar përsosni dhe dorëzoni versione të njëpasnjëshme të patch-it në listë gcc-patchesIntegrimi u përshtat për të përmbushur standardet e cilësisë dhe mirëmbajtjes së përpiluesit. Diskutimet me mirëmbajtësit e GCC kanë rafinuar detaje të tilla si përzgjedhja e objektivit, organizimi i skedarëve mbështetës dhe përdorimi i opsioneve të personalizuara.
Rezultati i këtij procesi bashkëpunues është një integrim që nuk është një patch i thjeshtë, por një zgjerim i përafruar mirë me arkitekturën e brendshme të GCC-sëKjo përforcon idenë e "diversitetit libc": tani, përveç kombinimeve të zakonshme me glibc, Newlib ose uClibc në mjedise të caktuara, Picolibc i bashkohet listës si një alternativë e lehtë dhe e qëndrueshme brenda vetë pemës së GCC-së.
Kjo qasje përshtatet shumë mirë me trendet aktuale të industrisë, ku arkitektura të tilla si RISC-V, profile të reja ARMv9 dhe SoC të specializuara për aplikacione specifike. Të kesh një libc modulare dhe minimaliste e bën më të lehtë për të njëjtin kompajler të përshtatet si me një server të fuqishëm ashtu edhe me një nyje sensorësh me vetëm disa kilobajt memorie flash.
Marrëdhënia me Newlib, Newlib-nano dhe libc-e të tjera të lehta
Për të kuptuar se çfarë ofron Picolibc, është e dobishme ta shohim atë në kontekst krahasuar me opsionet e tjera klasike. Newlib ka ekzistuar prej shumë vitesh. referenca libc për mjediset e ngulitura bazuar në GCC, dhe prej tij kanë nxjerrë variante të tilla si Newlib-nano, që synojnë të zvogëlojnë disi madhësinë me koston e shkurtimit të funksionaliteteve.
Picolibc ndan të njëjtën origjinë, por zbaton një një ridizajnim më agresiv i fokusuar në modularitetIdeja nuk është vetëm ta bëjmë Newlib-in "pak më të vogël", por ta ristrukturojmë atë në mënyrë që lidhësit modernë të mund të heqin kodin e papërdorur shumë më saktë, duke maksimizuar raportin midis funksionalitetit të përfshirë dhe hapësirës së zënë.
Sipas analizës së komunitetit (p.sh., krahasimet e publikuara në blogjet e zhvillimit të integruar), kalimi në Picolibc mund të nënkuptojë ulje të ndjeshme në përdorimin e flash-it, madhësinë binare, stivën dhe heap-in krahasuar me Newlib dhe variantin e tij nano. Në praktikë, kjo përkthehet në mundësinë për të përshtatur më shumë logjikë aplikacioni në të njëjtin mikrokontrollues, ose në uljen e nivelit në një mikrokontrollues me më pak memorie, duke ulur kështu kostot e harduerit.
Në të njëjtën kohë, projekti Picolibc nuk mbetet i bllokuar në bazat: depoja e tij tregon se si po shtohet mbështetja. Objektiva 16-bitëshe, përmirësime në përputhshmërinë POSIX dhe përmirësime të ndryshme që e bëjnë atë tërheqës edhe për arkitekturat më pak ekzotike: ARM Cortex-M, RISC-V, MIPS i integruar dhe një i gjatë etj.
Krahasuar me alternativa të tjera të lehta si dietlibc ose nanolib të ndryshëm, Picolibc zgjedh një ekuilibri midis madhësisë dhe pajtueshmërisë me standardet gjë që përshtatet veçanërisht mirë në projekte ku kërkohen API të qëndrueshme, testime intensive dhe, në të njëjtën kohë, një gjurmë shumë e përmbajtur.
Si ta shfrytëzoni Picolibc në një rrjedhë pune të integruar
Integrimi në GCC 16 përkthehet në ndryshime shumë konkrete në punën e përditshme të një zhvilluesi të firmware-it. Për ta parë këtë qartë, le të imagjinojmë një projekt tipik për ARM Cortex-M me kompilim të kryqëzuar nga një PC zhvillimi. Tradicionalisht, zinxhirët e mjeteve si arm-none-eabi bazuar në Newlib ose SDK të patentuara nga prodhuesi i mikroprocesorit.
Me GCC 16, mund të ndërtoni ose shkarkoni një zinxhir mjetesh që tashmë përfshin një objektiv arm-none-picolibc-eabiKur konfiguroni kompiluesin me opsionin --with-picolibcMjedisi tani është gati të përdorë këtë libc si standard, me kokat e tij, sysroot dhe skedarët e duhur të nisjes.
Nga aty, kompilimi bëhet duke përdorur parashtesën e re, për shembull arm-none-picolibc-eabi-gccsë bashku me flamujt e zakonshëm të optimizimit dhe debugging-ut. Nëse doni ta rregulloni madhësinë edhe më tej, mund të përdorni opsionin --printf= për të zgjedhur variantin e printf më të lehta se sa ato që plotësojnë nevojat e projektit.
Në mjediset që përdorin Make, CMake ose sisteme të tjera ndërtimi, ndryshimi zakonisht kufizohet në rregullo përkufizimin e zinxhirit të mjeteve: specifikoni prefiksin e ri, ndoshta përshtatni disa opsione lidhjeje dhe kontrolloni që skriptet e fillimit (crt0) dhe skedarët e skriptit të lidhësit përputhen me organizatën Picolibc. Në shumë raste, ky rregullim është shumë më i vogël se ai që përfshihet tashmë në kalimin nga një SDK i shitësit në një zinxhir mjetesh "të pastër" të GCC.
Kjo rrjedhë hap rrugën për braktisjen e mjediseve pronësore ose të mbyllura, duke fituar lëvizshmëri midis familjeve të ndryshme të mikrokontrolluesve dhe duke ruajtur një Zinxhir mjetesh 100% i hapur dhe i auditueshëm, diçka që vlerësohet gjithnjë e më shumë në sektorë të tillë si industria, mjekësia ose automobilat.
Ndikimi në IoT, informatikën në skaje dhe sektorët e rregulluar
Koha e këtij integrimi nuk është e rastësishme: ajo përkon me një zgjerim brutal të Pajisjet IoT dhe sistemet e skajit që funksionojnë me burime shumë të kufizuara, shpesh të mundësuara nga bateria dhe të vendosura në masë. Në këto lloj skenarësh, kursimi i memories së programit thjesht lejon, përdorni mikrokontrollues më të lirë dhe ulin ndjeshëm kostot për njësi.
Zvogëlimi i madhësisë së firmware-it thjeshton gjithashtu probleme të tilla si Përditësimet e OTA-sku çdo kilobajt më pak do të thotë transmetime më të shpejta, më pak konsum energjie dhe një probabilitet më të ulët gabimesh në rrjetet e paqëndrueshme. Picolibc, duke mundësuar binarë shumë më kompaktë kur kombinohet me GCC 16, ka një ndikim të drejtpërdrejtë në këto lloje operacionesh.
Në industritë e rregulluara (kujdesi shëndetësor, automobilistika, hekurudha, etj.), avantazhet janë gjithashtu të dukshme. Ndërsa certifikimi formal i një LIBC kërkon mjete dhe procese specifike, të kesh qasje në një bibliotekë e vogël, modulare dhe relativisht e lehtë për t’u audituar Kjo hap rrugën për ofrimin e zinxhirëve të çertifikuar të mjeteve ose atyre që i nënshtrohen rishikimeve të hollësishme të sigurisë.
Në të njëjtën kohë, ky bast për Picolibc përputhet me trendin drejt zinxhirë mjetesh prej silikoni të hapursiç është rasti në ekosistemin RISC-V. Në këto mjedise, jo vetëm që ISA është e hapur, por edhe kompiluesi, libc dhe pjesa tjetër e zinxhirit të mjeteve janë transparente dhe mirëmbahen nga komuniteti.
Kombinimi i GCC 16, mbështetjes për arkitekturat moderne (ARMv9.6-A, RISC-V, gjenerata të reja të x86 si AMD Zen 6 ose procesorë të rinj Intel) dhe Picolibc si një libc i lehtë forcon kompilatorin GNU si shtylla qendrore për një valë të re pajisjesh inteligjente, nga pajisjet e veshshme te sensorët industrialë me aftësi analize lokale.
Statusi i GCC 16, veçori të tjera të reja dhe pjekuria e mbështetjes
GCC 16 është planifikuar si versioni kryesor i përpiluesit në ciklin e tij tipik të lëshimitme një dritare të përafërt publikimi midis marsit dhe prillit nëse gjithçka shkon sipas planit për mirëmbajtësit. Pasi u konfirmua hyrja në fazën përfundimtare të zhvillimit (faza 4), fokusi u zhvendos vetëm te dokumentimi dhe korrigjimi i regresionit, pa pranuar tipare të reja përveç në raste shumë të justifikuara.
Raporti më i fundit përmendi se disa çështje mbeteshin për t'u zgjidhur regresionet prioritare P1Këto janë gabimet më kritike. Derisa numri i këtyre gabimeve të arrijë zero ose një nivel të pranueshëm, kandidatët e parë për versionin GCC 16.1 nuk do të gjenerohen. Kjo disiplinë siguron që Mbështetja për Picolibc arrin në një gjendje mjaftueshëm të pjekur për të filluar përdorimin e tij në projekte reale.
Përveç mbështetjes për Picolibc, GCC 16 përfshin një numër të mirë veçorish të reja: mbështetje për objektivin Armv9.6-A, implementimi fillestar për arkitekturën AMD Zen 6 (e identifikuar si Znver6) me aftësitë e saj të reja ISA, përmirësime në menaxhimin e memorie e menaxhuar në GPU-të AMD, mbështetje për procesorët Intel të gjeneratës së ardhshme si Nova Lake dhe Wildcat Lake, dhe një rritje në numrin e ndarjeve standarde në LTO (Optimizimi i Kohës së Lidhjes), ndër përmirësime të tjera.
Për sa i përket gjuhës, një nga vendimet më të dukshme është se C++20 bëhet standardi i parazgjedhur kur nuk specifikohet ndonjë gjuhë tjetër. Madje shtohet edhe një front-end i ri për gjuhën Algol 68, duke zgjeruar listën e gjuhëve të mbështetura nga GCC. E gjithë kjo kombinohet me Korrigjime të gabimeve dhe optimizime të vogla të shpërndara nëpër backend-e të ndryshme.
Në tërësi, GCC 16 nuk është vetëm "versioni ku përfshihet Picolibc". Është një version i fuqishëm për sa i përket mbështetjes arkitekturore, modernizimit të C++ dhe aftësive për harduerin aktual, ku shtimi i një libc të lehtë është pjesë e një përpjekjeje më të gjerë. strategji më të gjerë për t'u përshtatur me nevojat moderne të zhvillimit, si në desktop ashtu edhe, mbi të gjitha, në sistemet e ngulitura.
Komunitetet teknike dhe mediat e specializuara kanë qenë duke mbuluar këto zhvillime: nga artikuj të fokusuar në mbështetjen e Picolibc dhe idenë e "diversitetit libc" deri te analizat e implikimeve të arkitekturave të reja si AMD Zen 6, si dhe diskutimet në mediat sociale rreth... Si ta shfrytëzoni GCC 16 në projekte që variojnë nga konsolat retro deri te kontrolli industrial.
Gjithçka sugjeron që, ndërsa afrohet publikimi përfundimtar i GCC 16.1 dhe stabilizohen zinxhirët e parë të mjeteve me Picolibc të integruar, do të shohim më shumë raste përdorimi në botën reale, teste krahasuese të madhësisë dhe performancës, si dhe udhëzues praktikë mbi... bare-metal, skripte lidhëse dhe sekuenca specifike të nisjes duke përdorur këtë kombinim të ri.
Mbështetja e Picolibc në GCC 16 shënon një pikë kthese për ekosistemin e integruar: Zvogëlon në mënyrë drastike fërkimin duke përdorur një LIBC ultra të lehtë, duke hapur derën për firmware-e më të vogla dhe më të mirëmbajtura. Kjo përputhet me trendin e përgjithshëm drejt zinxhirëve të mjeteve të hapura dhe të konfigurueshme, të përshtatura për arkitektura të ndryshme. Për shumë ekipe zhvillimi, ia vlen të fillojnë testimin e degëve 16 të GCC me Picolibc tani, të matin ndikimin në madhësi, performancë dhe mirëmbajtje, dhe të vlerësojnë integrimin e tyre në produktet e ardhshme.
Përmbajtja
- Çfarë është Picolibc dhe pse është i integruar në GCC 16?
- Integrimi i Picolibc në GCC 16: detaje dhe opsione të reja
- Rruga drejt "diversitetit libc" në GCC
- Marrëdhënia me Newlib, Newlib-nano dhe libc-e të tjera të lehta
- Si ta shfrytëzoni Picolibc në një rrjedhë pune të integruar
- Ndikimi në IoT, informatikën në skaje dhe sektorët e rregulluar
- Statusi i GCC 16, veçori të tjera të reja dhe pjekuria e mbështetjes