GNU/Linux >> Znalost Linux >  >> Linux

4 nástroje pro budování vestavěných linuxových systémů

Linux je nasazován do mnohem širšího pole zařízení, než Linus Torvalds předpokládal, když na něm pracoval na své koleji. Rozmanitost podporovaných architektur čipů je ohromující a vedla k Linuxu ve velkých i malých zařízeních; od obrovských sálových počítačů IBM po malá zařízení, která nejsou větší než jejich připojovací porty a vše mezi tím. Používá se ve velkých podnikových datových centrech, zařízeních internetové infrastruktury a systémech osobního rozvoje. Pohání také spotřební elektroniku, mobilní telefony a mnoho zařízení internetu věcí.

Při vytváření linuxového softwaru pro stolní počítače a zařízení podnikové třídy vývojáři obvykle používají na svých sestavovacích strojích desktopovou distribuci, jako je Ubuntu, aby měli prostředí co nejblíže tomu, kde bude software nasazen. Nástroje jako VirtualBox a Docker umožňují ještě lepší sladění vývojových, testovacích a produkčních prostředí.

Co je to vestavěný systém?

Wikipedia definuje vestavěný systém jako:„Počítačový systém s vyhrazenou funkcí v rámci většího mechanického nebo elektrického systému, často s omezeními výpočetní techniky v reálném čase.“

Považuji za dostatečně jednoduché říci, že vestavěný systém je počítač, který většina lidí pod pojmem počítač nepovažuje. Jeho primární úlohou je sloužit jako nějaké zařízení a není považováno za univerzální výpočetní platformu.

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Vývojové prostředí v programování vestavěných systémů se obvykle velmi liší od testovacího a produkčního prostředí. Mohou používat různé architektury čipů, softwarové sady a dokonce i operační systémy. Vývojové pracovní postupy jsou velmi odlišné pro embedded vývojáře a desktopové a webové vývojáře. Výstup sestavení se obvykle skládá z celého obrazu softwaru pro cílové zařízení, včetně jádra, ovladačů zařízení, knihoven a aplikačního softwaru (a někdy i bootloaderu).

V tomto článku uvedu přehled čtyř běžně dostupných možností pro stavbu vestavěných linuxových systémů. Přiblížím, jaké to je pracovat s každým, a poskytnu dostatek informací, které čtenářům pomohou rozhodnout se, který nástroj pro svůj návrh použít. Nebudu vás učit, jak používat žádnou z nich; jakmile zúžíte svůj výběr, existuje spousta podrobných online výukových zdrojů. Žádná možnost není správná pro všechny případy použití a doufám, že vám předložím dostatek podrobností, abyste se mohli rozhodnout.

Yocto

Projekt Yocto je definován jako „projekt spolupráce s otevřeným zdrojovým kódem, který poskytuje šablony, nástroje a metody, které vám pomohou vytvářet vlastní systémy založené na Linuxu pro vestavěné produkty bez ohledu na hardwarovou architekturu.“ Jedná se o sbírku receptur, konfiguračních hodnot a závislostí používaných k vytvoření vlastního linuxového runtime obrazu přizpůsobeného vašim konkrétním potřebám.

Úplné odhalení:Většina mé práce v embedded Linuxu se soustředila na projekt Yocto a moje znalosti a zaujatost vůči tomuto systému budou pravděpodobně evidentní.

Yocto používá jako systém sestavování Openembedded. Technicky jsou tyto dva samostatné projekty; v praxi však uživatelé nemusí chápat rozdíl a názvy projektů se často používají zaměnitelně.

Výstup sestavení projektu Yocto sestává zhruba ze tří komponent:

  • Cílení na binární soubory za běhu: Patří mezi ně bootloader, jádro, moduly jádra, obraz kořenového souborového systému. a jakékoli další pomocné soubory potřebné k nasazení Linuxu na cílovou platformu.
  • Zdroj balíčku: Toto je kolekce softwarových balíčků dostupných k instalaci do vašeho cíle. Formát balíčku (např. deb, rpm, ipk) si můžete vybrat podle svých potřeb. Některé z nich mohou být předinstalované v cílových runtime binárních souborech, je však možné sestavit balíčky pro instalaci do nasazeného systému.
  • Cílová sada SDK: Jedná se o kolekci knihoven a hlavičkových souborů představujících software nainstalovaný na vašem cíli. Používají je vývojáři aplikací při vytváření kódu, aby zajistili, že budou propojeny s příslušnými knihovnami

