OLinuXino A13 WIFI - výkonnejší konkurent Raspberry Pi

03.07.2013 22:00 | Články | Miroslav Bendík
OLinuXino je vývojová doska s (prevažne) otvoreným hardvérom a softvérom. Verzie dosiek s NAND pamäťou obsahujú vstavaný Android. Pomocou MikroSD karty sa však dá spustiť aj obyčajný Linuxový desktop. V dnešnom článku sa pozrieme bližšie na túto dosku a periférie ako dotykový TFT panel a wifi.

Základné informácie

Dosky OLinuXino sú dostupné v rôznych variantoch. Ja sa budem venovať najvyššiemu modelu, ale celý text (okrem wifi modulu a popisu hardvéru) sa bude týkať aj nižších modelov.

Hardvér

Doska je osadená procesorom Cortex A8 taktovaným na 1GHz v puzdre Allwinner A13. V tom istom puzdre je zároveň grafika Mali 400. Na doske ďalej nájdeme pamäť 2x256MB RAM a 4GB NAND pamäte s napáleným Androidom. Priamo k doske je možné pripojiť dotykový 7", alebo 10" LCD.

  • procesor A13 Cortex A8, taktovaný na 1GHz
  • grafika Mali 400
  • 512 MB RAM
  • 4GB NAND flash
  • 3x USB (+1 interná osadená WiFi modulom)
  • 1 USB OTG
  • Konektor na pripojenie LCD
  • VGA
  • Zvukový vstup / výstup
  • RTC (PCF8536)
  • UEXT + GPIO (68/74 pinov)
  • WIFI-RTL8188

Otvorenosť

Mnoho ľudí porovnávajú OLinuXino s Raspberry Pi. OLinuXino je v mnohých ohľadoch otvorenejšie než Raspberry Pi. Nie všetky časti sú však úplne otvorené.

Po hardvérovej stránke sú tieto dosky výrazne rozdielne. OLinuXino je založené na bežne dostupných obvodoch (žiaden ťažko dostupný SoC). Softvér aj hardvér sú open source a sú dostupné priamo v repozitároch výrobcu. Vďaka voľbe komponentov je možné s vhodnou technikou vyrobiť si vlastnú dosku 100% kompatibilnú s OLinuXinom.

Raspberry Pi

Raspberry Pi, fotené v práci

LCD

K OLinuXinu sa dajú zakúpiť rôzne rozširujúce moduly. Jedným z nich je aj dotykové LCD. To sa však dodáva v tak trochu rozloženom stave. Rezistívna dotyková vrstva sa musí po stiahnutí ochranných fólii pripevniť k LCD napríklad lepiacou páskou (nič proti používaniu nepripevnenej dotykovej vrstvy ;-)).

K LCD stačí už len pripojiť konektor dotykovej vrstvy a pomocou 40-pinového kábla prepojiť LCD s doskou cez LCD konektor. Po zapojení napájania by mal automaticky naštartovať Android. LCD neposiela žiadnu informáciu o rozlíšení. Na NAND je obraz Androidu pre rozlíšenie 800x600. Akékoľvek iné LCD bude fungovať zle.

TFT panely od olimexu s dotykovou vrstvou sú zle čitateľné pri priamom slnečnom svetle. Pozorovací uhol je pomerne malý (40-70° podľa smeru). Rátať treba aj s pomerne veľkou vzduchovou medzerou medzi LCD a dotykovou vrstvou a mierne mliečnym vzhľadom. Pri použití v miestnosti to však nespôsobuje žiadne problémy. Dotyková vrstva reaguje v strednej časti dosť nepresne na dotyk prstom. Na necht, alebo stylus reaguje veľmi presne a rýchlo.

OLinuXino LCD

Debugging

Pre debugovanie takýchto zariadení je prakticky nutnosťou USART. Inštalácia USART-u je jednoduchá, stačí pripojiť 3 piny USART konektor a druhý koniec USART kábla pripojiť do USB na počítači. Na konzolu Linuxu bežiaceho na OLinuXine sa bude dať dostať príkazom:

screen /dev/ttyUSB0 115200

Štandardný linux

Bootovateľné obrazy Linuxu sú dostupné priamo na A13 wiki. Najlepšiu podporu má v súčasnosti debian. Obrazy debianu majú samostatnú wiki stránku.

