Picolibc-tuki GCC 16:ssa sulautetuille järjestelmille

Viimeisin päivitys: 19 tammikuu 2026
Kirjoittaja: TecnoDigital
  • GCC 16 sisältää natiivin tuen Picolibcille, joka on erittäin kevyt libc C -ohjelmointikieli sulautettuihin järjestelmiin.
  • Integraatio lisää tavoitteita *-picolibc-* ja uusia vaihtoehtoja, kuten --oslib=, --crt0= y --printf=.
  • Picolibc pienentää merkittävästi laiteohjelmiston kokoa verrattuna Newlibiin ja Newlib-nanoon, mikä on avainasemassa IoT- ja reunasovelluksissa.
  • GCC 16 yhdistää tämän tuen nykyaikaisten arkkitehtuurien ja oletusarvoisesti C++20:n parannuksiin, mikä vahvistaa sen roolia sulautetussa ekosysteemissä.

Picolibc-tuki GCC 16:ssa sulautetuille järjestelmille

Saapuminen GCC 16 ja natiivi tuki Picolibc:lle Se herättää melkoisesti innostusta sulautetun kehityksen maailmaSe ei ole vain "toinen versio" samasta vanhasta kääntäjästä, vaan tärkeä askel kohti paljon kevyemmät ja hienostuneemmat työkaluketjut mikrokontrollereille, IoT-laitteille ja reunajärjestelmille, joissa jokainen tavu on tärkeä.

Tämän siirron takana on kokenut kehittäjä Keith Packard, joka tunnetaan parhaiten työstään X.Orgin parissajoka on mainostanut Picolibcia minimalistisena C-standardikirjastona sulautetuille järjestelmille jo vuosia. Sen integroinnin myötä GCC 16:een ei enää tarvita mukautettuja korjauksia, outoja konfiguraatioita ja hakkerointeja tämän kirjaston linkittämiseksi. Picolibcista tulee ensiluokkainen kansalainen GCC-ekosysteemissä.

Mikä on Picolibc ja miksi se on integroitu GCC 16:een?

Picolibc on erittäin kevyt C-standardikirjasto Se on suunniteltu erityisesti 32- ja 64-bittisille sulautetuille järjestelmille, ja se syntyi Newlibin ja AVR Libcin konvergenssista ja uudelleenjärjestelystä selkeällä tavoitteella: resurssien kulutuksen minimointi. ROM ja RAM luopumatta C-kielen olennaisista toiminnoista.

Toisin kuin muut raskaammat vaihtoehdot, Picolibc on suunniteltu siten, että Linkitin voi helposti hylätä käyttämättömän koodin.tarjoaa erittäin tarkan hallinnan siihen, mitkä kirjaston osat itse asiassa päätyvät lopulliseen binääritiedostoon. Tämä on ihanteellista mikrokontrollereille, joissa tallennustila mitataan muutamassa kilotavussa ja jokainen ylimääräinen koodin osa edustaa merkittävää investointia. lisäkustannukset, kulutus ja monimutkaisuus.

Tähän asti Picolibcin käyttö GCC:n kanssa on ollut työkaluketjun rakentaminen lähes käsinKirjaston kääntäminen, sysrootin hienosäätö, käynnistysskriptien muokkaaminen, korjauspäivitysten asentaminen jne. tuottivat tehokkaita tuloksia, mutta kitka hidasti monia tiimejä. GCC 16:n myötä tämä tilanne muuttuu radikaalisti, sillä Kääntäjä sisältää suoraa ja virallista tukea. tälle upotetulle libc:lle.

Olennaista on, että GCC 16 -koodipuu sisältää tarvittavat muutokset tunnistaakseen tyyppisiä kohteita *-picolibc-* ja määritysvaihtoehto --with-picolibcNäin ollen kääntäjää rakennettaessa tai valmiiksi rakennettua työkaluketjua käytettäessä Picolibcistä tulee tehtaan tukema vaihtoehto, ilman mitään tee-se-itse-järjestelyjä.

Picolibc-integraatio GCC 16:ssa: yksityiskohdat ja uudet vaihtoehdot

