ARM und Qemu: Unterschied zwischen den Versionen
(add some links) |
(add 32bit link, formatierung..) |
||
Zeile 2: | Zeile 2: | ||
Vorraussetzung ist ein Linux System (32 oder 64bit) und ein bisschen Erfahrung auf der Kommandozeile :) | Vorraussetzung ist ein Linux System (32 oder 64bit) und ein bisschen Erfahrung auf der Kommandozeile :) | ||
− | 1. Qemu installieren: | + | ==1. Qemu installieren:== |
Für diejenigen die ein 64bit Linux benutzen habe ich ein fertig kompiliertes Paket bereitgestellt, welches die benötigten Patches enthält. | Für diejenigen die ein 64bit Linux benutzen habe ich ein fertig kompiliertes Paket bereitgestellt, welches die benötigten Patches enthält. | ||
− | Ihr findet es unter http://www.freitagsrunde.org/~aeichner/qemu-0.9.1-kbs.tar.bz2. | + | Ihr findet es unter http://www.freitagsrunde.org/~aeichner/qemu-0.9.1-kbs.tar.bz2. |
+ | Für diejenigen die ein 32bit Linux benutzen hat tkroenert ein fertig kompiliertes Paket bereitgestellt, welches die benötigten Patches enthält. | ||
+ | Ihr findet es unter http://www.freitagsrunde.org/~tkroenert/qemu-0.9.1-kbs.tar.bz2. | ||
Einfach als root mit Hilfe von <pre>tar -xf qemu-0.9.1-arm.tar.gz</pre> auspacken (vorher mit cd ins Root | Einfach als root mit Hilfe von <pre>tar -xf qemu-0.9.1-arm.tar.gz</pre> auspacken (vorher mit cd ins Root | ||
Verzeichnis / wechseln). Für alle anderen mit 32bit Linux gibt es unter Isis eine Anleitung, wie man qemu mit den Patches kompiliert. | Verzeichnis / wechseln). Für alle anderen mit 32bit Linux gibt es unter Isis eine Anleitung, wie man qemu mit den Patches kompiliert. | ||
− | Wenn jemand | + | Wenn jemand qemu selbst kompilieren will: |
+ | <pre> | ||
+ | wget http://bellard.org/qemu/qemu-0.9.1.tar.gz | ||
+ | scp cs:/home/komm/lehre/qemu-0.9.1-kbspatch-data/qemu-0.9.1-kbs.patch | ||
+ | aptitude install libsdl-dev | ||
+ | </pre> | ||
+ | Den Rest solltet ihr wissen. Ist hier auch nicht der richtige Ort zum dafuer erklaeren. | ||
− | 2. U-Boot: | + | ==2. U-Boot:== |
Damit ihr die Programme in Qemu ausführen könnt benötigt ihr einen Bootloader. Wie auf den echten Portux Systemen kommt hier U-Boot zum Einsatz. | Damit ihr die Programme in Qemu ausführen könnt benötigt ihr einen Bootloader. Wie auf den echten Portux Systemen kommt hier U-Boot zum Einsatz. | ||
Weil das kompilieren nicht gerade einfach ist könnt ihr ein fertiges Image unter | Weil das kompilieren nicht gerade einfach ist könnt ihr ein fertiges Image unter | ||
http://www.freitagsrunde.org/~aeichner/u-boot.bin runterladen. | http://www.freitagsrunde.org/~aeichner/u-boot.bin runterladen. | ||
− | 3. ARM toolchain: | + | ==3. ARM toolchain:== |
Um die Testprogramme zu kompilieren wird ein Crosscompiler benötigt der Maschinencode für den ARM erzeugt. Ein funtkionierendes Paket findet ihr | Um die Testprogramme zu kompilieren wird ein Crosscompiler benötigt der Maschinencode für den ARM erzeugt. Ein funtkionierendes Paket findet ihr | ||
unter http://www.mikrocontroller.net/download/arm-toolchain-linux-2.tar.bz2 | unter http://www.mikrocontroller.net/download/arm-toolchain-linux-2.tar.bz2 | ||
Zeile 21: | Zeile 29: | ||
Allerdings funktioniert ; für Kommentare nicht, sondern es muss @ verwendet werden. | Allerdings funktioniert ; für Kommentare nicht, sondern es muss @ verwendet werden. | ||
− | 4. Vorlagen: | + | ==4. Vorlagen:== |
Die Vorlage von Isis funktioniert nicht um funktionierende Images für QEMU/U-Boot zu erstellen (Um genau zu sein müssen die Makefiles verändert | Die Vorlage von Isis funktioniert nicht um funktionierende Images für QEMU/U-Boot zu erstellen (Um genau zu sein müssen die Makefiles verändert | ||
werden). Die angepassten Vorlagen können unter http://www.freitagsrunde.org/~aeichner/Blatt2Vorgabe_qemu.zip runterladen. | werden). Die angepassten Vorlagen können unter http://www.freitagsrunde.org/~aeichner/Blatt2Vorgabe_qemu.zip runterladen. | ||
Zeile 29: | Zeile 37: | ||
wirklich funktioniert gibt es nicht ;)) | wirklich funktioniert gibt es nicht ;)) | ||
− | 5. Qemu starten: | + | ==5. Qemu starten:== |
Das ist der letzte Schritt und wenn ihr alles richtig gemacht habt könnt ihr anschliessend eure Programme testen. | Das ist der letzte Schritt und wenn ihr alles richtig gemacht habt könnt ihr anschliessend eure Programme testen. | ||
Qemu startet ihr mit dem folgenden Befehl: | Qemu startet ihr mit dem folgenden Befehl: |
Version vom 19. November 2008, 19:18 Uhr
Im folgenden findet ihr eine kurze Anleitung wie man die 2. TechGI 3 Hausaufgabe (ARM Assembler) mit Hilfe von Qemu testen kann. Vorraussetzung ist ein Linux System (32 oder 64bit) und ein bisschen Erfahrung auf der Kommandozeile :)
Inhaltsverzeichnis
1. Qemu installieren:
Für diejenigen die ein 64bit Linux benutzen habe ich ein fertig kompiliertes Paket bereitgestellt, welches die benötigten Patches enthält. Ihr findet es unter http://www.freitagsrunde.org/~aeichner/qemu-0.9.1-kbs.tar.bz2. Für diejenigen die ein 32bit Linux benutzen hat tkroenert ein fertig kompiliertes Paket bereitgestellt, welches die benötigten Patches enthält. Ihr findet es unter http://www.freitagsrunde.org/~tkroenert/qemu-0.9.1-kbs.tar.bz2.
Einfach als root mit Hilfe von
tar -xf qemu-0.9.1-arm.tar.gz
auspacken (vorher mit cd ins Root
Verzeichnis / wechseln). Für alle anderen mit 32bit Linux gibt es unter Isis eine Anleitung, wie man qemu mit den Patches kompiliert. Wenn jemand qemu selbst kompilieren will:
wget http://bellard.org/qemu/qemu-0.9.1.tar.gz scp cs:/home/komm/lehre/qemu-0.9.1-kbspatch-data/qemu-0.9.1-kbs.patch aptitude install libsdl-dev
Den Rest solltet ihr wissen. Ist hier auch nicht der richtige Ort zum dafuer erklaeren.
2. U-Boot:
Damit ihr die Programme in Qemu ausführen könnt benötigt ihr einen Bootloader. Wie auf den echten Portux Systemen kommt hier U-Boot zum Einsatz. Weil das kompilieren nicht gerade einfach ist könnt ihr ein fertiges Image unter http://www.freitagsrunde.org/~aeichner/u-boot.bin runterladen.
3. ARM toolchain:
Um die Testprogramme zu kompilieren wird ein Crosscompiler benötigt der Maschinencode für den ARM erzeugt. Ein funtkionierendes Paket findet ihr unter http://www.mikrocontroller.net/download/arm-toolchain-linux-2.tar.bz2 Einfach irgendwo mit tar -xf arm-toolchain-linux.tar.bz2 entpacken und den Pfad mit
export PATH=$PATH:<Pfad zu Arm Toolchain>/arm/bin
hinzufügen damit der Compiler gefunden werden kann.
Allerdings funktioniert ; für Kommentare nicht, sondern es muss @ verwendet werden.
4. Vorlagen:
Die Vorlage von Isis funktioniert nicht um funktionierende Images für QEMU/U-Boot zu erstellen (Um genau zu sein müssen die Makefiles verändert werden). Die angepassten Vorlagen können unter http://www.freitagsrunde.org/~aeichner/Blatt2Vorgabe_qemu.zip runterladen. In der ZIP-Datei gibt es zwei neue Dateien. Im Unterordner a und b gibt es ein neues Makefile namens Makefile.qemu. Wenn ihr die Testprogramme für QEMU kompilieren wollt müsst ihr in dem Ordner "make -f Makefile.qemu" ausführen. Die Datei Makefile ist das Original von ISIS, damit ihr die Programme auch für das reale System kompilieren könnt (eine Garantie dafür, dass es auch wirklich funktioniert gibt es nicht ;))
5. Qemu starten:
Das ist der letzte Schritt und wenn ihr alles richtig gemacht habt könnt ihr anschliessend eure Programme testen. Qemu startet ihr mit dem folgenden Befehl:
/usr/local/bin/qemu-system-arm -kernel <Pfad zu u-boot Image>/u-boot.bin -m 32 -serial stdio -nographic -M versatiletub -net user,vlan=0 -net nic,vlan=0,model=smc91c111 -tftp <Pfad zu euren Testprogrammen>
Ihr könnt den Aufruf auch in ein Shellscript packen, damit ihr das nicht jedesmal schreiben müsst. Wenn alles funktioniert hat erwartet euch die "Shell" von U-Boot:
initializing tublcd... U-Boot 2008.10-00227-g1378174-dirty (Nov 13 2008 - 13:21:48) DRAM: 0 kB Flash: 0 kB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Versatile #
Jetzt ladet ihr euer Image per DHCP/TFTP mit Hilfe von:
dhcp 4000 /<Dateiname>
Dateinname steht für das ELF-Image welches beim kompilieren erzeugt wurde (techgi3b2a). Beim kompilieren entstehen noch zwei weitere Dateien namens techgi3b2a.bin und techgi3b2aBoot. Diese funktionieren nicht. Das laden dauert eine Weile (bei mir ungefähr 30sec). Als letztes startet ihr euer Programm mit:
bootelf 4000
TADA!! (oder auch nicht, wenn euer Programm einen Bug hat ;))