Nokia N810: Kompilace dalších aplikací

6. 5. 2008
Doba čtení: 5 minut

Sdílet

V minulých článcích o internetovém tabletu Nokia N810 jsme prošli dostupný hardware a software. Pro běžného uživatele je výběr software dostatečně bohatý, správný geek si ovšem časem najde něco, co ke stažení není, a co je třeba zkompilovat. Tento závěrečný díl tedy věnujeme metodám cross-kompilace.

Nejprve si zkompilujeme jednoduchý program v C a poté nový jaderný modul. Postupy jsou ozkoušené na Gentoo Linuxu, s mírnými obměnami by ale měly fungovat na většině standardních distribucí.

Pokud stojíme před úkolem zkompilovat si pro ARM architekturu jednoduchý program, který nezávisí na příliš mnoha knihovnách, utilita crossdev je přesně to, co potřebujeme. S její pomocí snadno vybudujeme potřebný cross-compilation toolchain (omlouvám se za anglicismus, ale zní to lépe než křížově-kompilační nástrojový řetěz. Crossdev je skript určený pro Gentoo, instaluje se standardně:

$ emerge -v crossdev

Uživatelé distribucí postavených na Debianu mohou využít balíčku dpkg-cross. Vybudování toolchainu je otázka jednoho příkazu – který poběží dost dlouho, na to jsou ale uživatele Gentoo zvyklí.

USE=-* crossdev -s4 -t arm-none-linux-gnueabi

Nyní máme připravený gcc kompilátor pro ARM architekturu, můžeme ho použít ke kompilaci jednoduchého programu. Tradiční hello world program přeskočíme a postup si předvedeme na o něco zajímavějším dostupném DoS PoC pro rpc.metad na Solaris 10. Pokud netušíte, co to znamená, tak se tím netrapte, prostě je to jednoduchý program v jazyce C.

michael@citadela ~ $ arm-none-linux-gnueabi-gcc -o xpl rpc.metadex.c
rpc.metadex.c: In function 'main':
rpc.metadex.c:68: warning: passing argument 3 of 'cl->cl_ops->cl_call' from incompatible pointer type
rpc.metadex.c:68: warning: passing argument 4 of 'cl->cl_ops->cl_call' from incompatible pointer type
rpc.metadex.c:68: warning: passing argument 5 of 'cl->cl_ops->cl_call' from incompatible pointer type
michael@citadela ~ $ file xpl
xpl: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.14, dynamically linked (uses shared libs), not stripped

Po zkopírování na N810 a spuštění se dočkáme kýženého výstupu

Nokia-N810-50-2:/home/user# ./xpl 192.168.1.3
rpc.metad for solaris 10

Using version 2 and request no. 6!!
timeout=0 error: RPC: Remote system error - Connection refused

V uvedeném případě jsme se daleko nedostali, na cílovém stroji žádné RPC neběží.

Pro kompilaci jádra zvolíme jinou cestu cross-kompilace. Pomocí utility scratchbox vytvoříme prostředí N810 s emulací ARM procesoru užitím Qemu. Scratchbox má balíky primárně pro Debian, v portage se nenachází, jsou ale dostupné pro Gentoo v sunrise overlay. Instalace overlay je jednoduchá:

$ emerge -va layman
$ layman -f -a sunrise
$ echo "source /usr/portage/local/layman/make.conf" >> /etc/make.conf

Nainstalujeme Scratchbox dle přímočarého návodu na wiki. Jakmile je instalační procedura hotová, můžeme vstoupit do emulovaného prostředí

michael@citadela ~ $ /opt/scratchbox/login

Welcome to Scratchbox, the cross-compilation toolkit!

Use 'sb-menu' to change your compilation target.
See /scratchbox/doc/ for documentation.

[sbox-arm-elf: ~] >

Nyní je třeba vytvořit patřičný target pomocí programu sb-menu. Dostačující volby jsou cs2005q3.2-glibc-arm jako kompilátor, perl, debian a cputransp jako devkits, qemu-arm jako transparency method a správný rootstrap. Po nainstalování rootstrapu je ještě vhodné doinstalovat všechny dostupné soubory a nechat se přepnout na target.

Existují postupy, jak zprovoznit kompletní prostředí Maemo Linux včetně grafického prostředí, to ale není naším cílem. Náš úkol bude kompilace jaderného modulu usbserial, který nám umožní přes USB kabel zprovoznit Zigbee sniffer MACDongle. To je opět spíše pro demonstraci, zařízení, která se připojují pomocí virtuálních sériových portů, je celá řada.

Nejprve nainstalujeme zdrojáky jádra

[sbox-arm-elf: ~] > apt-get source kernel-source-rx-34
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 56.8MB of source archives.
Get:1 http://repository.maemo.org chinook/free kernel-source-rx-34 2.6.21.0-osso71 (dsc) [458B]
Get:2 http://repository.maemo.org chinook/free kernel-source-rx-34 2.6.21.0-osso71 (tar) [55.8MB]
Get:3 http://repository.maemo.org chinook/free kernel-source-rx-34 2.6.21.0-osso71 (diff) [926kB]
Fetched 56.8MB in 2m37s (361kB/s)
dpkg-source: warning: extracting unsigned source package (./kernel-source-rx-34_2.6.21.0-osso71.dsc)
dpkg-source: extracting kernel-source-rx-34 in kernel-source-rx-34-2.6.21.0
dpkg-source: unpacking kernel-source-rx-34_2.6.21.0.orig.tar.gz
dpkg-source: applying ./kernel-source-rx-34_2.6.21.0-osso71.diff.gz

Potom zavedeme standardní konfiguraci pro N810

[sbox-arm-elf: ~] > cd kernel-source-rx-34-2.6.21.0/
[sbox-arm-elf: ~/kernel-source-rx-34-2.6.21.0] > make nokia_2420_defconfig

Nyní pomocí našeho oblíbeného editoru upravíme soubor .config – přidáme podporu pro usbserial

#
# USB Serial Converter support
#
 CONFIG_USB_SERIAL=m

a spustíme oldconfig. Po dotázání na detaily usbserial driveru nesmíme zapomenout na Generic Serial Driver.

[sbox-arm-elf: ~/kernel-source-rx-34-2.6.21.0] > make oldconfig
.
.
.
* USB port drivers
*
*
* USB Serial Converter support
*
USB Serial Converter support (USB_SERIAL) [N/m/y/?] (NEW) m
  USB Generic Serial Driver (USB_SERIAL_GENERIC) [N/y/?] (NEW) y

Nyní již zbývá jenom zkompilovat moduly

[sbox-arm-elf: ~/kernel-source-rx-34-2.6.21.0] > make modules

a nakopírovat výsledný usbserial.ko do nokie. MACDongle se připojí na USB kabel pomocí redukce popsané v prvním díle našeho seriálu.

Jednoduchý testovací program na komunikaci přes seriový port je pyserial, který stačí rozbalit na vhodném místě.

bitcoin školení listopad 24

Nokia-N810-50-2:/home/user# insmod usbserial.ko vendor=0x0B40 product=0x0111
Nokia-N810-50-2:/home/user# ls -l /dev/ | grep -i usb
crw-rw----    1 root     dialout  188,   0 May  3 14:44 ttyUSB0
crw-rw----    1 root     root     252,   0 Apr 30 16:46 usbdev1.1_ep00
crw-rw----    1 root     root     252,   1 Apr 30 16:46 usbdev1.1_ep81
crw-rw----    1 root     root     252,   2 May  3 14:44 usbdev1.7_ep00
crw-rw----    1 root     root     252,   4 May  3 14:44 usbdev1.7_ep03
crw-rw----    1 root     root     252,   3 May  3 14:44 usbdev1.7_ep82
crw-rw----    1 root     root     252,   5 May  3 14:44 usbdev1.7_ep83
Nokia-N810-50-2:/home/user# cd /media/mmc2/pyserial-2.2/
Nokia-N810-50-2:/media/mmc2/pyserial-2.2# export PYTHONPATH=/media/mmc2/pyserial-2.2/
Nokia-N810-50-2:/media/mmc2/pyserial-2.2# python examples/miniterm.py --port /dev/ttyUSB0
--- Miniterm --- type Ctrl-D to quit
00


+MSTC=0051

Jak je vidět, MACDongle je nyní přístupný na /dev/ttyUSB0 a komunikuje správně. Uvedený postup umožnuje podstatně rozšířit množinu hardware kompatibilního s N810, pokud se nám ho k tabletu podaří fyzicky připojit, z celého množství návodů uvádíme pro ilustraci Arduino board, kameru nočního vidění nebo Ethernet adaptér.

Na závěr našeho seriálu lze zhodnotit, že volba Linuxu jako OS pro internetový tablet byla velmi štastná. Množství použitelného software a hardware uspokojí i náročné uživatele. Doufejme, že v budoucnu se bude objevovat více podobných zařízení a geekové si tak budou mít s čím hrát.

Autor článku