Vytvoriť bootovateľné SD médium je pomerne jednoduché (ale nebezpečné, na príkaz dd treba dávať pozor a najlepšie ho aspoň 5x skontrolovať!). Samotná SD karta sa napáli príkazom:

dd bs=4M oflag=sync if=obraz.img of=/dev/sdX

kde X je písmeno zariadenia s SD kartou. Tento príkaz sa spúšťa pod rootom a pri preklepe napr. sda namiesto sdb sa nenávratne prepíše prepíše tabuľka rozdelenia disku a časť dát na disku!

Nastavenie rozlíšenia má na starosti súbor script.bin na prvej partícii SD karty. Súbory script.bin pre rôzne rozlíšenia sú dostupné u výrobcu hardvéru. Po vytvorení bootovateľnej SD karty stačí niektorý script.bin (podľa rozlíšenia) skopírovať na prvú partíciu SD. Inštrukcie na konfiguráciu debianu sú na tejto stránke.

OLinuXino Debian OLinuXino Xfce

Vlastný skript je možné vytvoriť aj pomocou kompilátora fex2bin, alebo bin2fex z nástrojov sunxi-tools

Kompilácia vlastného systému

Debian je síce pekná distribúcia, ale pre väčšinu bežných embedded zariadení sa vytvára vlastná "distribúcia". Našťastie tento proces nie je zložitý (vďaka pripraveným skriptom). V prípade OLinuXina je možné použiť buildroot s niekoľkými patchmi priamo pre OLinuXino. Môj fork buildroot-u je dostupný na GitHube.

Nasledujúce príkazy stiahnu buildroot a vytvoria komprimovaný obraz koreňového adresára (rootfs).

$ git clone git://github.com/mireq/buildroot-a13-olinuxino.git
$ cd buildroot-a13-olinuxino
$ make a13_olinuxino_defconfig
$ make

Ak sú nainštalované základné závislosti (kompilátor a pod.) budeme mať po niekoľkých minútach skompilovaný root filesystém. Obraz SD karty sa vytvorí príkazom, ktorý make vypísal na poslednom riadku napr.

# sudo board/a13_olinuxino/make-sdimg.sh \
    /home/mirec/buildroot-a13-olinuxino/output/images/rootfs.tar 60 \
    /home/mirec/buildroot-a13-olinuxino/output/images

Po pár sekundách by sa mala objaviť informácia o tom ako približne obraz disku skopírovať na SD kartu. V príkaze bude pravdepodobne nutné zmeniť argument of= na správnu cestu k zariadeniu SD karty.

# sudo dd if=/home/mirec/buildroot-a13-olinuxino/output/images/a13_olinuxino.sdimg of=/dev/sdb

Konzola by mala byť po nabootovaní OLinuXina dostupná cez USART (screen /dev/ttyUSB0 115200).

Framebuffer

Štandardná konfigurácia kernelu neobsahuje obládač GPIO pre LCD. Ten sa musí zapnúť ručne v konfigurácii kenehu. V adresári so zdrojákmi buildrootu teda spustíme make linux-menuconfig a vyberieme voľbu: Device Drivers -> Misc devices -> An ugly sun4i gpio driver.

Sun4i-gpio

Po rekompilácii (make) a napálení novej flash môžme cez konzolu (USART) zaviesť modul a vyskúšať /dev/fb0.

# modprobe sun4i-gpio
# cat /dev/urandom > /dev/fb0

Dotykový panel

Dotykový panel je obsluhovaný modulom sun4i-ts. Po jeho zavedení sa vo výpise dmesg objavia informácie o zariadení.

sun4i-ts: tp_screen_size is 5 inch.
sun4i-ts: tp_regidity_level is 5.
sun4i-ts: tp_press_threshold_enable is 0.
sun4i-ts: rtp_sensitive_level is 15.
sun4i-ts: rtp_exchange_x_y_flag is 0.
sun4i-ts.c: sun4i_ts_probe: start...
begin get platform resourec
input: sun4i-ts as /devices/platform/sun4i-ts/input/input1

Zariadenie využíva knižnica tslib (dá za povoliť cez make menuconfig v koreňovom adresári buildrootu a menu Package Selection for the target -> Libraries -> Hardware handling -> tslib). Po inštalácii sa dotykový panel kalibruje nasledujúcimi príkazmi. Exporty je možné pridať do /etc/profile, potom zostane len posledný príkaz.

