- GCC 16 integreerib natiivse toe Picolibcile, mis on ülikerge libc C, mis on suunatud manussüsteemidele.
- Integratsioon lisab sihtmärke
*-picolibc-*ja uusi valikuid, näiteks--oslib=,--crt0=y--printf=. - Picolibc vähendab püsivara mahtu märkimisväärselt võrreldes Newlibi ja Newlib-naniga, mis on IoT ja servarakenduste jaoks võtmetähtsusega.
- GCC 16 ühendab selle toe kaasaegsete arhitektuuride ja vaikimisi C++20 täiustustega, tugevdades oma rolli manussüsteemide ökosüsteemis.

Saabumine GCC 16 koos Picolibci natiivse toega See tekitab päris palju elevust manustatud arendusmaailmSee pole lihtsalt sama vana kompilaatori "veel üks versioon", vaid oluline samm edasi palju kergemad ja rafineeritumad tööriistaketid mikrokontrollerite, IoT-seadmete ja servasüsteemide jaoks, kus iga bait loeb.
Selle sammu taga on veteranist arendaja Keith Packard, tuntud eelkõige oma töö eest X.Orgi kallalmis on aastaid reklaaminud Picolibci minimalistliku C-standardi teekina manussüsteemidele. Selle integreerimisega GCC 16-sse on lõpuks kadunud vajadus kohandatud paranduste, kummaliste konfiguratsioonide ja häkkimiste järele selle teeki linkimiseks. Picolibc-ist saab Pärsia lahe koostöönõukogu ökosüsteemis esmaklassiline kodanik.
Mis on Picolibc ja miks see on GCC 16-sse integreeritud?
Picolibc on ülikerge C-standarditeek Spetsiaalselt 32- ja 64-bitiste manussüsteemide jaoks loodud see sündis Newlibi ja AVR Libci koondumisest ja refaktoreerimisest selge eesmärgiga: minimeerida ressursitarbimist. ROM ja RAM ilma C-keele olulistest funktsioonidest loobumata.
Erinevalt teistest raskematest alternatiividest on Picolibc loodud nii, et Linker saab kasutamata koodi hõlpsalt ära visata.pakkudes väga täpset kontrolli selle üle, millised teeki osad tegelikult lõplikku binaarfaili satuvad. See on ideaalne mikrokontrolleritele, mille salvestusmahtu mõõdetakse mõne kilobaidiga ja iga täiendav koodiosa kujutab endast märkimisväärset investeeringut. lisakulud, tarbimine ja keerukus.
Seni on Picolibci kasutamine koos GCC-ga seotud tööriistakett peaaegu käsitsi ehitadaTeegi kompileerimine, süsteemi juurutamise timmimine, alglaadimisskriptide muutmine, paranduste rakendamine jne andsid võimsaid tulemusi, kuid paljusid meeskondi takistas hõõrdumine. GCC 16-ga muutub see stsenaarium radikaalselt, kuna Kompilaator sisaldab otsest ja ametlikku tuge. selle manustatud libc jaoks.
Peamine on see, et GCC 16 koodipuu sisaldab vajalikke muudatusi äratundmiseks tüüpi sihtmärgid *-picolibc-* ja konfiguratsioonivalik --with-picolibcSeega kompilaatori loomisel või eelnevalt loodud tööriistariba kasutamisel Picolibc-st saab tehase toetatav valik, ilma igasuguse isetegemiseta.
Picolibc integratsioon GCC 16-s: üksikasjad ja uued valikud
GCC 16 repositooriumiga liidetud parandus mitte ainult ei lisa Picolibci äratundmist alternatiivse libc-na: See tutvustab ka kompilaatorispetsiifilisi valikuid loodud selleks, et ära kasutada seda kerget keskkonda manussüsteemides.
Ühelt poolt saab GCC nüüd sujuvalt töötada stiili sihtmärgid *-picolibc-* (näiteks arm-none-picolibc-eabiLisaks on GCC kompileerimisel võimalik edastada --with-picolibc nii et konfiguraator valmistab keskkonna ette selle teeki peamise sihtmärgina, hallates süsteemi juurõigus, päised ja alglaadimisfailid akordid Picolibcile.
Lisaks sellele põhilisele integratsioonile pakub plaaster ka mitmeid uusi funktsioone väga huvitavad lisavõimalused Picolibci jaoks kompileerituna:
--oslib=See võimaldab teil valida erinevaid mooduleid, mis rakendavad liidest operatsioonisüsteemi või käituskeskkonnaga, mis on oluline, kui töötate palja metalliga. Kerge RTOS või simulaatorites.--crt0=: määrab C alglaadimisfaili (crt0) kasutamiseks, mis annab ruumi kohanda käivitusjärjestust igale plaadile, alglaadurile või initsialiseerimisnõuetele.--printf=pakub valikut täieliku rakendamise vahelprintfvõi lühendatud versioonid, näiteks Minimalistlikud versioonid, mis keskenduvad täisarvudele mis säästab märkimisväärselt programmi mälu.
See viimane variant muudab reaalsetes projektides sageli oluliselt: funktsioonide perekond printf See on tavaliselt kõige raskem osa libc-st. Võimalus valida vähendatud versioon, kus säilitatakse võib-olla ainult see, mis on vajalik UART-i põhiliste logide jaoks, võimaldab lõplikul binaarfailil olla palju kompaktsem, mis on väga odavate seadmete puhul ülioluline.
Mõned vood kasutavad ka makrosid ja lippe, näiteks -Dsystem-libc ja Picolibc-ga seotud sysroot-konfiguratsioonid, nii et kompilaator käsitleb seda teeki kui libc vaiketeostus ilma et peaks igale GCC kutsumisele kümneid lippe lisama.
Tee „libc mitmekesisuse” poole Pärsia lahe koostöönõukogus
Picolibci lisamine GCC 16-sse ei tulnud eikuskilt; sellele eelnes GCC projekti enda sees arutelu vajaduse üle Edendada raamatukogude mitmekesisust C ametlikult toetatud. Umbes aasta tagasi oli meililistides juba juttu erinevate, konkreetsetele kontekstidele kohandatud libside lubamisest ja Picolibc tundus selge kandidaadina manussüsteemide maailma jaoks.
Selle aja jooksul on Keith Packard läinud lihvida ja esitada plaastri järjestikused versioonid nimekirja juurde gcc-patchesIntegratsiooni kohandati vastavalt kompilaatori kvaliteedi- ja hooldatavuse standarditele. GCC hooldajatega peetud aruteludes on täpsustatud üksikasju, nagu sihtmärgi valik, tugifailide korraldus ja kohandatud suvandite kasutamine.
Selle koostööprotsessi tulemuseks on integratsioon, mis ei ole lihtne plaaster, vaid laiendus, mis on hästi kooskõlas GCC sisemise arhitektuurigaSee tugevdab „libc mitmekesisuse” ideed: nüüd lisaks tavapärastele kombinatsioonidele glibc, Newlib või uClibc-ga teatud keskkondades, Picolibc liitub nimekirjaga kerge ja jätkusuutliku alternatiivina GCC puu enda sees.
See lähenemisviis sobib väga hästi praeguste tööstustrendidega, kus arhitektuurid, näiteks RISC-V, uued ARMv9 profiilid ja spetsiaalsed SoC-d konkreetsete rakenduste jaoks. Modulaarse ja minimalistliku libc olemasolu lihtsustab sama kompilaatori kohandamist nii võimsa serveri kui ka vaid mõne kilobaidise välkmäluga sensorsõlmega.
Seos Newlibi, Newlib-nano ja teiste kergekaaluliste libcs-idega
Picolibci pakutava mõistmiseks on kasulik vaadata seda kontekstis võrreldes teiste klassikaliste valikutega. Newlib on olnud olemas juba aastaid. libc viide manussüsteemidele põhineb GCC-l ja sellest on tuletatud variandid, näiteks Newlib-nano, mille eesmärk on funktsionaalsuse kärpimise arvelt mõnevõrra suurust vähendada.
Picolibcil on sama päritolu, aga see rakendab agressiivsem ümberkujundamine, mis keskendub modulaarsuseleIdee pole mitte ainult Newlibi "veidi väiksemaks" muutmises, vaid ka selle ümberstruktureerimises nii, et tänapäevased linkerid saaksid kasutamata koodi palju täpsemalt eemaldada, maksimeerides kaasatud funktsionaalsuse ja hõivatud ruumi suhet.
Kogukonna analüüsi kohaselt (nt manustatud süsteemide arendusblogides avaldatud võrdlused) võib Picolibcile üleminek tähendada välkmälu kasutamise, binaarfailide suuruse, pinu ja kuhja märkimisväärne vähenemine võrreldes Newlibi ja selle nano-variandiga. Praktikas tähendab see võimalust mahutada samasse mikrokontrollerisse rohkem rakendusloogikat või minna üle väiksema mälumahuga mikrokontrollerile, vähendades seeläbi riistvarakulusid.
Samal ajal ei jää Picolibc projekt kinni põhitõdedesse: selle repositoorium näitab, kuidas tuge lisatakse 16-bitised sihtmärgid, POSIX-ühilduvuse täiustused ja mitmesugused täiustused, mis muudavad selle atraktiivseks ka vähem eksootiliste arhitektuuride jaoks: ARM Cortex-M, RISC-V, manustatud MIPS ja pikk jne.
Võrreldes teiste kergemate alternatiividega nagu dietlibc või mitmesugused nanolibid, valib Picolibc a tasakaal suuruse ja standarditele vastavuse vahel mis sobib eriti hästi projektidesse, kus on vaja järjepidevaid API-sid, intensiivset testimist ja samal ajal väga piiratud jalajälge.
Kuidas Picolibci manustatud töövoogudes kasutada
GCC 16 integratsioon tähendab püsivara arendaja igapäevatöös väga konkreetseid muutusi. Selle selgemaks mõistmiseks kujutame ette tüüpilist projekti ARM Cortex-M ristkompileerimisega arendusarvutist. Traditsiooniliselt kasutatakse selliseid tööriistakette nagu arm-none-eabi põhineb Newlibil või mikroprotsessori tootja patenteeritud SDK-del.
GCC 16 abil saate luua või alla laadida tööriistaketi, mis juba sisaldab sihtmärk arm-none-picolibc-eabiKompilaatori konfigureerimisel valikuga --with-picolibcKeskkond on nüüd valmis seda libc-d standardina kasutama koos selle päiste, süsteemijuurkasutaja ja sobivate alglaadimisfailidega.
Sealt edasi toimub kompileerimine uue eesliite abil, näiteks arm-none-picolibc-eabi-gcckoos tavapäraste optimeerimis- ja silumismärkidega. Kui soovite suurust veelgi täpsemalt reguleerida, saate kasutada valikut --printf= variandi valimiseks printf kergem kui see, mis projekti vajadustele vastab.
Keskkondades, mis kasutavad Make'i, CMake'i või muid ehitussüsteeme, piirdub muudatus tavaliselt järgmisega: tööriistaketi definitsiooni kohandamine: määrake uus eesliide, kohandage võib-olla mõningaid linkimisvalikuid ja kontrollige, kas käivitusskriptid (crt0) ja linkeri skriptifailid sobivad Picolibc organisatsiooniga. Paljudel juhtudel on see kohandus palju väiksem kui see, mis juba kaasneb üleminekuga tarnija SDK-lt „puhtale” GCC tööriistaketile.
See voog sillutab teed patenteeritud või suletud keskkondadest loobumiseks, erinevate mikrokontrolleriperede vahelise kaasaskantavuse saavutamiseks ja ... säilitamiseks. 100% avatud ja auditeeritav tööriistakett, midagi, mida üha enam hinnatakse sellistes sektorites nagu tööstus, meditsiin või autotööstus.
Mõju asjade internetile, servandmetöötlusele ja reguleeritud sektoritele
Selle integratsiooni ajastus ei ole juhuslik: see langeb kokku jõhkra laienemisega Asjade asjade seadmed ja servasüsteemid mis töötavad väga piiratud ressurssidega, sageli akutoitel ja massiliselt kasutusele võetud. Sellistel juhtudel võimaldab programmi mälu salvestamine lihtsalt kasutage odavamaid mikrokontrollereid ja vähendada märkimisväärselt ühikuhindu.
Püsivara suuruse vähendamine lihtsustab ka selliseid probleeme nagu OTA värskendusedKusjuures iga väiksem kilobait tähendab kiiremat edastust, väiksemat energiatarbimist ja ebastabiilsete võrkude vigade väiksemat tõenäosust. Picolibc, mis võimaldab GCC 16-ga kombineerituna palju kompaktsemaid binaarfaile, avaldab otsest mõju seda tüüpi toimingutele.
Reguleeritud tööstusharudes (tervishoid, autotööstus, raudteetööstus jne) on eelised samuti märgatavad. Kuigi LIBC ametlik sertifitseerimine nõuab spetsiifilisi tööriistu ja protsesse, on juurdepääsu omamine väike, modulaarne ja suhteliselt hõlpsasti auditeeritav teek See sillutab teed sertifitseeritud tööriistakettide või põhjalikele turvaülevaadetele allutatud tööriistakettide pakkumisele.
Samal ajal sobib see panus Picolibcile trendiga avatud silikoontööriistaketidnagu see on RISC-V ökosüsteemis. Nendes keskkondades pole avatud mitte ainult ISA, vaid ka kompilaator, libc ja ülejäänud tööriistakett on läbipaistvad ja kogukonna poolt hooldatud.
GCC 16, kaasaegsete arhitektuuride (ARMv9.6-A, RISC-V, x86 uued põlvkonnad, näiteks AMD Zen 6 või uued Inteli protsessorid) toe ja kergekaalulise libc-na Picolibc kombinatsioon tugevdab GNU kompilaatorit järgmiselt: uue nutiseadmete laine keskne tugisammasalates kantavatest seadmetest kuni lokaalse analüüsi võimalustega tööstusanduriteni.
GCC 16 staatus, muud uued funktsioonid ja toe küpsus
GCC 16 on kavandatud järgmiselt: kompilaatori põhiversioon selle tüüpilises väljalasketsüklisligikaudse avaldamisaknaga märtsi ja aprilli vahel, kui kõik läheb hooldajate jaoks plaanipäraselt. Kui arenduse viimasesse faasi (4. etapp) sisenemine oli kinnitatud, nihkus tähelepanu ainult sellele, dokumentatsioon ja regressioonikorrektsioon, lubamata uusi funktsioone, välja arvatud väga põhjendatud juhtudel.
Viimases aruandes mainiti, et mitu probleemi on veel lahendamata prioriteetsed regressioonid P1Need on kõige kriitilisemad vead. Kuni nende vigade arv ei jõua nulli või vastuvõetava tasemeni, ei genereerita GCC 16.1 esimesi väljalaskekandidaate. See distsipliin tagab, et Picolibci toetus saabub piisavalt küpses olekus et hakata seda päris projektides kasutama.
Lisaks Picolibci toele sisaldab GCC 16 hulga uusi funktsioone: sihtmärgi tugi Armv9.6-A, AMD Zen 6 arhitektuuri esialgne implementatsioon (tuvastatud kui Znver6) oma uute ISA-võimalustega, halduse täiustustega hallatud mälu AMD GPU-des, tugi järgmise põlvkonna Inteli protsessoritele, nagu Nova Lake ja Wildcat Lake, ning LTO (Link Time Optimization) vaikepartitsioonide arvu suurendamine, lisaks muudele täiustustele.
Keelelise poole pealt on üks nähtavamaid otsuseid see, et C++20-st saab vaikimisi standard kui muud pole täpsustatud. Algol 68 keelele on lisatud isegi uus kasutajaliides, mis laiendab GCC toetatud keelte loendit. Kõik see on ühendatud Veaparandused ja väiksemad optimeerimised jaotatud erinevate taustaprogrammide vahel.
Tervikuna võetuna pole GCC 16 lihtsalt "versioon, kuhu Picolibc on lisatud". See on tugev väljalase arhitektuurilise toe, C++ moderniseerimise ja praeguse riistvara võimaluste osas, kus kerge libc lisamine on osa laiemast pingutusest. laiem strateegia tänapäevaste vajadustega kohanemiseks arendusest nii lauaarvutites kui ka eelkõige manussüsteemides.
Tehnilised kogukonnad ja erialameedia on neid arenguid kajastanud: alates Picolibci toele ja "libc mitmekesisuse" ideele keskenduvatest artiklitest kuni uute arhitektuuride, näiteks AMD Zen 6, mõjude analüüsideni ja sotsiaalmeedias peetud aruteludeni. Kuidas kasutada GCC 16-t projektides alates retrokonsoolidest kuni tööstusjuhtimiseni.
Kõik viitab sellele, et GCC 16.1 viimase versiooni lähenedes ja esimeste integreeritud Picolibc-iga tööriistakettide stabiliseerudes näeme rohkem reaalse maailma kasutusjuhtumeid, võrdlevaid suuruse ja jõudluse teste ning praktilisi juhendeid. paljasmetalli, linkeriskriptid ja spetsiifilised käivitusjärjestused kasutades seda uut kombinatsiooni.
Picolibci toetus GCC 16-s tähistab pöördepunkti manustatud ökosüsteemis: See vähendab hõõrdumist drastiliselt, et võtta kasutusele ülikerge LIBC, avades ukse väiksematele ja hooldatavamatele püsivaradele. See on kooskõlas üldise trendiga avatud, konfigureeritavate tööriistakettide poole, mis on kohandatud erinevatele arhitektuuridele. Paljude arendusmeeskondade jaoks on mõttekas hakata GCC 16 harusid Picolibc-ga juba praegu testima, mõõta selle mõju suurusele, jõudlusele ja hooldatavusele ning hinnata nende integreerimist tulevastesse toodetesse.
Sisukord
- Mis on Picolibc ja miks see on GCC 16-sse integreeritud?
- Picolibc integratsioon GCC 16-s: üksikasjad ja uued valikud
- Tee „libc mitmekesisuse” poole Pärsia lahe koostöönõukogus
- Seos Newlibi, Newlib-nano ja teiste kergekaaluliste libcs-idega
- Kuidas Picolibci manustatud töövoogudes kasutada
- Mõju asjade internetile, servandmetöötlusele ja reguleeritud sektoritele
- GCC 16 staatus, muud uued funktsioonid ja toe küpsus