unix na mobilních zařízeních - fit.vutbr.czimlich/data/tam/2012-unix-na-mt.pdfopenmoko – gta02...
TRANSCRIPT
TAM 2012 | 1 / 34http://www.fit.vutbr.cz/~imlich/
Unix na mobilních zařízeních
Jozef Mlích
Tvorba aplikací pro mobilní zařízení 21. 11. 2012
Department of Computer Graphics and MultimediaBrno University of Technology, Faculty of Information Technology
Božetěchova 2, 612 66 Brno, Czech [email protected]
TAM 2012 | 2 / 34http://www.fit.vutbr.cz/~imlich/
Obsah
Principy Boot Souborové systémy Komunikace s jádrem Meziprocesová komunikace
(DBUS) GUI (libhildon, qt) Překlad, Vzdálené ladění,
Deployment Emulace, virtualizace Profiling Balíčkování, Prodej
Konkrétní zařízení / distribuce Greenphone, Openmoko Nokia N900 Nokia N9 mer project Jolla Sailfish Tizen Blackberry Playbook, BB10 Android
TAM 2012 | 3 / 34http://www.fit.vutbr.cz/~imlich/
Motivace
Neučit se nové věci (bez toho to asi nepůjde) Nezačínat od nuly v asembleru Zkoumat zdrojové kódy Ohýbat řešení
– Znovupoužívat kód Vyvíjet pro desktop, spouštět na embedded systémech
(telefon, ale i smart tv, řízení klimatizace nebo auto) Tak aby to fungovalo s ostatními
– stejné API– stejné knihovny– stejné principy – Dodržování standardů
například POSIX == PortableOperating System Interface
TAM 2012 | 4 / 34http://www.fit.vutbr.cz/~imlich/
Because iPhone and iPad are too mainstream!
TAM 2012 | 5 / 34http://www.fit.vutbr.cz/~imlich/
Jak může takové mobilní zařízení vypadat?
http://wiki.staxplatform.org/
TAM 2012 | 6 / 34http://www.fit.vutbr.cz/~imlich/
Boot
Co je potřeba?– Procesor, paměť, disk– Obrazovka, Dotyková obrazovka, klavesnice “jsou navíc”
PC vs. Embedded system– BIOS -> primary master (volba/default) -> MBR (grub stage 1)
-> VBR (grub stage 2) -> kernel, initramfs, systemd– Bootloader (adresa natvrdo zadrátovaná do NAND/NOR),
kernel, initramfs, systemd (SYSV init, upstart) Bootstrap
– Příklad problemu: Jak přečíst ext4 partition, když driver je na ext4 partition (atd.)
Bootloader– Často napsané v asembleru, co nejjednodušší– Například u-boot (nebo blob, bootldr, redboot, able)– Co multiboot? “klávesnice” (+,-,home) vs. dotyková obrazovka
TAM 2012 | 7 / 34http://www.fit.vutbr.cz/~imlich/
NAND má jiné fyzikální vlastnosti než klasické disky
FAT– Běžně foťáky, usb klíče– Pozor na patenty!– Neumí symlinky a posixové
oprávnění– Velikostní limity
ext2/3/4, reiserFS, XFS– Desktopové systémy
JFFS2, YAFFS, UBIFS– Journalling Flash File
System
Souborové systémy
TAM 2012 | 8 / 34http://www.fit.vutbr.cz/~imlich/
Greenphone
2006/9 Vývojářské zařízení 300MHz 64MB RAM 240x320 Linux, Qtopia (mobilní Qt)
TAM 2012 | 9 / 34http://www.fit.vutbr.cz/~imlich/
Openmoko – GTA02 Freeruner, GTA04
2008/6 GTA02 (2012/2 GTA04)
Vývojářské zařízení 400 MHz (800 MHz) SDRAM 128MB (512MB) 480x640 Linux (10+ distribucí)
– i Android (2. zařízení celosvětově, 1. v ČR)
– Qt, Gtk, C, C++, Python, ... Opensource je i hardware Celosvětový prodej ~10 000
“telefon, který netelefonuje”
TAM 2012 | 10 / 34http://www.fit.vutbr.cz/~imlich/
PCB
TAM 2012 | 11 / 34http://www.fit.vutbr.cz/~imlich/
Blokové schéma
TAM 2012 | 12 / 34http://www.fit.vutbr.cz/~imlich/
Linux - user space
2006-2008 Malý výkon CPU Málo paměti Špatná podpora knihoven
– Akcelerometry, GPS (/dev/tty) – udev, “gpsd”– LED (gpio) – udev, sysfs, procfs, ..– Správa sítě (gsm, wifi, bluetooth, ir, nfc, usb) – ipconfig,
iptables, network manager, ...– Audio (bluetooth, “hlasitý odposlech”, sluchátka,
fm příjmač/vysílač) – alsa, oss, phonon– Softwarová klávesnice
TAM 2012 | 13 / 34http://www.fit.vutbr.cz/~imlich/
DevFs// bez přerušení
#include <linux/input.h>
int main (int argc, char** argv) { FILE *eventfp = NULL; eventfp = fopen("/dev/input/event3", "rb");
struct input_event buffer[BUFSIZE];
if (fread(buffer, sizeof (struct input_event), BUFSIZE, eventfp) != BUFSIZE) { fprintf(stderr, "fread() failed\n"); exit(1); }
for (int i = 0; i < BUFSIZE; i++) { printf("%d %d %d\n", buffer[i].type, buffer[i].code, buffer[i].value); } fclose(eventfp); return 0;}
struct input_event { struct timeval time; __u16 type; __u16 code; __s32 value;};
TAM 2012 | 14 / 34http://www.fit.vutbr.cz/~imlich/
SysFs, ProcFs
LEDecho 1 > /sys/devices/platform/gta02-led.0/leds\:gta02-aux\:red/brightness
cat /sys/devices/platform/i2c_omap.2/i2c-2/2-0032/leds/lp5523\:channel1/brightness
#!/bin/shecho 0 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio0/directionwhile [ true ]; do echo 1 > /sys/class/gpio/gpio0/value sleep 1 echo 0 > /sys/class/gpio/gpio0/value sleep 1doneecho 0 > /sys/class/gpio/unexport
TAM 2012 | 15 / 34http://www.fit.vutbr.cz/~imlich/
Advanced Linux Sound Architecture
alsamixer alsactl alsastate
WM8753 Codec – Neo Freerunner
control.49 {comment.access 'read write'comment.type INTEGERcomment.count 1comment.range '0 – 3'iface MIXERname 'Mic1 Capture Volume'value 0
}
TAM 2012 | 16 / 34http://www.fit.vutbr.cz/~imlich/
Maemo Linux - Nokia 770, N800, N810, N900
770 -> N900 2005/11 -> 2009/11 tablet -> telefon pro geeky 250MHz -> 600 MHz 64MB -> 256 MB DDR 800x480 Maemo Linux
– Založeno na debianu– libhildon (gtk), qt– C, C++, Python, Bash
Komunitní repozitáře (+Nokia Store)
TAM 2012 | 17 / 34http://www.fit.vutbr.cz/~imlich/
D-Bus
Meziprocesová komunikace– Každý proces zveřejní “API”– D-Feet (gui prohlížeč)– Například “asynchronní rozhraní pro gps”
$ dbus-send --print-reply \ --type=method_call --dest=org.freedesktop.Notifications \ /org/freedesktop/Notifications \ org.freedesktop.Notifications.SystemNoteDialog \ string:'Hello, world!' uint32:0 string:'NAO OK!' \
method return sender=:1.1 -> dest=:1.15 uint32 4
TAM 2012 | 18 / 34http://www.fit.vutbr.cz/~imlich/
GUI z desktopu na mobil
Vykreslování– Framebuffer– X-Server– Wayland (budoucnost?)
Knihovny– (desktop: gtk, qt, efl, fltk, motif, wxwidgets, ..)– “skin” (Dekorace, default velikost tlačítek)– libhildon – upravené gtk (všechny okna jsou přes celou
obrazovku)– qt-components – všechny gui prvky předělané
Je nutné přizpůsobit GUI– Velikost tlačítek, množství zobrazených informací– Dotykový displej (jeden dotyk == kliknutí myší)– Multitouch
TAM 2012 | 19 / 34http://www.fit.vutbr.cz/~imlich/
Nokia N9, Nokia N950
2011/9 Smartfon pro běžné
uživatele 1GHz, 1GB RAM, 854x480 Linux - MeeGo Harmattan
– deb– Qt, QtQuick, C++, QML– Gtk, Python, Bash, atd. lze,
ale nedostane se do Nokia Store
Nokia Store (+komunitní repozitáře)
Vývoj je srovnatelný s Symbian^3 a novějším
TAM 2012 | 20 / 34http://www.fit.vutbr.cz/~imlich/
Překlad
Toolchain– Překladač – arm5/arm7/x86, sizeof(int), big/little endian
export CC=/usr/local/bin/arm-linux-gnueabi-gcc– Knihovny, závislosti
export CFLAGS=-I /usr/local/arm_root/include– qmake myproject.pro -r -spec linux-g++-maemo
– autoreconf && ./configure && make
Host, Target
TAM 2012 | 21 / 34http://www.fit.vutbr.cz/~imlich/
Scratchbox
Umožňuje provozovat současně několik toolchainů jako “OS uvnitř OS”, snadne přepínaná mezi různými “hosts”
“apt-get install” uvnitř ovlivní jen daný toolchain Přepínání toolchainů
– emulovaný (arm+QEMU) – nativní (x86)
GUI v Xephyr (X Server v okně) chroot
$ Xephyr :2 -host-cursor -screen 854x480x16 -dpi 96 -ac +extension Composite & $ scratchbox[sbox-HARMATTAN_X86: ~] > meego-sb-session start
TAM 2012 | 22 / 34http://www.fit.vutbr.cz/~imlich/
Ladění aplikace na hardware
Workflow – Prepare makefile – qmake – Compile – make – Create package – dh_make, etc.– Install package to sysroot
– ssh/scp (generic device), madde– Debug – gdb, gdbserver, valgrind
TAM 2012 | 23 / 34http://www.fit.vutbr.cz/~imlich/
Vzdálené ladění – Symbian
http://www.developer.nokia.com/Community/Wiki/Symbian_OS_Internals/14._Kernel-Side_Debug
TAM 2012 | 24 / 34http://www.fit.vutbr.cz/~imlich/
gprof Běžný smartphone vydrží s
přípojením k internetu ~ 1d Špatně napsaná aplikace
může snížit celkovou výdrž na ~ 3h
Sledujeme například – Zatížení CPU, paměti– Síťový provoz (změnou
timeoutu jabberu +1h)– Počet probuzení (C-states)– Taktovací frekvenci CPU– Přerušení (IRQ)
Profiling, Energy-profiler, powertop
Tip: používejte “heartbeat” v Qt je to třída:
QSystemAlignedTimer maximumInterval: 15 minimumInterval: 5
TAM 2012 | 25 / 34http://www.fit.vutbr.cz/~imlich/
Mer project, Jolla Sailfish
mer-project Snaha znovu vytvořit části
systému, které jsou v MeeGo Harmattan uzavřené
rpm
Jolla Sailfish 2012/12 Linux, podrobnosti? Navazuje na MeeGo
Harmattan, mer project, nemo mobile
#Jolla program na #Slush12 (streda, 21 Nov): UI event o 16 az 17:00 nasho casu
TAM 2012 | 26 / 34http://www.fit.vutbr.cz/~imlich/
2013/Q1 Tizen SDK 2.0 Sloučení s OS Bada Linux
– HTML5, EFL– Gtk, Qt není oficiálně
podporované
Tizen
TAM 2012 | 27 / 34http://www.fit.vutbr.cz/~imlich/
Blackberry Playbook, Blackberry 10
Blackberry Playbook 2011/4 1 GHz, 1GB RAM, 1024x600 QNX
– C, C++, Java, HTML5, Adobe AIR
– Qt
Blackberry 10 2013/1 QNX
– Realtime unix – C, C++, Java, HTML5,
Adobe AIR, Cascades SDK (Qt)
App World
TAM 2012 | 28 / 34http://www.fit.vutbr.cz/~imlich/
Blackberry Playbook
Blackberry Native SDK$ . ~/bbndk-2.1.0/bbndk-env.sh
$ blackberry-connect -targetHost 169.254.0.1 -devicePassword x$ ssh -i ~/.rim/bbt_id_rsa [email protected]
Balíčky *.bar Zip META-INF/MANIFEST.MF bar-descriptor.xml
– (v meego se používa *.desktop viz freedesktop.org)– Lze nastavit proměnné prostředí– název, popisek, ikona
TAM 2012 | 29 / 34http://www.fit.vutbr.cz/~imlich/
Android
2008/9 - ... ~ 4000+ zařízení Linux
– Ne vanilla )-;– C++ s NDK, ale ...– Dalvik, něco jen přes JNI– Bionic vs. Libc– IPC přes binder, ashmem– Qt přes Necessitas– Python for Android, etc.
TAM 2012 | 30 / 34http://www.fit.vutbr.cz/~imlich/
Co se jinam nevešlo
Bezpečnost– sandbox (komunikace
například přes dbus)– aegis (MeeGo Harmattan)– SELinux
Balíčkování– Deb, Rpm, Bar, Jar– Open Build Service– Personal Package Archive
DSP– http://sourceforge.net/projects/dspgateway/– http://elinux.org/images/9/9f/DSPGateway_Celf_Jamboree6.ppt
User Interface– Aplikace by měla vypadat
nativně– http://harmattan-
dev.nokia.com/docs/ux/– https://developer.blackberr
y.com/design/ UEFI
– Secure boot vs. Vendor lock-in
TAM 2012 | 31 / 34http://www.fit.vutbr.cz/~imlich/
Monetizace
Nokia Store– Symbian + MeeGo téměř
stejný program– Podíl na trhu:
Symbianu > WP– MeeGo : Symbian^3,A,B
1 : 9– Registrace 1 EUR– Nákup aplikace – kartou,
“kreditem na volání”– Pravidla nedovolují různé
věci (platby přes jiný systém, porngorafický obsah, apod.)
– Lze dělat aplikaci pouze pro lokální trhy
Monetizace – Blackberry– Podíl na trhu:
BB > WP– App World– Android Aplikace jsou
kompatibilní– Registrace zdarma– Platby přes PayPal účet
TAM 2012 | 32 / 34http://www.fit.vutbr.cz/~imlich/
Shrnutí
Co všechno je potřeba k překladu C/C++ kódu pro linuxový telefon?
Jakým způsobem lze ladit aplikaci přímo na telefonu? Jak přistupovat na hardware? Jaké jsou požadavky na filesystem na mobilním telefonu? Co lze udělat pro snížení spotřeby energie?
TAM 2012 | 33 / 34http://www.fit.vutbr.cz/~imlich/
Shrnutí
Co všechno je potřeba k překladu C/C++ kódu pro linuxový telefon?
– Toolchain (SDK) – Překladač, Knihovny, Chroot, IDE Jakým způsobem lze ladit aplikaci přímo na telefonu?
– scp (madde, dpkg -i), gdb+gdbserver, valgrind, printf Jak přistupovat na hardware?
– API (Qt), DevFS, SysFS, ProcFS, D-Bus Jaké jsou požadavky na filesystem na mobilním telefonu?
– Dobrá životnost NAND, bezpečnost (odcizení), bezpečnost (poškození), rychlost, jednoduchost, patenty, kompatibilita s stolním počítačem, ..
Co lze udělat pro snížení spotřeby energie?– Profiling (CPU), Energy profiling Sleep místo blokujícího čekání,
omezit používání gps, síťová komunikace “v dávkách” (bursts):se(velky blok+sleep) < se(víc malých bl., bez sleep)
TAM 2012 | 34 / 34http://www.fit.vutbr.cz/~imlich/
Doporučená literatura
http://elinux.org/ Karim Yaghmour: Building Embedded Linux Systems, 1st ed.,
O'Reilly Media, 2003. Zucker, Daniel, and Ray Rischpater. Beginning Nokia Apps
Development: Qt and HTML5 for Symbian and MeeGo. Apress, 2010.
Beekmans, Gerard. Linux from Scratch. Iuniverse Inc, 2000.http://www.linuxfromscratch.org/
N900 Qt SDK bug workaround https://bugreports.qt.nokia.com/browse/QTSDK-864
https://www.developer.nokia.com/Community/Wiki/Code_snippets_table_for_common_use_cases Fitzek, Frank H. P., Tommi Mikkonen, and Tony Torp. Qt for
Symbian. John Wiley and Sons, 2010. Hoque, M.A., M. Siekkinen, and J.K. Nurminen. “On the Energy
Efficiency of Proxy-based Traffic Shaping for Mobile Audio Streaming.” In 2011 IEEE Consumer Communications and Networking Conference (CCNC), 891 –895, 2011.