$ export TSLIB_TSEVENTTYPE=raw
$ export TSLIB_CONSOLEDEVICE=none
$ export TSLIB_FBDEVICE=/dev/fb0
$ export TSLIB_TSDEVICE=/dev/input/event1
$ export TSLIB_CALIBFILE=/etc/pointercal
$ ts_calibrate
ts calibrate

Grafické knižnice

Výber knižníc v našom minimalistickom systéme môžme ovplyvniť cez menuconfig buildrootu. V koreňovom adresári buildrootu stačí zadať príkaz a v menu Package Selection for the target -> Graphic libraries and applications (graphic/text).

make menuconfig
Arthur (Qt4) Raycast (Qt4)

Pre Qt4 stačí vybrať správny grafický driver (Linux Framebuffer) a vstupné zariadenie (Mouse drivers -> tslib). Po inštalácii by mali aplikácie fungovať po zadaní nasledujúcich príkazov:

$ export TSLIB_TSEVENTTYPE=raw
$ export TSLIB_CONSOLEDEVICE=none
$ export TSLIB_FBDEVICE=/dev/fb0
$ export TSLIB_TSDEVICE=/dev/input/event1
$ export TSLIB_CALIBFILE=/etc/pointercal
$ export QWS_MOUSE_PROTO=Tslib:/dev/input/event1
$ ./qt-aplikacia -qws

Ovládače Mali400

Výrobca hardvéru dodáva binárne ovládače Mali400 pre Linux. Sú však kompatibilné len s glibc, pričom buildroot používa uclibc.

Mali 400

Riešením je kompilácia externého toolchainu (napr. Crosstool-NG) s eglibc (čo je glibc pre embedded systémy binárne kompatibilné s glibc) a hard float pointom.

$ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.9.3.tar.bz2
$ tar xjf crosstool-ng-1.9.3.tar.bz2
$ cd crosstool-ng-1.9.3
$ ./configure --prefix=/some/place
$ make
# make install
$ ct-ng arm-unknown-linux-gnueabi
$ ct-ng menuconfig

-----------
Nastavenie:

Target options / Emit assembly for CPU / cortex-a8
Target options / Tune for CPU / cortex-a8
Target options / Use specific FPU / vfp
General toolchain options / Tuple's alias / arm-linux-gnueabi (kvôli ovládačom mali400)
Operating System / Target OS / linux
Operating System / Linux kernel version / 2.6.32.60
C compiler / C++
-----------

$ ct-ng build

Následne v buildroote:

Toolchain / Toolchain type / External toolchain
Toolchain / Toolchain origin / Pre-installed toolchain
Toolchain / Toolchain path / nastaviť cestu
Toolchain / Toolchain prefix / $(ARCH)-linux-gnueabi
Toolchain / Toolchain has C++ support / y
Package Selection for the target / Hardware handling / mali400

Po týchto nastaveniach bude možné skompilovať Qt5 aj s podporou OpenGL ES2. K exportom stačí pridať nasledujúce riadky:

export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_EGLFS_HIDECURSOR=1

Qt 5 by následne malo fungovať ako na tomto videu (nie sú potrebné žiadne voľby ako -qws v Qt 4).


Verdikt

OLinuXino je veľmi zaujímavá alternatíva k Raspberry Pi. Veľké pozitívum je prakticky okamžité fungovanie dostupných LCD modulov. Na druhej strane LCD moduly nedosahujú ani z ďaleka kvalitu panelov používaných v tabletoch. Cena sa u základných modelov pohybuje mierne vyššie než je to u Raspberry Pi. Ceny však nie sú dotované.

    • RE: OLinuXino A13 WIFI - výkonnejší konkurent Raspberry Pi 04.07.2013 | 10:25
      Avatar bedňa antiX, Devuan, LegacyIce  Administrátor
      An ugly sun4i gpio driver
      To bude pekný kus kódu :)

      Inak dík za článok, tiež sa na niečo podobné chystám, tak sa to hodí.
      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
    • RE: OLinuXino A13 WIFI - výkonnejší konkurent Raspberry Pi 03.09.2013 | 15:59
      Avatar Bubo   Návštevník
      Da sa k tomu ptipojit aj usb kamera?
      • RE: OLinuXino A13 WIFI - výkonnejší konkurent Raspberry Pi 05.09.2013 | 14:15
        Avatar bedňa antiX, Devuan, LegacyIce  Administrátor
        Pokiaľ je k nej ovládač, tak nevidím problém.
        Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org