Homepage Wiki Forum Buy

Qemu nutzen

Aus GNUBLIN

Möchte man eine bestehende Anwendung auf Gnublin portieren hat man oft erst den Prozess des Cross-Compilings vor sich. Abhängig von der Komplexität des Programms können dafür viele Bibliotheken etc. abhängig sein. Beginnt man das Programm mit der Toolchain auf dem PC zu übersetzten muss man sich sehr schnell viele Linker und Include Pfade erstellen und mitgeben.

Einfacher kann man dies machen, in dem man direkt auf Gnublin das Programm übersetzte. Nur bei großen Anwendungen kann dies zu einer Geduldsprobe werden. Genau dafür gibt es Qemu. Mit Qemu kann man ein Gnublin ganz einfach auf einem schnellen PC emulieren. Dies ist perfekt zum Übersetzten von solchen großen Anwendung. Ist die Software übersetzt, kann man die Ergebnisse oder das ganze Dateisystem auf die SD-Karte kopieren und die Anwendung so nutzen.


Qemu.png


Mit Strg + Alt kann man den Mauszeiger / Cursor wieder freigeben

Vorbereitung

Als erstes müssen folgende Programme installiert werden:

sudo apt-get install qemu-system


Nun muss ein Image erstellt werden, das etwa 2GB groß ist (Es kann auch kleiner sein):

sudo dd if=/dev/zero of=rootfs.img bs=1M count=2000

Danach wird aus dem Image ein ext3 Dateisystem erstellt:

sudo mkfs.ext3 -F rootfs.img


Nun erstellen wir einen neuen Ordner, und mounten das Image dort hinein:

mkdir newfolder
sudo mount rootfs.img newfolder/ -o loop


Nun kann man sein vorhandenes Dateisystem in den Ordner newfolder hinein kopieren.

Download aktuelles rootfs:

wget http://gnublin.org/downloads/rootfs.tar.gz

Im falle eines gepackten Dateisystems macht man folgendes:

sudo tar xzvf rootfs.tar.gz -C newfolder/


Ist das Dateisystem in den newfolder entpackt worden so muss man dort noch eine Einstellung in der Datei (als root)

sudo vi newfolder/etc/inittab

vornehmen. Es muss die letzte Zeile

T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt102

gegen folgende Zeile ausgetauscht werden

1:2345:respawn:/sbin/getty 38400 tty1


Danach muss man unbedingt das Image wieder unmounten:

sudo umount newfolder/


Zu guter Letzt muss man sich den Qemu Kernel (zImage) besorgen, da qemu mit seinem eigenen Kernel arbeitet:

wget http://gnublin.googlecode.com/git/lpc3131/kernel/qemu_kernel/zImage

Qemu booten

Sind alle Vorbereitungen ohne Probleme abgeschlossen worden, so kann man nun, sein root filesystem via Qemu booten.

sudo qemu-system-arm -M versatilepb -cpu arm926 -kernel zImage -hda rootfs.img -m 256 -append "root=/dev/sda rootfstype=ext3 mem=256M devtmpfs.mount=0 rw"


Viel bequemer kann man den Emulator per SSH benutzen. Am besten richtet man dafür wie folgt beschrieben eine "Bridge" ein. Ist das mit Netzwerk fähige System gestartet schaut man dort mit ifconfig kurz nach der IP-Adresse, die dem eth0 Interface gegeben worden ist und kann sich so anschliessend damit per ssh anmelden. Der Vorteil von SSH ist, das man jetzt zwischen der Gnublin Konsole und dem eigenen PC Dateien daten bzw. Aus- und Eingaben kopieren kann.

Qemu mit Netzwerk

Um qemu auch mit Netzwerk Unterstützung booten zu können muss auf dem Wirtssystem eine Netzwerkbrücke eingerichtet werden.

Folgendes in die /etc/network/interfaces eintragen (Hostrechner bzw. Wirtsystem) :

#auto eth0
iface eth0 inet manual
auto virbr0
iface virbr0 inet dhcp
    bridge_ports eth0 tap0
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off
    bridge_maxwait 5


Dann das Netzwerk neustarten

sudo /etc/init.d/networking restart

Wichtig ist, dass sich das eth0 Interface im unkonfigurierten Zustand befinden muss. Deshalb das "iface eth0 inet manual".

Die Netzwerk Einstellungen am Gastsystem können nun ganz normal vorgenommen werden. Im Normalfall einfach

ifup eth0

eingeben.

sudo qemu-system-arm -M versatilepb -cpu arm926 -kernel zImage -hda rootfs.img -m 256 -net nic -net tap -append "root=/dev/sda rootfstype=ext3 mem=256M devtmpfs.mount=0 rw"
In anderen Sprachen