Výhody

Projekt Yocto je v průmyslu široce používán a má podporu mnoha vlivných společností. Navíc má velkou a živou vývojářskou komunitu a ekosystém, který k tomu přispívá. Kombinace nadšenců pro open source a firemních sponzorů pomáhá řídit projekt Yocto.

Existuje mnoho možností, jak získat podporu s Yocto. Existují knihy a další školicí materiály, pokud si to chcete udělat sami. Mnoho inženýrů se zkušenostmi v Yocto je k dispozici, pokud si chcete najmout odborné znalosti. A mnoho komerčních organizací poskytuje na klíč produkty nebo služby založené na Yocto a implementaci a přizpůsobení pro váš návrh.

Projekt Yocto lze snadno rozšířit prostřednictvím vrstev, které lze publikovat nezávisle a přidat další funkce, na cílové platformy, které nejsou k dispozici ve verzích projektu, nebo uložit přizpůsobení jedinečná pro váš systém. Vrstvy lze přidat do vaší konfigurace a přidat jedinečné funkce, které nejsou konkrétně zahrnuty ve verzích zásob; například vrstva "metaprohlížeč" obsahuje recepty pro webové prohlížeče, které lze snadno sestavit pro váš systém. Protože jsou nezávisle udržovány, vrstvy mohou mít jiný plán vydání (vyladěný podle rychlosti vývoje vrstev) než standardní verze Yocto.

Yocto má pravděpodobně nejširší podporu zařízení ze všech možností popsaných v tomto článku. Vzhledem k podpoře mnoha výrobců polovodičů a desek je pravděpodobné, že Yocto bude podporovat jakoukoli cílovou platformu, kterou si vyberete. Přímá vydání Yocto podporují pouze několik desek (aby bylo možné řádně testovat a vydávat cykly), nicméně standardním pracovním modelem je použití externích podpůrných vrstev desek.

A konečně, Yocto je extrémně flexibilní a přizpůsobitelný. Přizpůsobení pro vaši konkrétní aplikaci lze uložit do vrstvy pro zapouzdření a izolaci. Přizpůsobení jedinečná pro vrstvu prvků jsou obecně uložena jako součást samotné vrstvy, což umožňuje použít stejná nastavení současně na více konfigurací systému. Yocto také poskytuje dobře definovanou prioritu vrstvy a možnost přepsání. To vám umožní definovat pořadí, ve kterém jsou vrstvy aplikovány a prohledávány metadata. Umožňuje také přepsat nastavení ve vrstvách s vyšší prioritou; například do vašich soukromých vrstev bude přidáno mnoho přizpůsobení stávajících receptů, přičemž pořadí bude přesně řízeno prioritami.

Nevýhody

Největší nevýhodou projektu Yocto je křivka učení. Naučit se systém a skutečně mu porozumět vyžaduje značný čas a úsilí. V závislosti na vašich potřebách to může být příliš velká investice do technologií a schopností, které nejsou pro vaši aplikaci klíčové. V takových případech může být dobrou volbou spolupráce s některým z komerčních prodejců.

Časy a zdroje sestavení vývoje jsou pro sestavení projektu Yocto poměrně vysoké. Počet balíčků, které je třeba sestavit, včetně toolchainu, jádra a všech cílových komponent runtime, je významný. Vývojové pracovní stanice pro vývojáře Yocto bývají velké systémy. Nedoporučuje se používat kompaktní notebook. To lze zmírnit použitím cloudových sestavovacích serverů dostupných od mnoha poskytovatelů. Kromě toho má Yocto vestavěný mechanismus ukládání do mezipaměti, který mu umožňuje znovu použít dříve vytvořené komponenty, když zjistí, že se parametry pro sestavení konkrétního balíčku nezměnily.

Doporučení

