Portál AbcLinuxu, 10. května 2025 20:47
Prvé dve časti miniseriálu o Nokii N900 boli orientované skôr na vlastnosti prístroja pre bežného používateľa. Mnohých čitateľov AbcLinuxu ale asi bude zaujímať, ako vyzerá N900 zvnútra – čo sa týka hardvéru aj softvéru. Tento článok je určený presne pre nich – pozrieme sa na elektroniku vo vnútri N900.
Ako sme si už ukázali, N900 je, ako hybrid počítača a mobilu, viac-menej bez problémov použiteľné zariadenie pre väčšinu záujemcov o pokročilý vreckový prístroj. Užívatelia Linuxu sa však môžu pýtať, do akej miery je možné upraviť si existujúci systém podľa svojich potrieb – zmeniť jadro, chovanie desktopu či použiť iné súborové systémy. V tomto článku sa pokúsime ukázať, čo všetko je „otvorené“ v jadre systému (a je to teda možné skontrolovať/upraviť) – a naopak, v čom treba dôverovať výrobcovi. Rovnako sa pozrieme aj na niektoré zaujímavé technické riešenia použité v N900.
Začneme teda pri hardvéri N900 a ovládačoch použitých v operačnom systéme Maemo 5 (kódové označenie Fremantle). Ako už bolo spomenuté v prvom článku, základom systému je linuxové jadro – konkrétne ide o verziu 2.6.28. Osobne som sa nepúšťal do detailného skúmania, do akej miery ide o vanilla verziu – jeho zdrojové kódy je však možné stiahnuť z repozitára Fremantle. Veľmi príjemným zistením je, že pre väčšinu ovládačov sú dostupné aj zdrojové kódy – aj keď nie všetky sú zatiaľ začlenené v hlavnom strome (detailný prehľad modulov a ich začlenenosti je na konci článku). V praxi to znamená, že aj keď mobil zastará podľa výrobcu a prestane byť podporovaný, ovládače budú stále dostupné a portovateľné aj na novšie jadrá.
V mobilných zariadeniach je vidieť tendenciu integrovať čím ďalej viac funkcionality do niekoľko málo čipov. Ak si pozriete nasledujúce video, ktoré ukazuje rozoberanie N900ky, môžete vidieť, že okrem displaya a pár vstupno-výstupných portov sa v zariadení nachádza len veľmi jemne zaplnená základná doska (zrejme ide o nie príliš modifikovaný System-on-Chip (SoC) dodávaný priamo od Texas Instruments).
Väčšinu čitateľov asi nebude zaujímať, aké ovládače sú použité pre I2C zbernice, DMA radiče a pod. – zameriame sa teda len na hardvérové komponenty podstatné z užívateľského hľadiska. Predne sa autor ospravedlňuje za prípadné chyby/nepresnosti v texte. Berte nasledujúce odstavce teda skôr orientačne než ako hardvérovú príručku.
Základom celého systému je SoC architektúra OMAP 3430, jeden z modernejších členov rodiny architektúr OMAP – s predchodcami ako OMAP 850 (použitý napr. v HTC Wizard), OMAP1 (Nokia 770) a OMAP2 (N8x0). Napriek tomu, že je OMAP3430 jednou z najvýkonnejších mobilných platforiem dostupných na trhu (spolu s Qualcomm Snapdragon a nVidia Tegra), pri dnešnom vývoji zariadení je už aj toto zastarávajúca architektúra – Texas Instruments pred pol rokom oznámila platformu OMAP4, ktorá bude obsahovať až 1GHz+ jadrá (prípadne spojené do dvoj-jadrových procesorov) a podporovať prehrávanie 1080p videí.
Ústredná komponenta architektúry OMAP je procesor typu ARM (na tomto type je založená absolútna väčšina súčasných mobilných architektúr) – ARM Cortex-A8, ktorý je vyrobený 65nm technológiou a taktovaný na 600 MHz. Procesor Cortex je aktuálne najnovšia verzia architektúry – ARMv7, typicky dosahuje výkon pod 2000 MIPS, má nízku spotrebu (celý procesor v rádoch stoviek mW) a je použitý aj v Apple iPhone 3GS, Sony Ericsson Satio, Motorola Droid, Pandora či vo vývojovej doske BeagleBoard. Mimochodom, posledné spomenuté zariadenie (BeagleBoard) je dostupné za cenu 149 USD – je teda veľmi zaujímavou možnosťou pre všetkých záujemcov o platformu OMAP 3430.
Veľkú časť funkcionality N900 zabezpečuje čip TWL4030. Poskytuje napr. funkcie na správu napájania, USB transciever, real time hodinky, rozhranie pre hardvérovú klávesnicu, watchdogy, audio kodeky a zosilňovače atď. Množstvu funkcií, ktoré čip poskytuje, zodpovedá aj počet ovládačov v systéme – KEYBOARD_TWL4030 (konfiguračný parameter jadra CONFIG_KEYBOARD_TWL4030), TWL4030_MADC, TWL4030_PWRBUTTON, TWL4030_POWEROFF, GPIO_TWL4030, TWL4030_WATCHDOG (kompilovaný ako modul), TWL4030_CORE, TWL4030_POWER, TWL4030_USB, LEDS_TWL4030_VIBRA (modul), RTC_DRV_TWL4030 (modul), REGULATOR_TWL4030. Väčšina modulov má samovysvetľujúci názov, preto ich nebudeme popisovať bližšie (záujemci si iste detailnejšie informácie dohľadajú sami).
Ovládače pamäťových zariadení oneNAND a eMMC (MTD_ONENAND, MTD_ONENAND_OMAP2) umožňujú prístup k oneNAND 256MB flash čipu a k 32GB eMMC čipu. Rozšíriť túto kapacitu je možné cez slot na microSDHC karty, ktorý je ovládaný pomocou SDHC radiča (a modulu MMC_OMAP_HS).
Základným komunikačným prostriedkom N900 je USB rozhranie. TWL4030 síce podľa špecifikácií podporuje až 4 USB kontroléry (1× OTG a 3× HiSpeed host), ale na N900 je zapojený len jeden. A aj keď je na vonkajší USB konektor zrejme pripojený práve OTG kontrolér (pravdepodobne cez PHY čip ISP1707, ktorý je napojený na ULPI port TWL4030), ID pin konektoru nie je korektne pripojený – aj vďaka tomu funguje kontrolér iba v klientskom režime. OTG kontrolér chipsetu je odvodený od „štandardu“ MUSBMHDRC a vďaka tomu je preň použitý relatívne generický ovládač MUSB_HRDC. Možno len z historických dôvodov sú v jadre skompilované aj moduly ARCH_OMAP_OTG, USB_OTG, USB_MUSB_OTG a USB_OTG_UTILS – ale keby niekto chcel skúmať tému „N900 vs. USB OTG“ ďalej, zaujímavý fakt je, že napr. spomínaný BeagleBoard USB OTG podporuje.
Aj v klientskom režime však USB rozhranie N900 poskytuje mnoho možností – po pripojení kábla (pokiaľ nejde iba o nabíjačku) dostane užívateľ na výber medzi mass storage a PC suite módom. Podľa výberu v GUI sa načíta buď usb gadget modul g_file_storage, ktorý sprístupní FAT oddiel zariadenia (v aktuálnom firmware sa vždy sprístupní /dev/mmcblk0p1) – alebo sa načíta modul g_nokia, ktorý vytvorí viacero USB funkcií (USB CDC/Phonet + obex + sériový + ethernetový port).
Často používané budú aj Bluetooth a Wifi rozhrania. Wifi je v zariadení implementované pomocou čipu TI WL1251 (moduly WL12XX a WL1251, ktoré využívajú štandardnú vrstvu mac80211 – a v samotnom wifi zariadení sa samozrejme používa nejaký ten uzavretý firmware. Bluetooth modul je podľa všetkého integrovaný s FM prijímačom (podporujúcim aj RDS) – BCM2048. Na jeho ovládanie sa používa jednak modul jadra HCI_H4P (+ ďalší firmware) – a na FM rádio I2C_BCM2048.
FM vysielač (zrejme digitálny, podporujúci aj RDS) je realizovaný pomocou čipu si4713 (FMTX_SI4713).
Ak by tu niekto hľadal ovládače pre GSM/3G modem, asi bude sklamaný – s modemom sa komunikuje iba pomocou AT (a potenciálne ďalších) príkazov, audio je distribuované pomocou McBSP zbernice (podobne ako je to vyriešené aj vo Freerunnerovi). Nad modemom sa už ale napríklad podarilo rozbehať opensource oFono stack – takže je dobrá šanca, že ani GSM komponenta N900 neupadne do „nepodporovateľného stavu“. Podobne (uzatvorene) je na tom aj GPS zariadenie – aktuálne jediná možnosť, ako s ním komunikovať, je nepriamo, pomocou location API od Nokie (to je ale implementované už v user-space).
Poslednou súčasťou systému umožňujúcou komunikáciu s okolitým svetom je prítomný infračervený modul – podľa všetkého však ide iba o „vysielač“, obsluhovaný modulom LIRC_RX51 (ktorý je paradoxne umiestnený v strome drivers/input).
Dostávame sa k tradičným kameňom úrazu ovládačov pre Linux – k multimediálnym zariadeniam, pre ktoré často nie sú dostupné žiadne (alebo len čo do funkčnosti obmedzené) open source ovládače.
Dobre je na tom audio systém – na správu zvuku je použitá architektúra ALSA (a na aplikačnej vrstve potom aj PulseAudio), spolu s modulmi ako SND_OMAP_SOC_RX51 a OMAP-MCBSP.
Grafické rozhranie N900 je tvorené skupinou zariadení, ku ktorým náležia ovládače framebufferu (FB_OMAP2) a display subsystému (OMAP2_DSS) – oboje sú opensource… Samotný display zariadenia s rozlíšením 800×480/267 ppi je ovládaný pomocou modulov ACX565AKM (umožňuje napr. zmenu intenzity podsvietenia) a TSC2005 (ovládač dotykovej vrstvy, ktorý je ešte doplnený ovládačom pre X server tslib – tiež open source).
Prítomný grafický akcelerátor PowerVR SGX530 je ovládaný pomocou modulu X servera (viď balík xserver-xorg-video-fbdev), ktorý obsahuje zdrojové kódy k akcelerácii 2D operácií (napr. „kompozitné operácie“) a XVideo-a. Čo sa týka akcelerácie 3D operácií, tu zrejme po skúsenostiach z desktopu nik neočakáva prekvapenia – modul jadra pvrsvrkm (voľba CONFIG_PVR v konfigurácii jadra) je síce open source (po zbežnom prehliadnutí to sú zrejme poväčšine iba stuby), user-space kód je ale dodávaný iba vo forme binárnych súborov.
Veľmi špeciálnou časťou architektúry OMAP3430 je subsystém IVA2 (Image, video and audio accelerator), ktorého základnou časťou je TMS320C64x – digital signal processor architektúry VLIW, bežiaci na frekvencii 430 MHz. Najsilnejšou stránkou tohoto koprocesora je v spracovanie istom zmysle veľkých (väčšinou multimediálnych) dát – pomocou neho je možné výrazne akcelerovať dekódovanie videa, vykonávať rýchlu Fourierovu transformáciu a podobne. Čo sa týka ovládačov, tie sa mi nepodarilo príliš preskúmať – sú dostupné nejaké viac-menej proprietárne prekladače z vyššieho jazyka do bináriek pre tento procesor. Na druhej strane, v dokumentácii chipsetu je tento popísaný vcelku podrobne, vrátane blokových štruktúr a popisu registrov – myslím teda, že open-source programovaniu pre tento koprocesor nie sú kladané žiadne vážnejšie prekážky.
Veľmi často používanými zariadeniami budú aj ovládače kamier – oba sú implementované cez architektúru V4L2 (takže napr. príkaz mplayer tv:// zobrazí obraz zo zadnej kamery). Predná kamera je jednoduchá VGA kamerka, umožňujúca len úpravu gain-u a expozície. V jadre má open ovládač smia-sensor a k nemu patrí aj nejaký ten firmware.
Zadná kamera už je zložitejšia – okrem 5Mpix snímacieho čipu (ET8EK8 + firmware, umožňuje taktiež len úpravu gain a expozície) k nej patrí aj zaostrovacie zariadenie AD5820 (pohybuje optikou kamery) a prídavný blesk ADP1653 (obsahuje 2 biele diódy, ktoré môžu svietiť buď krátko a silno, alebo slabšie a dlho + 1 červenú indikačnú diódu). Funkcie automatického zaostrenia, automatického vyváženia bielej atď. sú už riešené softvérovo (a proprietárne; na to ako sa pozrieme možno inokedy).
Oba moduly ďalej využívajú image signal processor, cez modul ISP, ktorý akceleruje niektoré operácie s obrazom z kamier (zmena veľkosti, úprava kontrastu, zmena farebných priestorov medzi RGB-YUV). Podobne ako k čipu DSP, aj k ISP existuje technická dokumentácia.
Kryt batérie N900 slúži zároveň ako kryt fotoaparátu. Zaujímavé je bezkontaktné riešenie detekcie jeho otvorenia – pomocou optického detektora a čierno-bieleho prúžku (viď ďalší obrázok), pričom v jadre sa stav open/closed dá zistiť cez GPIO port (cam_shutter). Podobne bezkontaktne je riešená aj detekcia otvorenej klávesnice (GPIO „port“ slide) – tu sa ale zrejme používa detekcia pomocou magnetu a detektoru.
Dostávame sa k zvyšku hardvéru, ktorý už nie sú až taký zaujímavý – ale aj práca s týmito mini-zariadeniami môže byť z pohľadu vývojára zábavná.
Už takmer štandardným komponentom mobilov je akcelerometer. V N900 je riešený pomocou čipu lis302dl a je k nemu dostupný open source ovládač. Medzi ďalšie snímače okolia patria snímač intenzity okolitého osvetlenia TSL2563 (taktiež open source) a snímač priblíženia (zrejme nič špeciálne, len nejaký detektor napojený na jeden z GPIO kontaktov). Ďalej je možné v zozname hardvéru nájsť napríklad zosilňovač audia TPA6130A2 či audio kodeky TLV320AIC3X (modul Alsa SND_SOC_TLV320AIC3X).
Poslednou skupinou komponentov, ktorú tu spomenieme, je skupina diód, ktorá je ovládaná čipom LP5523. Okrem stavových farebných diód vedľa displaya tento čip ovláda aj podsvietenie klávesnice. Toto podsvietenie je tvorené 6 samostatnými diódami (možné „overiť“ pomocou príkazov alla echo 255 > /sys/class/leds/lp5523:kb1/brightness
), stavové diódy sú tri – červená, zelená a modrá (keď svietia zároveň, ich farba je blízka bielej až modro-bielej). Funkciou, ktorá výrazne šetrí baterku pri zložitejších farebných efektoch, je možnosť programovať čip LP5523 tak, aby okrem stáleho svietenia/zhasnutia mohli diódy aj plynule meniť intenzitu a pod. (inak by sa kvôli zmenám intenzity musel budiť procesor).
Týmto sme vyčerpali všetky dôležité komponenty N900. Nasleduje ešte prehľad modulov v jadre, ktoré sú špecifické pre N900:
Zariadenie | Open source | Firmware | V upstreame | Poznámka |
TWL4030* | × | × | V upstreame chýba napr. modul pre powerbutton N900 (zrejme ide o hw riešenia, ktoré nikto mimo Nokie nepoužije). | |
oneNAND/MMC | × | × | ||
USB | × | × | ||
Wifi (WL1251) | × | × | × | |
Bluetooth (HCI_H4P) | × | × | ||
FM Rádio (BCM2048) | × | |||
FM Vysielač | × | × | ||
GSM | × | |||
GPS | × | |||
Audio | × | (s upstreamom to bude asi podobne ako pri TWL4030_PWRBUTTON) | ||
Framebuffer/podsvietenie displaya/touchscreen | × | |||
PowerVR SGX530/2D | × | kernel modul + X server modul | ||
PowerVR SGX530/3D | ? | opensource kernel modul + binárny user space kód | ||
IVA2 + ISP | ? | Tu viac menej nejde o ovládače, ale o možnosť vlastného naprogramovania koprocesorov – a to by nemal byť problém. | ||
Kamery (senzory + ďalší hardvér) | × | × | ||
Akcelerometer (LIS302DL) | × | |||
Snímač intenzity osvetlenia (TSL2563) | × | |||
Audio-zosilňovač (TPA6130A2) | × | |||
Audio-kodeky (TLV320AIC3X) | × | × | ||
LED diódy (LP5523) | × |
Zo zoznamu hardvéru a použitých ovládačov je vidno, že aj pre bežného linux-geeka, ktorý doteraz používal napr. Freerunnera, je N900 veľmi zaujímavým zariadením. Obsahuje veľmi výkonné komponenty, no napriek tomu sú k väčšine z nich dostupné otvorené ovládače. Nehrozí teda, že by po skončení podpory od Nokie človek musel zariadenie používať s out-of-date softvérom – minimálne čo sa týka ovládačov.
Na druhej strane vidno, že zďaleka nie všetky ovládače sú už začlenené aj v upstreame – v niektorých prípadoch celkom logicky, v iných to je možno otázka času (a doprogramovania ovládačov do stavu prijateľného pre upstream jadro).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.