Hlavní navigace

ARM - Linux není jen x86

13. 9. 2005
Doba čtení: 7 minut

Sdílet

Teprve v momentě, kdy sáhnete po jiné platformě, než je x86, pochopíte, kde je výhoda multiplatformnosti Linuxu. Jednou z alternativních platforem je ARM.

V dnešním x86 centrickém světě si mnoho běžných lidí – ať už uživatelů, nebo programátorů – jen obtížně připouští, že existují i platformy založené na něčem jiném než na známých procesorech Intel a AMD x86, které navazují na původní intel 8086 resp. vylepšený i386. Ač tito dva zástupci x86 platformy v povědomí lidí hrají prim v počtu běžících procesorů, především pro embedded zařízení (vestavěná zařízení, nebo též různá mobilní zařízení jako PDA) se zdaleka nejedná o nejběžnější architekturu. Touto architekturou je podle posledních zpráv právě ARM (viz zprávičku na Root.cz). A linuxový kernel je na ARMu jako doma.

Co je ARM?

ARM je původně název společnosti Acorn RISC Machines, která vyvinula cca v roce 1987 první RISC procesor s názvem ARM – údajně původně pro desktopový počítač, ale nějak se to zvrtlo. Později se po úspěchu procesorů ARM1 až ARM3 odělila divize procesorů ARM jako firma Advanced RISC Machines (Acorn vyvíjel i OS – RISC OS). Jak plyne z názvu společnosti, zaměřovala se na procesory s architekturou RISC (Reduced Instruction Set Computing). Od doby odštěpení opustilo dílny ARM několik řad procesorů od ARM6 až po ARM11.

Většina řad se soustředí na vytváření procesních jader pro vestavěná zařízení a mnohdy obsahují i části specializované na digitální zpracování signálů (DSP core), případně tvoří celou platformu (řadiče, IO atd.).

Nejznámější jsou zřejmě procesory StrongARM díky jejich aplikaci v nejrůznějších PDA, především od Compaqu a HP. StrongARM je původně procesorové jádro vyvinuté firmou ARM ve spolupráci s DEC, které v roce 1998 „licencoval“ Intel (vysoudil ho na DECu – doba začátku konce Digitalu i procesorů Alpha) a prodával(!) ho pod označením SA110 (pro obecná zařízení), SA1100 jádro specializované pro PDA a doplňkový chip SA1111. Dnes jsou na této architektuře založeny procesory XScale, např. PXA250.

Na ARMu je zajímavé i to, ze dodává ucelenou řadu vývojových nástrojů RealView, která běží i na Linuxu (čistě komerční řešení, pro jednotlivce poněkud drahé).

Kde se vzal Linux na ARM, proč je zajímavý a jaké má výhody?

Doufám, že nikomu neukřivdím, když napíšu, že největší zásluhy na tom, že dnes linuxový kernel běží na ARM procesorech, má Russell King, který je dodnes správcem ARM větve linuxového kernelu. Přehled dění okolo ARM v linuxovém kernelu naleznete na stránkách The ARM Linux Project. Zvláště zajímavá je developerská sekce, kde naleznete velmi detailní seznamy patchů a info o jejich stavu.

Odvážně si zde troufnu tvrdit, že ARM procesory se staly zajímavé díky tomu, že si je jako základní platformu vybral Microsoft (právě jsem odradil půlku čtenářů, druhá odpadne záhy) pro své Windows CE/Handhelds/Mo­bile, a díky tomu, že licenci na StrongARM zakoupil Intel (to byla ta druhá půlka) a dále ARM rozvíjí. Samozřejmě se ale ARM nestal populární jen díky tomu, ale také díky své architektuře a relativně nízké spotřebě (snad jsem to vyžehlil..).

Celá výhoda ARMu spočívá především v jeho RISCantnosti – instrukce jsou vykonávány přímo hardwarem, nikoli mikrokódem. To, že procesor obsahuje menší počet hardwarových instrukcí, dělá jeho návrh do jisté míry jednodušší, samotný procesor je menší, a tedy má menší spotřebu. Jednodušší instrukční soubor umožňuje také snadnější vytvoření kompilátoru. Díky některým vlastostem ARMu je omezen i problém předpovídání skoků, který je tak ožehavý ve světě CISC a tvůrce kompilátorů i procesorů zaměstnává na dlouhé měsíce. Za výhody RISCových procesorů se považuje i větší počet univerzálně použitelných registrů. ARM má navíc některé vymoženosti, jako jsou podmíněné instrukce (nejen skoku!). Malý příklad:

SWI     "podprogram"    ; spust podprogram
MVNVS   R0, #0          ; pokud selhal nastav R0 do -1 (move negative)
MOVVC   R0, #0          ; jinak nastav R0 do 0 

x86 řešení spočívá ve volání podprogramu, porovnání obsahu akumulátoru, několika (minimálně dvou) skoků a mov instrukcí.

UUD operační systémy pro ARM

UUD jsem si právě vymyslel a je to zkratka User Used Devices – tedy zařízení používaná uživatelem. Pro ARM existuje i množství specializovaných OS, které slouží pro různé průmyslové aplikace (zpravidla RTOS apod.). Známé systémy pro UUD ARM jsou Palm OS, Symbian OS, Windows CE a samozřejmě obecně Linux. Většina jmen OS asociuje různá PDA, existují ale i stolní počítače postavené na ARM procesorech, na kterých běží RISC OS – např. Iyonix. Pro nás bude zajímavé, jaké volně stažitelné komunitní distribuce Linuxu pro běžně dostupný ARM existují. Distribuce se dělí na dvě skupiny – ty, které se zaměřují na embedded zařízení (tzn. optimalizují na velikost), a ty, které čistě kompilují danou distribuci pro ARM architekturu.

Debian GNU/Linux pro ARM

Většina distribucí pro ARM má kořeny právě v Debianu pro ARM, který je ovšem jen obecnou kompilací balíčků z Debianu pro ARM. Dá se říci, že to je vlastně jediná architektonicky nezávislá distribuce pro ARM. Ostatní se už specializují na přizpůsobení balíčků z Debianu konkrétním zařízením. Mezi ně patří především Familiar, jLiMe, OpenZaurus atd., i když většina je již dnes založena spíše na konsolidovaném OpenEmbedded, kde, zdá se, probíhá bouřlivý vývoj  – alespoň podle posledního Newsletteru.

openembedded

Dalšími distribucemi aspirujícími na to být použity na ARMu jsou ARMedslack, Gentoo pro ARM, Embededded Gentoo a Emdebian – v jakém jsou stádiu, se dozvíte níže.

Emdebian

Emdebian se tváří podle konference, že se poměrně dobře vyvíjí, bohužel stránky projektu jsou krapet neaktuální. O něco lépe je na tom WIKI. Projekt existuje již od roku 2000, od té doby se ale převaluje mezi různými přístupy k integraci a kompilaci Emdebianu v návaznosti na Debian. V podstatě ještě stále není rozhodnuto, jakým způsobem se bude Emdebian začleňovat do Debianu nebo naopak vyčleňovat z něj. Musím bohužel konstatovat, že tato nepružnost je pro kolos Debianu typická.

EmDebian

Gentoo pro ARM a Embedded Gentoo

Obě distribuce najdete v experimentální větvi a v podstatě k nim není dokumentace. Projekt Embdedded Gentoo již nějaký ten pátek existuje. Jeho hlavní cíle najdete ve WIKI, jednotlivá instalační stádia „stages“ najdete v experimentální větvi např. naFTP Silicon Hill. Embedded Gentoo je zaměřeno na malá zařízení a je postaveno na uClibc, jeho instalační stages jsou asi 2× menší než u obecného Gentoo pro ARM. Balíky zřejmě půjde využívat, podobně jako v Debianu, z normální distribuce pro ARM. Gentoo je pro mne znakem značné systematičnosti, a tak to, co najdete na webu, prostě funguje. Bohužel dostupných balíků je zatím příliš málo, aby se dala distribuce plně použít. Pro nadšence ovšem již je na čem vystavět Gentoo na jejich oblíbeném ARM zařízení.

ARMedslack

Je zástupce obecnější ARM distribuce se zaměřením na stolní Acorn RiscPC a Iyonix. Pochybuji ale, že si jeho KDE pustíte na iPAQu.:) V tuto chvíli se autor tváří, že už to skoro má…tak uvidíme.

Armedslack

Nebojte se kompilace pro ARM

Pro kompilaci je záhodno využít tzv. cross-compilace – to jest použít výkonnější a dostupnější platformu x86 a na ní kompilovat přímo binární balíčky pro jinou architekturu. Pro embedded zařízení se využívají toolchainy různých projektů, a to např. z handhelds.org, v současnosti arm-linux-gcc-3.4.1.tar.bz2, debianu nebo openembedded (bitbake). Existuje i projekt zaměřený na vytváření toolchainu, a to Scratchbox.

Samotný postup zpravidla sestává ze tří kroků:

  • stáhne se toolchain,
  • přidá se do cesty a
  • pustí se make (s parametry pro příslušnou architekturu)

Trochu problémy jsou s ./configure  resp. automake. K jejich přelstění se využívá qemu.

Na Debianu lze získat toolchain přes apt-get install dpkg-cross, editaci /etc/dpkg/cross-compile, kde nastavíte základní adresář, a následnou instalací dpkg-cross --arch arm --install libc6_2.3.1-9_arm.deb libc6-dev_2.3.1-9_arm.deb libdb1-compat gcc-arm-linux binutils-arm-linux.

Kompilace pro danou architekturu je v podstatě stejná jako pro x86, problémy s použitím ARMu tedy nejsou na aplikační úrovni, ale na úrovni obsluhy periferních zařízení, jejichž dokumentace je volně dostupná mizerná nebo žádná.

Jak vyvíjet pro ARM (v domácích pomínkách)

Pokud si vystačíte s tím, co vám nativně poskytuje ARM na Skiffu nebo iPAQu, pak pro testování a kompilace lze využít skiffclusterhandhelds.org. Na stroje se lze přihlásit zcela běžně přes telnet na adresách skiffcluster[1–4].handhelds.org (dostupné i SSH) nebo ipaq[0–7].handhelds.org.

Můžete ovšem využít též emulace ARM, a to buď na úrovni systémových volání – tuto emulaci poskytuje qemu-arm (bohužel qemu v tuto chvíli neumí pro ARM emulovat celý systém jako pro x86, ppc nebo sparc), nebo můžete použít některý kompletní emulátor. Nadějně se jeví např. ARMware, který emuluje kompletní systém iPAQ h3600, bohužel se nejedná o open source a dostupné jsou pouze binární balíčky. Dobře vypadá i softgun, neemuluje ale běžný iPAQ, nýbrž Netsilicon NS9750.

Pozn.: Použití qemulace: qemu-arm -L /cesta/arm/root/ /bin/ls kde /cesta/arm/root by měla být cesta ke kompletnímu rootu systému arm. Ten lze získat použitím debootstrap, není to ovšem dokonalé a vyžaduje to trochu zkušeností.

Disclaimer

Tento článek vznikl za účelem konsolidace znalostí ohledně ARMu. Neklade si za cíl být návodem ani komplexním přehledem, ale jakýmsi rozcestníkem do světa ARMovaného Linuxu. Tento svět je přeci jen méně přehledný než x86. Připomínky a diskuse jsou vítány.

CS24_early

Další odkazy

Skript pro vytvoření základního systému z debianu ARM pro HP Jornada 820 – lze použít jako příklad i pro jiné sestavy.

Letmý popis využití QEMU.

Byl pro vás článek přínosný?

Autor článku