Použití projektu Yocto pro váš další vestavěný návrh Linuxu je dobrá volba. Ze zde uvedených možností je nejširší použitelná bez ohledu na váš cílový případ použití. Široká podpora průmyslu, aktivní komunita a široká podpora platforem z něj dělají dobrou volbu pro návrháře moštu.

Buildroot

Projekt Buildroot je definován jako „jednoduchý, efektivní a snadno použitelný nástroj pro generování vestavěných linuxových systémů prostřednictvím křížové kompilace“. Sdílí mnoho stejných cílů jako projekt Yocto, je však zaměřen na jednoduchost a minimalismus. Buildroot obecně zakáže všechna volitelná nastavení při kompilaci pro všechny balíčky (až na několik významných výjimek), což má za následek nejmenší možný systém. Bude na návrháři systému, aby povolil nastavení, která jsou vhodná pro dané zařízení.

Buildroot sestavuje všechny komponenty ze zdroje, ale nepodporuje správu balíčků na cílovém místě. Jako takový se někdy nazývá generátor firmwaru, protože obrázky jsou z velké části opraveny v době sestavování. Aplikace mohou aktualizovat cílový souborový systém, ale neexistuje žádný mechanismus pro instalaci nových balíčků do běžícího systému.

Výstup Buildroot se skládá zhruba ze tří komponent:

  • Kořenový souborový systém a všechny další pomocné soubory potřebné k nasazení Linuxu na cílovou platformu
  • Jádro, zavaděč a moduly jádra vhodné pro cílový hardware
  • Nástrojový řetězec používaný k vytvoření všech cílových binárních souborů.

Výhody

Zaměření Buildroot na jednoduchost znamená, že obecně je snazší se naučit než Yocto. Základní sestavovací systém je napsán v Make a je dostatečně krátký na to, aby umožnil vývojářům porozumět celému systému a zároveň byl dostatečně rozšiřitelný, aby vyhovoval potřebám vývojářů vestavěného Linuxu. Jádro Buildroot obecně zpracovává pouze běžné případy použití, ale je rozšiřitelné pomocí skriptování.

Systém Buildroot používá ke své konfiguraci normální soubory Makefiles a jazyk Kconfig. Kconfig byl vyvinut komunitou linuxového jádra a je široce používán v open source projektech, díky čemuž je známý mnoha vývojářům.

Vzhledem k cíli návrhu deaktivovat všechna volitelná nastavení doby sestavení bude Buildroot obecně produkovat nejmenší možné obrázky pomocí konfigurace před zahájením výroby. Doba sestavení a zdroje hostitele sestavení budou také obecně kratší než u projektu Yocto.

Nevýhody

Zaměření na jednoduchost a minimální povolené možnosti sestavení znamená, že možná budete muset provést významné úpravy, abyste mohli nakonfigurovat sestavení Buildroot pro vaši aplikaci. Všechny možnosti konfigurace jsou navíc uloženy v jediném souboru, což znamená, že pokud máte více hardwarových platforem, budete muset provést každou z vašich změn přizpůsobení pro každou platformu.

Jakákoli změna konfiguračního souboru systému vyžaduje úplné znovu sestavení všech balíčků. To je poněkud zmírněno minimální velikostí obrazu a dobou sestavení ve srovnání s Yocto, ale může to mít za následek dlouhé sestavení, zatímco vy ladíte konfiguraci.

Mezipaměť stavu mezipaměti není ve výchozím nastavení povolena a není tak důkladná jako implementace Yocto. To znamená, že zatímco první sestavení může být kratší než ekvivalentní sestavení Yocto, další sestavení mohou vyžadovat přestavbu mnoha komponent.

Doporučení

Použití Buildroot pro váš další vestavěný návrh Linuxu je dobrou volbou pro většinu aplikací. Pokud váš návrh vyžaduje více typů hardwaru nebo jiné rozdíly, možná budete chtít přehodnotit kvůli složitosti synchronizace více konfigurací, nicméně u systému sestávajícího z jediného nastavení vám bude Buildroot pravděpodobně dobře fungovat.

OpenWRT/LEDE

Projekt OpenWRT byl zahájen k vývoji vlastního firmwaru pro spotřebitelské routery. Mnoho levných směrovačů dostupných u vašeho místního prodejce je schopno provozovat systém Linux, ale možná ne hned po vybalení. Výrobci těchto směrovačů nemusí poskytovat časté aktualizace pro řešení nových hrozeb, a i když ano, mechanismy pro instalaci aktualizovaných bitových kopií jsou obtížné a náchylné k chybám. Projekt OpenWRT vytváří aktualizované obrazy firmwaru pro mnoho zařízení, která jejich výrobci opustili, a dává těmto zařízením nový život.

Primárními výstupy projektu OpenWRT jsou binární obrazy pro velké množství komerčních zařízení. Existují síťově přístupná úložiště balíčků, která umožňují koncovým uživatelům zařízení přidávat do jejich systémů nový software. Sestavovací systém OpenWRT je univerzální sestavovací systém, který umožňuje vývojářům vytvářet vlastní verze splňující jejich vlastní požadavky a přidávat nové balíčky, ale jeho primárním zaměřením jsou cílové binární soubory.

Výhody

Pokud hledáte náhradní firmware pro komerční zařízení, OpenWRT by měl být na vašem seznamu možností. Dobře se udržuje a může vás ochránit před problémy, které firmware výrobce nedokáže. Můžete také přidat další funkce, díky nimž budou vaše zařízení užitečnější.

Pokud je váš vestavěný design zaměřen na sítě, OpenWRT je dobrá volba. Síťové aplikace jsou primárním případem použití OpenWRT a pravděpodobně v něm najdete mnoho z těchto softwarových balíčků.

Nevýhody

OpenWRT ukládá vašemu návrhu významná politická rozhodnutí (vs. Yocto a Buildroot). Pokud tato rozhodnutí nesplňují vaše cíle návrhu, možná budete muset provést netriviální úpravy.

Povolení aktualizací založených na balíčcích ve flotile nasazených zařízení je obtížné spravovat. To z definice vede k jinému zatížení softwaru, než jaké testoval váš tým kontroly kvality. Navíc je u většiny správců balíčků obtížné zaručit atomické instalace a špatně načasovaný cyklus napájení může zanechat vaše zařízení v nepředvídatelném stavu.

Doporučení

OpenWRT je dobrou volbou pro amatérské projekty nebo pro opětovné použití komerčního hardwaru. Je to také dobrá volba pro síťové aplikace. Pokud potřebujete výrazné přizpůsobení z výchozího nastavení, můžete preferovat Buildroot nebo Yocto.

Desktopové distribuce

Běžným přístupem k navrhování vestavěných linuxových systémů je začít s distribucí pro stolní počítače, jako je Debian nebo Red Hat, a odstraňovat nepotřebné součásti, dokud se nainstalovaný obraz nevejde do prostoru vašeho cílového zařízení. Toto je přístup používaný pro populární distribuci Raspbian pro platformu Raspberry Pi.

Výhody

Hlavní výhodou tohoto přístupu je znalost. Vývojáři embedded Linuxu jsou často také uživateli desktopového Linuxu a dobře se vyznají ve zvolené distribuci. Použití podobného prostředí v cíli může vývojářům umožnit rychlejší začátek. V závislosti na zvolené distribuci lze nainstalovat mnoho dalších nástrojů pomocí standardních balicích nástrojů, jako jsou apt a yum.

K cílovému zařízení může být možné připojit displej a klávesnici a provádět veškerý vývoj přímo tam. Pro vývojáře, kteří s vestavěným prostorem teprve začínají, to bude pravděpodobně známější prostředí a odpadá nutnost konfigurovat a používat složité nastavení napříč vývojem.

Počet balíčků dostupných pro většinu distribucí pro stolní počítače je obecně větší než počet dostupných pro embedded specifické tvůrce diskutované výše. Vzhledem k větší uživatelské základně a širší rozmanitosti případů použití můžete být schopni najít všechny runtime balíčky, které potřebujete pro svou aplikaci, již vytvořené a připravené k použití.

Nevýhody

Použití cíle jako primárního vývojového prostředí bude pravděpodobně pomalé. Spouštění nástrojů kompilátoru je operace náročná na zdroje a v závislosti na tom, kolik kódu vytváříte, může bránit vašemu výkonu.

Až na některé výjimky nejsou distribuce pro stolní počítače navrženy tak, aby vyhovovaly systémům s nízkými zdroji, a může být obtížné adekvátně oříznout vaše cílové obrázky. Podobně očekávaný pracovní postup v prostředí desktopu není ideální pro většinu vestavěných návrhů. Získání reprodukovatelného prostředí tímto způsobem je obtížné. Ruční přidávání a odstraňování balíčků je náchylné k chybám. To lze naskriptovat pomocí nástrojů specifických pro distribuci, jako je debootstrap pro systémy založené na Debianu. K dalšímu zlepšení reprodukovatelnosti můžete použít nástroj pro správu konfigurace, jako je CFEngine (který, úplné zveřejnění, vytvořil můj zaměstnavatel, Mender.io). Stále jste však vydáni na milost a nemilost poskytovateli distribuce, který bude balíčky aktualizovat tak, aby vyhovovaly jejich potřebám, nikoli vašim.

Doporučení

Dejte si pozor na tento přístup u produktu, který plánujete uvést na trh. Toto je skvělý model pro amatérské aplikace; u produktů, které potřebují podporu, však tento přístup pravděpodobně způsobí potíže. I když můžete začít rychleji, může vás to z dlouhodobého hlediska stát čas a úsilí.

Další úvahy

Tato diskuse se zaměřila na funkčnost sestavovacích systémů, ale obvykle existují nefunkční požadavky, které mohou ovlivnit vaše rozhodnutí. Pokud jste již vybrali svůj systém na čipu (SoC) nebo desku, bude váš výběr pravděpodobně diktován prodejcem. Pokud váš dodavatel poskytuje balíček podpory desky (BSP) pro daný systém, jeho použití obvykle ušetří dost času, ale prozkoumejte kvalitu BSP, abyste se později ve svém vývojovém cyklu vyhnuli problémům.

Pokud to váš rozpočet dovolí, můžete zvážit použití komerčního dodavatele pro váš cílový operační systém. Existují společnosti, které poskytnou ověřenou a podporovanou konfiguraci mnoha zde probíraných možností, a pokud nemáte odborné znalosti v oblasti vestavěných systémů pro sestavení Linuxu, je to dobrá volba a umožní vám soustředit se na své klíčové schopnosti.

Jako alternativu můžete zvážit komerční školení pro vaše vývojové pracovníky. To bude pravděpodobně levnější než komerční poskytovatel OS a umožní vám být více soběstačný. Toto je rychlý způsob, jak překonat křivku učení se základy systému sestavování, který si vyberete.

Konečně, možná již máte nějaké vývojáře se zkušenostmi s jedním nebo více systémy. Pokud máte inženýry, kteří preferují, určitě stojí za to vzít to v úvahu při svém rozhodování.

Přehled

Existuje mnoho možností pro vytváření vestavěných systémů Linux, z nichž každá má výhody a nevýhody. Je zásadní upřednostnit tuto část vašeho návrhu, protože přepínání systémů později v procesu je extrémně nákladné. Kromě těchto možností se neustále vyvíjejí nové systémy. Doufejme, že tato diskuse poskytne určitý kontext pro přezkoumání nových systémů (a těch zde zmíněných) a pomůže vám učinit solidní rozhodnutí pro váš další projekt.


Linux
  1. 4 skenovací nástroje pro desktop Linux

  2. Nejlepší linuxové nástroje pro spisovatele

  3. 80 Linux Monitorovací nástroje pro SysAdmins

  1. Použití AppImage pro správu balíčků Linuxu

  2. 8 nejlepších nástrojů pro těžbu kryptoměn pro Linux

  3. 8 úžasných nástrojů pro výběr barev pro Linux

  1. 4 open source nástroje pro provoz linuxového serveru

  2. Top 5 nástrojů pro migraci dat pro Linux

  3. Souborový systém SD karet odolný proti poškození pro vestavěný Linux?