Sestavení operačního systému OpenWRT se specifickými vlastnostmi

OpenWRTOpenWRT je operační systém založený na jádře Linux. Cílovou skupinou jsou zejména WiFi routery a zařízení s malým množstvím paměti. Velice často je tímto systémem nahrazován původní firmware komerčních produktů, oproti nimž přidává zejména podporu komunitních vývojářů a uživatelů, množství nových softwarových funkcí, ale také prakticky nekončící vydávání nových aktualizací. Kromě toho může někoho zaujmout otevřenost zdrojových kódů a možnost celý systém sestavit vlastními silami na svém vlastním počítači.
OpenWRT se skládá z několika softwarových komponent. Těmi jsou: upravené jádro Linux a ovladače pro hardware, knihovna uClibc, util-linux, BusyBox a volitelné softwarové balíčky. OpenWRT podporuje také aktualizace systému a instalaci dalších softwarových balíčků. Limitováni jsme zejména velikostí úložného prostoru (nejčastěji paměť typu Flash).

Umístění firmware ve Flash

Na embedded zařízeních nebývá operační systém zaváděn z pevných disků, ale z paměti Flash. Ta může být v závislosti na typu zařízení ve velikostech jednotek až desítek MB. Z tohoto důvodu je při výběru a instalaci softwarových balíčků velmi důležité dbát na konkrétní nároky.
Paměť Flash je rozdělena do několika bloků, kde je umístěn různý kód. Více lze nalézt zde.
Příklad detekce Flash paměti připojené přes sběrnici SPI a identifikace jednotlivých bloků z výpisu startu jádra na TP-LINK TL-WR841N/ND v7:

Hardwarové verze zařízení

TL-WR841ND - PNPři sestavování OpenWRT je důležité vybrat konkrétní model zařízení a jeho hardwarovou verzi. Jednotlivé verze nemusí být mezi sebou kompatibilní, mohou obsahovat jinou čipovou sadu, typ a velikost pamětí, atd. Název modelu a verze je k nalezení na výrobním štítku zařízení nebo desce plošných spojů. Konkrétní modely a verze jsou popsány na wiki projektu OpenWRT.

Hardwarové modifikace

Častým důvodem pro instalaci OpenWRT je hardwarová modifikace. Některá zařízení umožňují vyvést další rozhraní, kterými mohou být USB a GPIO porty, I2C sběrnice, aj. Pro takový hardware je potřeba softwarová podpora na úrovni operačního systému. Poté lze například připojovat tiskárny, externí pevné disky, ale i čidla teploty, tlaku, vlhkosti, apod. To vše lze za pomocí OpenWRT uvést do provozu. Jednoduše tedy můžeme z WiFi routeru vytvořit IoT media hub.

Sestavení OpenWRT

Sestavování OpenWRT je poměrně jednoduchý proces, který se skládá z instalace nástrojů nutných pro stažení a překlad zdrojových kódů, stažení zdrojových kódů, výběr/nastavení vlastností, kompilace a následně upgrade zařízení.

V mém případě využívám virtuální stroj s Arch Linux i686, 50 GB diskového prostoru, 3 GB RAM a 6 jader CPU i7.

Instalace nástrojů pro překlad zdrojových kódů pod GNU/Linux

Instalace veškerých potřebných nástrojů je popsána na stránkách projektu.

V prostředí Arch Linux může probíhat následovně:

Stažení zdrojových kódů

Pro zdrojové kódy a kompilaci budeme potřebovat cca 10 GB volného prostoru. V praxi to může být méně nebo mnohem více v závislosti na softwarových součástech, které budeme v projektu využívat.

Nejprve vytvoříme libovolný pracovní adresář, do kterého se následně přesuneme:

Jak je možné vidět, práce probíhá pod neprivilegovaným uživatelem (jiný než root).

Zdrojové kódy se nachází v GIT repositáři git.openwrt.org/openwrt.git. Stáhneme pouze poslední verzi bez všech předchozích změn:

Byl automaticky vytvořen adresář openwrt, do kterého se přesuneme:

V adresáři se na nachází soubor feeds.conf.default, který obsahuje definice dalších repositářů (packages, luci, routing, telephony, …), které se uplatňují při konfiguraci a stahování zdrojových kódů. Pravděpodobně vše necháme ve výchozím stavu. Pokud ale chceme využít jiné nastavení, můžeme soubor zkopírovat na feeds.conf a upravit:

Provedeme stažení dalších potřebných softwarových balíčků:

A jejich instalaci do příslušných struktur:

Tím ale stahování nástrojů a zdrojových kódů z internetu nekončí. Další, v závislosti na konfiguraci, jsou stahovány při vlastní kompilaci.

Nastavení vlastností a software

Nyní vygenerujeme výchozí nastavení nového systému OpenWRT:

To je zapsáno do textového souboru .config. Formát je stejný jako v případě nastavení při kompilaci linuxového jádra.

Ověříme nainstalované softwarové součásti nutné pro kompilaci:

Pokud nám něco v systému chybí, jsme o této situaci informováni a musíme chybu napravit.

Jak jsem již uvedl, sestavení se provádí pro konkrétní model a hardwarovou verzi. Spustíme proto textový konfigurační nástroj:

OpenWRT - Configuration
V tomto nástroji se kromě modelu a verze vybírá také kompletní nastavení jádra a ostatních součástí systému. Obecně platí, že vybíráme jenom součásti, které opravdu potřebujeme. Nesmíme zapomínat na omezenou paměť Flash, do které se vše musí vejít.

Příklad mé konfigurace: