18.10.2005 21:16

ARM - Linux není jen x86

Tento článek vyšel původne na serveru root.cz.

Teprve v momentě, kdy sáhnete po jiné platformě něž 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í - at 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č tyto 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 rootu). 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 o to, že dnes Linuxový kernel běží na ARM procesorech, má Russell King, který je do dnes 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é Window CE/Handhelds/Mobile 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 (ne jen 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 (min. 2) 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 se zdá probíhá bouřlivý vývoj  - alespoň podle posledního Newsletteru.

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 Emdebian bude začleňovat do, nebo naopak vyčleňovat z, Debianu. Musím bohužel konstatovat, že tato nepružnost je pro kolos Debianu typická.

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 2x 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.

Nebojte se kompilace pro ARM

Pro kompilace 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 sice Scratchbox.

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

Trochu problémy jsou s ./configure resp. automake. K jeho 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 skiffcluster z handhelds.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 chvili neumí pro ARM emulovat celý systém jako pro x86, ppc nebo sparc), nebo 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/lskde /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.

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

Email comment