Picolibc-støtte i GCC 16 for innebygde systemer

Siste oppdatering: 19 januar 2026
Forfatter: TecnoDigital
  • GCC 16 integrerer innebygd støtte for Picolibc, en ultralett libc C rettet mot innebygde systemer.
  • Integrering legger til mål *-picolibc-* og nye alternativer som f.eks. --oslib=, --crt0= y --printf=.
  • Picolibc reduserer fastvarestørrelsen betydelig sammenlignet med Newlib og Newlib-nano, noe som er nøkkelen til IoT- og edge-applikasjoner.
  • GCC 16 kombinerer denne støtten med forbedringer i moderne arkitekturer og C++20 som standard, noe som forsterker dens rolle i det innebygde økosystemet.

Picolibc-støtte i GCC 16 for innebygde systemer

Ankomsten av GCC 16 med innebygd støtte for Picolibc Det skaper en god del begeistring i verden av innebygd utviklingDet er ikke bare «en annen versjon» av den samme gamle kompilatoren, men et viktig skritt mot mye lettere og mer raffinerte verktøykjeder for mikrokontrollere, IoT-enheter og kantsystemer der hver byte teller.

Bak dette trekket står den erfarne utvikleren Keith Packard, mest kjent for sitt arbeid på X.Orgsom i årevis har promotert Picolibc som et minimalistisk C-standardbibliotek for innebygde systemer. Med integreringen i GCC 16 er behovet for tilpassede oppdateringer, merkelige konfigurasjoner og hacks for å koble sammen dette biblioteket endelig over. Picolibc blir en førsteklasses borger i GCC-økosystemet.

Hva er Picolibc, og hvorfor er det integrert i GCC 16?

Picolibc er et ultralett C-standardbibliotek Den er spesielt utviklet for 32-biters og 64-biters innebygde systemer, og ble født av konvergensen og refaktoreringen av Newlib og AVR Libc, med et klart mål: å minimere ressursforbruket. ROM og RAM uten å gi avkall på de essensielle funksjonene i C-språket.

I motsetning til andre tyngre alternativer er Picolibc utformet slik at Lenkeren kan enkelt forkaste ubrukt kode.gir svært fin kontroll over hvilke deler av biblioteket som faktisk havner i den endelige binærfilen. Dette er ideelt for mikrokontrollere der lagring måles i noen få kilobyte og hver ekstra del av koden representerer en betydelig investering. merkostnad, forbruk og kompleksitet.

Frem til nå har bruk av Picolibc med GCC vært involvert å bygge et verktøykjede nesten for håndKompilering av biblioteket, finjustering av sysroot, modifisering av oppstartsskript, installering av oppdateringer osv. ga kraftige resultater, men friksjonen holdt mange team tilbake. Med GCC 16 endres dette scenariet radikalt, ettersom Kompilatoren inkluderer direkte og offisiell støtte. for denne innebygde libcen.

Nøkkelen er at GCC 16-kodetreet inneholder de nødvendige endringene for å gjenkjenne mål av typen *-picolibc-* og konfigurasjonsalternativet --with-picolibcNår man bygger kompilatoren eller bruker en forhåndsbygd verktøykjede, Picolibc blir et fabrikkstøttet alternativ, uten noe gjør-det-selv-arbeid rundt omkring.

Picolibc-integrasjon i GCC 16: detaljer og nye alternativer

Oppdateringen som er slått sammen med GCC 16-depotet legger ikke bare til gjenkjenning av Picolibc som en alternativ libc: Den introduserer også kompilatorspesifikke alternativer designet for å dra nytte av dette lette miljøet i innebygde systemer.

På den ene siden kan GCC nå jobbe sømløst med målene for stilen *-picolibc-* (for eksempel arm-none-picolibc-eabiVidere, når man kompilerer GCC, er det mulig å sende --with-picolibc slik at konfiguratoren forbereder miljøet med dette biblioteket som hovedmål, og administrerer sysroot, headere og oppstartsfiler akkorder til Picolibc.

Sammen med den grunnleggende integrasjonen eksponerer oppdateringen en rekke svært interessante tilleggsalternativer når det er kompilert for Picolibc:

  • --oslib=Den lar deg velge forskjellige moduler som implementerer grensesnittet med operativsystemet eller kjøretidsmiljøet, noe som er viktig hvis du jobber i bare metal, med Lett RTOS eller i simulatorer.
  • --crt0=: spesifiserer C-oppstartsfilen (crt0) å bruke, noe som gir plass til tilpasse oppstartssekvensen til hvert kort, oppstartslaster eller initialiseringskrav.
  • --printf=tilbyr et valg mellom en full implementering av printf eller forkortede versjoner, for eksempel minimalistiske versjoner fokusert på heltall som sparer en betydelig mengde programminne.
  Alt om metaprogrammering: praktiske eksempler og bruksområder

Dette siste alternativet utgjør ofte en stor forskjell i virkelige prosjekter: familien av funksjoner printf Det er vanligvis den tyngste delen fra libc. Å kunne velge en redusert versjon, kanskje bare beholde det som er nødvendig for grunnleggende UART-logger, gjør at den endelige binærfilen kan være mye mer kompakt, noe som er viktig i svært rimelige enheter.

Noen flyter bruker også makroer og flagg, for eksempel -Dsystem-libc og sysroot-konfigurasjoner tilknyttet Picolibc, slik at kompilatoren anser dette biblioteket som standardimplementering av libc uten å måtte legge til dusinvis av flagg til hver GCC-påkallelse.

Veien mot «libc-mangfold» i GCC

Picolibcs ​​inkludering i GCC 16 kom ikke ut av ingenting; det ble innledet av en debatt i selve GCC-prosjektet om behovet for Fremme bibliotekmangfold C offisielt støttet. For omtrent et år siden var det allerede snakk på e-postlister om å muliggjøre forskjellige libc-er tilpasset spesifikke kontekster, og Picolibc fremsto som en klar kandidat for den innebygde verdenen.

I løpet av denne tiden har Keith Packard gått poler og send inn påfølgende versjoner av oppdateringen til listen gcc-patchesIntegrasjonen ble justert for å oppfylle kompilatorens standarder for kvalitet og vedlikeholdbarhet. Diskusjoner med GCC-vedlikeholderne har forbedret detaljer som valg av mål, organisering av støttefiler og bruk av tilpassede alternativer.

Resultatet av denne samarbeidsprosessen er en integrasjon som ikke er en enkel oppdatering, men en utvidelse som er godt tilpasset den interne arkitekturen til GCCDette forsterker ideen om «libc-mangfold»: nå, i tillegg til de vanlige kombinasjonene med glibc, Newlib eller uClibc i visse miljøer, Picolibc blir med på listen som et lett og bærekraftig alternativ i selve GCC-treet.

Denne tilnærmingen passer veldig godt med dagens bransjetrender, der arkitekturer som RISC-V, nye ARMv9-profiler og spesialiserte SoC-er for spesifikke applikasjoner. Å ha en modulær og minimalistisk libc gjør det enklere for den samme kompilatoren å tilpasse seg både en kraftig server og en sensornode med bare noen få kilobyte flashminne.

Forholdet til Newlib, Newlib-nano og andre lette libc-er

For å forstå hva Picolibc tilbyr, er det nyttig å se det i kontekst sammenlignet med andre klassiske alternativer. Newlib har eksistert i mange år. libc-referansen for innebygde miljøer basert på GCC, og fra den har man utledet varianter som Newlib-nano, som har som mål å redusere størrelsen noe på bekostning av å kutte funksjonaliteter.

Picolibc deler samme opprinnelse, men bruker en en mer aggressiv redesign med fokus på modularitetTanken er ikke bare å gjøre Newlib «litt mindre», men å omstrukturere det slik at moderne lenkere kan fjerne ubrukt kode mye mer nøyaktig, og dermed maksimere forholdet mellom inkludert funksjonalitet og plass som er opptatt.

Ifølge analyser av fellesskapet (f.eks. sammenligninger publisert på blogger om innebygd utvikling), kan det å bytte til Picolibc bety betydelige reduksjoner i flash-bruk, binærstørrelse, stakk og heap sammenlignet med Newlib og nanovarianten. I praksis betyr dette at man kan få plass til mer applikasjonslogikk i den samme mikrokontrolleren, eller nedgradere til en mikrokontroller med mindre minne, og dermed redusere maskinvarekostnadene.

Samtidig forblir ikke Picolibc-prosjektet fastlåst i det grunnleggende: arkivet viser hvordan støtte legges til 16-bits mål, forbedringer i POSIX-kompatibilitet og diverse forbedringer som gjør den attraktiv også for mindre eksotiske arkitekturer: ARM Cortex-M, RISC-V, innebygde MIPS og en lang etcetera.

Sammenlignet med andre lettvektsalternativer som dietlibc eller diverse nanolib, velger Picolibc en balanse mellom størrelse og samsvar med standarder noe som passer spesielt godt i prosjekter der det kreves konsistente API-er, intensiv testing og samtidig et svært begrenset fotavtrykk.

  Hva er Moores lov: 50 år med teknologisk innovasjon

Slik bruker du Picolibc i en innebygd arbeidsflyt

Integrasjonen i GCC 16 fører til svært konkrete endringer i det daglige arbeidet til en firmwareutvikler. For å se dette tydelig, la oss forestille oss et typisk prosjekt for ARM Cortex-M med krysskompilering fra en utviklings-PC. Tradisjonelt sett har verktøykjeder som arm-none-eabi basert på Newlib eller proprietære SDK-er fra mikroprosessorprodusenten.

Med GCC 16 kan du bygge eller laste ned en verktøykjede som allerede inkluderer et mål arm-none-picolibc-eabiNår du konfigurerer kompilatoren med alternativet --with-picolibcMiljøet er nå klart til å bruke denne libc-en som standard, med dens headere, sysroot og passende oppstartsfiler.

Derfra gjøres kompileringen ved hjelp av det nye prefikset, for eksempel arm-none-picolibc-eabi-gccsammen med de vanlige optimaliserings- og feilsøkingsflaggene. Hvis du vil finjustere størrelsen ytterligere, kan du bruke alternativet --printf= å velge varianten av printf lettere enn det som dekker prosjektets behov.

I miljøer som bruker Make, CMake eller andre byggesystemer, er endringen vanligvis begrenset til juster verktøykjededefinisjonen: spesifiser det nye prefikset, tilpass kanskje noen koblingsalternativer og sjekk at oppstartsskriptene (crt0) og lenkerskriptfilene passer til Picolibc-organisasjonen. I mange tilfeller er denne justeringen mye mindre enn det som allerede er involvert i å gå fra et leverandør-SDK til en "ren" GCC-verktøykjede.

Denne flyten baner vei for å forlate proprietære eller lukkede miljøer, oppnå portabilitet mellom forskjellige mikrokontrollerfamilier og opprettholde en 100 % åpen og reviderbar verktøykjede, noe som blir stadig mer verdsatt i sektorer som industri, medisin eller bilindustri.

Innvirkning på IoT, edge computing og regulerte sektorer

Tidspunktet for denne integrasjonen er ikke tilfeldig: den sammenfaller med en brutal utvidelse av IoT-enheter og kantsystemer som opererer med svært begrensede ressurser, ofte batteridrevne og utplassert i massevis. I slike tilfeller tillater det å spare programminne ganske enkelt, bruk billigere mikrokontrollere og redusere enhetskostnadene betydelig.

Å redusere fastvarestørrelsen forenkler også problemer som OTA-oppdateringerhvor hver kilobyte mindre betyr raskere overføringer, mindre energiforbruk og lavere sannsynlighet for feil på ustabile nettverk. Picolibc, ved å muliggjøre mye mer kompakte binærfiler når det kombineres med GCC 16, har en direkte innvirkning på denne typen operasjoner.

I regulerte bransjer (helsevesen, bilindustri, jernbane osv.) er fordelene også merkbare. Selv om formell sertifisering av en LIBC krever spesifikke verktøy og prosesser, er det viktig å ha tilgang til et lite, modulært og relativt lettrevidert bibliotek Det baner vei for å tilby sertifiserte verktøykjeder eller de som har gjennomgått grundige sikkerhetsgjennomganger.

Samtidig passer dette veddemålet på Picolibc inn i trenden mot åpne silisiumverktøykjederslik tilfellet er i RISC-V-økosystemet. I disse miljøene er ikke bare ISA åpen, men kompilatoren, libc og resten av verktøykjeden er også transparente og vedlikeholdes av fellesskapet.

Kombinasjonen av GCC 16, støtte for moderne arkitekturer (ARMv9.6-A, RISC-V, nye generasjoner av x86 som AMD Zen 6 eller nye Intel-prosessorer) og Picolibc som en lettvekts libc styrker GNU-kompilatoren som sentral søyle for en ny bølge av smarte enheter, fra bærbare enheter til industrielle sensorer med lokale analysemuligheter.

GCC 16-status, andre nye funksjoner og støttemodenhet

GCC 16 er planlagt som hovedversjonen av kompilatoren i den typiske utgivelsessyklusenmed et omtrentlig utgivelsesvindu mellom mars og april hvis alt går etter planen for vedlikeholderne. Da inntredenen i den siste utviklingsfasen (trinn 4) var bekreftet, flyttet fokuset seg utelukkende til dokumentasjon og regresjonskorreksjon, uten å innrømme nye funksjoner unntatt i svært berettigede tilfeller.

  Programvareutviklingssyklus: En 10-trinns veiledning

Den siste rapporten nevnte at flere problemer gjensto å bli løst prioriterte regresjoner P1Dette er de mest kritiske feilene. Inntil antallet av disse feilene når null eller et akseptabelt nivå, vil ikke de første utgivelseskandidatene for GCC 16.1 bli generert. Denne disiplinen sikrer at støtten til Picolibc har nådd en tilstrekkelig moden tilstand å begynne å bruke det i virkelige prosjekter.

I tillegg til Picolibc-støtte, inneholder GCC 16 en rekke nye funksjoner: støtte for målet Armv9.6-A, første implementering for AMD Zen 6-arkitekturen (identifisert som Znver6) med sine nye ISA-funksjoner, forbedringer i håndteringen av administrert minne i AMD GPU-er, støtte for neste generasjons Intel-prosessorer som Nova Lake og Wildcat Lake, og en økning i antall standardpartisjoner i LTO (Link Time Optimization), blant andre forbedringer.

Når det gjelder språk, er en av de mest synlige avgjørelsene at C++20 blir standardstandarden når ingen andre er spesifisert. Et nytt brukergrensesnitt for Algol 68-språket er til og med lagt til, noe som utvider listen over språk som støttes av GCC. Alt dette kombineres med Feilrettinger og mindre optimaliseringer fordelt på de forskjellige backend-ene.

Alt i alt er GCC 16 ikke bare «versjonen der Picolibc er inkludert». Det er en sterk utgivelse når det gjelder arkitekturstøtte, C++-modernisering og muligheter for nåværende maskinvare, der tillegget av en lett libc er en del av en bredere innsats. en bredere strategi for tilpasning til moderne behov av utvikling, både på skrivebord og fremfor alt i innebygde systemer.

Tekniske miljøer og spesialiserte medier har dekket denne utviklingen: fra artikler fokusert på Picolibc-støtte og ideen om «libc-mangfold» til analyser av implikasjonene av nye arkitekturer som AMD Zen 6, samt diskusjoner på sosiale medier om Hvordan utnytte GCC 16 i prosjekter som spenner fra retrokonsoller til industriell kontroll.

Alt tyder på at vi vil se flere brukstilfeller fra den virkelige verden, sammenlignende størrelses- og ytelsestester og praktiske veiledninger etter hvert som den endelige utgivelsen av GCC 16.1 nærmer seg og de første verktøykjedene med integrert Picolibc stabiliserer seg. bare-metal, linkerskript og spesifikke oppstartssekvenser ved å bruke denne nye kombinasjonen.

Picolibcs ​​støtte i GCC 16 markerer et vendepunkt for det innebygde økosystemet: Det reduserer friksjonen drastisk å ta i bruk en ultralett LIBC, noe som åpner døren for mindre og mer vedlikeholdbare firmware. Dette stemmer overens med den generelle trenden mot åpne, konfigurerbare verktøykjeder tilpasset ulike arkitekturer. For mange utviklingsteam er det verdt å begynne å teste GCC 16-grener med Picolibc nå, måle effekten på størrelse, ytelse og vedlikeholdbarhet, og evaluere integreringen i kommende produkter.

mekatronikk og industriell elektronikk
Relatert artikkel:
Mekatronikk og industriell elektronikkteknikk: studier, karriereveier og doble grader