GCC 16 -arkistoon yhdistetty korjaustiedosto ei ainoastaan ​​lisää Picolibcin tunnistusta vaihtoehtoisena libc:nä: Se esittelee myös kääntäjäkohtaisia ​​vaihtoehtoja suunniteltu hyödyntämään tätä kevyttä ympäristöä sulautetuissa järjestelmissä.

Toisaalta GCC voi nyt toimia saumattomasti tyylin tavoitteet *-picolibc-* (esimerkiksi arm-none-picolibc-eabiLisäksi GCC:tä käännettäessä on mahdollista välittää --with-picolibc jotta konfiguraattori valmistelee ympäristön, jossa tämä kirjasto on pääasiallinen kohde, ja hallitsee sysroot, otsikot ja käynnistystiedostot sointuja Picolibc:lle.

Perusintegraation ohella korjaustiedosto paljastaa sarjan erittäin mielenkiintoisia lisävaihtoehtoja kun se käännetään Picolibc:lle:

  • --oslib=Sen avulla voit valita eri moduuleja, jotka toteuttavat käyttöjärjestelmän tai suoritusympäristön rajapinnan, mikä on tärkeää, jos työskentelet paljaalla metallilla. Kevyt RTOS tai simulaattoreissa.
  • --crt0=: määrittää C-käynnistystiedoston (crt0) käytettäväksi, mikä antaa tilaa mukauta käynnistysjärjestystä kullekin emolevylle, käynnistyslataimelle tai alustusvaatimuksille.
  • --printf=tarjoaa valinnanvaraa täyden toteutuksen välillä printf tai lyhennettyjä versioita, esim. minimalistiset versiot, jotka keskittyvät kokonaislukuihin mikä säästää merkittävästi ohjelmamuistia.
  Kaikki metaohjelmoinnista: käytännön esimerkkejä ja käyttötapoja

Tämä viimeinen vaihtoehto tekee usein suuren eron todellisissa projekteissa: funktioiden perhe printf Se on yleensä raskain osa libc:stä. Mahdollisuus valita supistettu versio, jossa voidaan säilyttää ehkä vain perus-UART-lokien kannalta välttämättömät tiedot, mahdollistaa lopullisen binääritiedoston paljon kompaktimman version, mikä on elintärkeää erittäin edullisissa laitteissa.

Jotkin työnkulut käyttävät myös makroja ja lippuja, kuten -Dsystem-libc ja Picolibc:hen liittyvät sysroot-määritykset, jotta kääntäjä pitää tätä kirjastoa libc:n oletustoteutus ilman, että jokaiseen GCC-kutsuun tarvitsee lisätä kymmeniä lippuja.

Polku kohti "libc-diversiteettiä" GCC:ssä

Picolibcin sisällyttäminen GCC 16:een ei tullut tyhjästä; sitä edelsi keskustelu GCC-projektin sisällä sen tarpeesta Edistä kirjastojen monimuotoisuutta C virallisesti tuettu. Noin vuosi sitten postituslistoilla keskusteltiin jo erilaisten, tiettyihin konteksteihin mukautettujen libcs-kirjastojen mahdollistamisesta, ja Picolibc vaikutti selkeältä ehdokkaalta sulautettujen järjestelmien maailmaan.

Tänä aikana Keith Packard on lähtenyt kiillota ja lähetä korjauspäivityksen peräkkäiset versiot listalle gcc-patchesIntegraatiota säädettiin vastaamaan kääntäjän laatu- ja ylläpidettävyysstandardeja. Keskusteluissa GCC:n ylläpitäjien kanssa on tarkennettu yksityiskohtia, kuten kohteiden valintaa, tukitiedostojen organisointia ja mukautettujen asetusten käyttöä.

Tämän yhteistyöprosessin tuloksena syntyy integraatio, joka ei ole yksinkertainen korjaustiedosto, vaan laajennus, joka on hyvin linjassa GCC:n sisäisen arkkitehtuurin kanssaTämä vahvistaa ajatusta "libc-monimuotoisuudesta": nyt tavanomaisten glibc-, Newlib- tai uClibc-yhdistelmien lisäksi tietyissä ympäristöissä, Picolibc liittyy listalle kevyenä ja kestävänä vaihtoehtona itse GCC-puun sisällä.

Tämä lähestymistapa sopii erittäin hyvin alan nykyisiin trendeihin, joissa arkkitehtuurit, kuten RISC-V, uudet ARMv9-profiilit ja erikoistuneet SoC-piirit tiettyihin sovelluksiin. Modulaarinen ja minimalistinen libc helpottaa saman kääntäjän mukautumista sekä tehokkaaseen palvelimeen että anturisolmuun, jossa on vain muutama kilotavu flash-muistia.

Suhde Newlibiin, Newlib-nanoon ja muihin kevyisiin libcs-järjestelmiin

Ymmärtääkseen, mitä Picolibc tuo pöytään, on hyödyllistä tarkastella sitä kontekstissa verrattuna muihin klassisiin vaihtoehtoihin. Newlib on ollut olemassa jo vuosia. libc-viite sulautettuihin ympäristöihin perustuu GCC:hen, ja siitä on johdettu variantteja, kuten Newlib-nano, joiden tarkoituksena on pienentää kokoa jonkin verran toiminnallisuuksien karsimisen kustannuksella.

Picolibcillä on sama alkuperä, mutta se soveltaa aggressiivisempi uudelleensuunnittelu, joka keskittyy modulaarisuuteenAjatuksena ei ole vain tehdä Newlibistä "hieman pienempi", vaan sen uudelleenjärjestely siten, että nykyaikaiset linkittäjät voivat poistaa käyttämätöntä koodia paljon tarkemmin, maksimoiden sisällytettyjen toimintojen ja käytetyn tilan välisen suhteen.

Yhteisöanalyysin (esim. sulautettujen järjestelmien kehitysblogeissa julkaistujen vertailujen) mukaan siirtyminen Picolibciin voisi tarkoittaa Merkittäviä vähennyksiä flash-muistin käytössä, binäärikoossa, pino- ja kekotiedostoissa verrattuna Newlibiin ja sen nano-varianttiin. Käytännössä tämä tarkoittaa, että samaan mikrokontrolleriin voidaan sovittaa enemmän sovelluslogiikkaa tai siirtyä mikrokontrolleriin, jossa on vähemmän muistia, mikä vähentää laitteistokustannuksia.

Samaan aikaan Picolibc-projekti ei jumiudu perusasioihin: sen repositorio näyttää, miten tukea lisätään 16-bittiset kohteet, parannuksia POSIX-yhteensopivuuteen ja useita parannuksia, jotka tekevät siitä houkuttelevan myös vähemmän eksoottisille arkkitehtuureille: ARM Cortex-M, RISC-V, sulautetut MIPS ja pitkä jne.

Verrattuna muihin kevyisiin vaihtoehtoihin, kuten dietlibciin tai erilaisiin nanolibeihin, Picolibc valitsee a:n tasapaino koon ja standardien noudattamisen välillä mikä sopii erityisen hyvin projekteihin, joissa vaaditaan yhdenmukaisia ​​API-rajapintoja, intensiivistä testausta ja samalla erittäin pientä jalanjälkeä.

  Mikä on Mooren laki: 50 vuotta teknologista innovaatiota

Picolibcin hyödyntäminen sulautetussa työnkulussa

GCC 16 -integraatio tarkoittaa hyvin konkreettisia muutoksia laiteohjelmistokehittäjän päivittäisessä työssä. Havainnollistaaksemme tätä kuvitellaan tyypillinen projekti, jonka ARM Cortex-M ristiinkääntämisellä kehitystietokoneelta. Perinteisesti työkaluketjut, kuten arm-none-eabi perustuu Newlibiin tai mikroprosessorivalmistajan omiin SDK-paketteihin.

GCC 16:n avulla voit rakentaa tai ladata työkaluketjun, joka sisältää jo kohde arm-none-picolibc-eabiKun kääntäjää konfiguroidaan vaihtoehdolla --with-picolibcYmpäristö on nyt valmis käyttämään tätä libc:tä standardina, sen otsikoineen, sysroot-tiedostoineen ja asianmukaisine käynnistystiedostoineen.

Siitä eteenpäin käännös tehdään käyttämällä uutta etuliitettä, esimerkiksi arm-none-picolibc-eabi-gcctavallisten optimointi- ja virheenkorjauslippujen ohella. Jos haluat hienosäätää kokoa entisestään, voit käyttää vaihtoehtoa --printf= valitaksesi variantin printf kevyempi kuin mikä vastaa projektin tarpeita.

Make-, CMake- tai muita käännösjärjestelmiä käyttävissä ympäristöissä muutos rajoittuu yleensä seuraaviin: säädä työkaluketjun määritelmää: määritä uusi etuliite, mukauta ehkä joitakin linkitysasetuksia ja tarkista, että käynnistysskriptit (crt0) ja linkitysskriptitiedostot sopivat Picolibc-organisaatioon. Monissa tapauksissa tämä muutos on paljon pienempi kuin mitä jo tapahtuu siirryttäessä toimittajan SDK:sta "puhtaaseen" GCC-työkaluketjuun.

Tämä työnkulku tasoittaa tietä suljetuista tai suljetuista ympäristöistä luopumiselle, siirrettävyyden saavuttamiselle eri mikrokontrolleriperheiden välillä ja ... 100 % avoin ja auditoitava työkaluketju, jota arvostetaan yhä enemmän esimerkiksi teollisuudessa, lääketieteessä tai autoteollisuudessa.

Vaikutus esineiden esineiden verkkoon (IoT), reunalaskentaan ja säänneltyihin aloihin

Tämän integraation ajoitus ei ole sattumanvarainen: se on yksiin raa'an laajentumisen kanssa IoT-laitteet ja reunajärjestelmät jotka toimivat hyvin rajallisilla resursseilla, usein akkukäyttöisinä ja niitä käytetään massakäytössä. Tällaisissa tilanteissa ohjelmamuistin säästäminen yksinkertaisesti mahdollistaa käytä halvempia mikrokontrollereita ja alentaa merkittävästi yksikkökustannuksia.

Laiteohjelmiston koon pienentäminen yksinkertaistaa myös ongelmia, kuten OTA-päivityksetjossa jokainen kilotavu vähemmän tarkoittaa nopeampia tiedonsiirtoja, pienempää energiankulutusta ja pienempää virheiden todennäköisyyttä epävakaissa verkoissa. Picolibc, joka mahdollistaa paljon kompaktimpia binääritiedostoja yhdistettynä GCC 16:een, vaikuttaa suoraan tämän tyyppisiin toimintoihin.

Säännellyillä toimialoilla (terveydenhuolto, autoteollisuus, rautatiet jne.) edut ovat myös huomattavia. Vaikka LIBC:n muodollinen sertifiointi vaatii erityisiä työkaluja ja prosesseja, pääsy tietoihin pieni, modulaarinen ja suhteellisen helposti auditoitava kirjasto Se tasoittaa tietä sertifioitujen tai perusteellisten tietoturvatarkastusten läpikäyneiden työkaluketjujen tarjoamiselle.

Samaan aikaan tämä Picolibc-veto sopii trendiin kohti avoimet piityökaluketjutkuten RISC-V-ekosysteemissä. Näissä ympäristöissä ISA on avoin, ja myös kääntäjä, libc ja muu työkaluketju ovat läpinäkyviä ja yhteisön ylläpitämiä.

GCC 16:n, nykyaikaisten arkkitehtuurien (ARMv9.6-A, RISC-V, uudet x86-sukupolvet, kuten AMD Zen 6 tai uudet Intel-prosessorit) tuen ja kevyen libc:n Picolibcin yhdistelmä vahvistaa GNU-kääntäjää uuden älylaitteiden aallon keskeinen pilaripuettavista laitteista paikallisilla analyysiominaisuuksilla varustettuihin teollisuusantureihin.

GCC 16 -tila, muut uudet ominaisuudet ja tuen kypsyysaste

GCC 16 on suunniteltu seuraavasti: kääntäjän pääversio tyypillisessä julkaisusyklissäänArvioitu julkaisuaika maalis-huhtikuun välillä, jos kaikki menee ylläpitäjien suunnitelmien mukaan. Kun kehitystyön viimeiseen vaiheeseen (vaihe 4) siirtyminen oli vahvistettu, painopiste siirtyi yksinomaan dokumentointi ja regressiokorjausilman uusien ominaisuuksien lisäämistä paitsi erittäin perustelluissa tapauksissa.

  Ohjelmiston kehityssykli: 10-vaiheinen opas

Viimeisimmässä raportissa mainittiin, että useita ratkaisemattomia ongelmia on vielä prioriteettiregressiot P1Nämä ovat kriittisimpiä bugeja. Ennen kuin näiden bugien määrä saavuttaa nollan tai hyväksyttävän tason, GCC 16.1:n ensimmäisiä julkaisuehdokkaita ei luoda. Tämä kurinalaisuus varmistaa, että Picolibcin tuki saapuu riittävän kypsään tilaan aloittaa sen käyttö oikeissa projekteissa.

Picolibc-tuen lisäksi GCC 16 sisältää useita uusia ominaisuuksia: tuen kohdekielelle Varsi9.6-A, AMD Zen 6 -arkkitehtuurin alkuperäinen toteutus (tunnistettu nimellä Znver6) uusien ISA-ominaisuuksiensa ansiosta, parannukset hallinnan hallittu muisti AMD-näytönohjaimissa, tuki seuraavan sukupolven Intel-prosessoreille, kuten Nova Lake ja Wildcat Lake, sekä oletusosioiden määrän kasvu LTO:ssa (Link Time Optimization) muiden parannusten ohella.

Kielellisesti yksi näkyvimmistä päätöksistä on se, että C++20:stä tulee oletusstandardi kun muuta ei ole määritelty. Algol 68 -kielelle on jopa lisätty uusi käyttöliittymä, mikä laajentaa GCC:n tukemien kielten luetteloa. Kaikki tämä yhdistetään Virheenkorjauksia ja pieniä optimointeja hajautettuna eri taustapalvelimille.

Kokonaisuutena GCC 16 ei ole vain "versio, jossa Picolibc on mukana". Se on vahva julkaisu arkkitehtuurituen, C++-modernisoinnin ja nykyisen laitteiston ominaisuuksien kannalta, ja kevyen libc:n lisääminen on osa laajempaa pyrkimystä. laajempi strategia nykyaikaisiin tarpeisiin sopeutumiseksi kehityksestä sekä työpöytäympäristöissä että ennen kaikkea sulautetuissa järjestelmissä.

Tekniset yhteisöt ja erikoistuneet mediat ovat seuranneet näitä kehityskulkuja: Picolibc-tukea ja "libc-diversiteettiä" käsittelevistä artikkeleista uusien arkkitehtuurien, kuten AMD Zen 6:n, vaikutusten analyyseihin sekä sosiaalisen median keskusteluihin Kuinka hyödyntää GCC 16:ta projekteissa retrokonsoleista teollisuusohjaukseen.

Kaikki viittaa siihen, että GCC 16.1:n lopullisen julkaisun lähestyessä ja ensimmäisten integroidun Picolibcin sisältävien työkaluketjujen vakiintuessa näemme lisää tosielämän käyttötapauksia, vertailevia koko- ja suorituskykytestejä sekä käytännön oppaita. bare metal -käyttöjärjestelmät, linkitysskriptit ja tietyt käynnistyssekvenssit käyttämällä tätä uutta yhdistelmää.

Picolibcin tuki GCC 16:ssa merkitsee käännekohtaa sulautetulle ekosysteemille: Se vähentää kitkaa merkittävästi ottamalla käyttöön erittäin kevyen LIBC:n, mikä avaa oven pienemmille ja helpommin ylläpidettäville laiteohjelmistoille. Tämä on linjassa yleisen trendin kanssa kohti avoimia, konfiguroitavia työkaluketjuja, jotka on mukautettu erilaisiin arkkitehtuureihin. Monille kehitystiimeille kannattaa aloittaa GCC 16 -haarojen testaaminen Picolibc:llä nyt, mitata sen vaikutusta kokoon, suorituskykyyn ja ylläpidettävyyteen sekä arvioida niiden integrointia tuleviin tuotteisiin.

mekatroniikka ja teollisuuselektroniikka
Aiheeseen liittyvä artikkeli:
Mekatroniikka ja teollisuuselektroniikka: opinnot, urapolut ja kaksoistutkinnot