Qemu Für Gp2x... Bitte helft mir, ich raff das nicht


Emu&Co

Active Member
Joined
Feb 12, 2004
Messages
803
Age
37
Location
Germany / Bavaria
Website
dreimer.de.vu
Hallo, wie der Titel schon sagt, würde ich gerne QEmu 0.8.1 für den GP2X porten. Laut Webseite ist ARM als Host Architektur ja kein Problem. Ich habe dieses DevKit (http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,14,1362) verwendet. Erst hatte ich Probleme mit SDL, da ./configure im QEmu Source mir sagte, dass ich es nicht hätte. Das habe ich dann so gelöst:

# SDL probe

sdl_too_old=no

if test -z "$sdl" ; then

sdl_config="sdl-config"
sdl=yes
sdl_static=yes

if test "$mingw32" = "yes" -a ! -z "$cross_prefix" ; then
# win32 cross compilation case
sdl_config="sdl-config"
sdl=yes

Danach sagte es dass es ne SDL hat und die statisch verlinkt. So wie ich es wollte, dann noch die CPU richtig eingestellt... Naja versucht

cpu=armv4b DID Ging nicht (unten)
cpu=armv4l DID Ging auch nicht (unten)
cpu=armv4t Not Supported...

http://mitglied.lycos.de/reimerdaniel/configure

Das passiert

$ make
gcc -Wall -O2 -g -fno-strict-aliasing -I. -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -o dyngen.exe dyngen.c
dyngen.c:1254: error: syntax error before 'ELF_RELOC'
dyngen.c: In function 'arm_emit_ldr_info':
dyngen.c:1264: error: 'p_start' undeclared (first use in this function)
dyngen.c:1264: error: (Each undeclared identifier is reported only once
dyngen.c:1264: error: for each function it appears in.)
dyngen.c:1265: error: 'p_end' undeclared (first use in this function)
dyngen.c:1275: error: 'name' undeclared (first use in this function)
dyngen.c:1275: error: 'start_offset' undeclared (first use in this function)
dyngen.c:1283: error: 'outfile' undeclared (first use in this function)
dyngen.c:1295: error: 'ELF_RELOC' undeclared (first use in this function)
dyngen.c:1295: error: 'rel' undeclared (first use in this function)
dyngen.c:1305: warning: value computed is not used
dyngen.c:1305: warning: value computed is not used
dyngen.c:1310: warning: implicit declaration of function 'ELF32_R_TYPE'
dyngen.c:1311: error: 'R_ARM_ABS32' undeclared (first use in this function)
dyngen.c:1297: warning: unused variable 'p'
dyngen.c: In function 'gen_code':
dyngen.c:2224: warning: implicit declaration of function 'ELFW'
dyngen.c:2224: error: 'R_SYM' undeclared (first use in this function)
dyngen.c:2224: error: 'struct coff_rel' has no member named 'r_info'
dyngen.c:2224: error: called object 'ELFW(<erroneous>)' is not a function
dyngen.c:2229: error: 'struct coff_rel' has no member named 'r_info'
dyngen.c:2233: error: 'R_ARM_ABS32' undeclared (first use in this function)
dyngen.c:2237: error: 'R_ARM_PC24' undeclared (first use in this function)
make: *** [dyngen.exe] Error 1


Was mache ich falsch oder sollte ich anders machen? Kann jemand das mal für mich ausprobieren und mir erzählen wies geht?

Danke schonmal
 
Mhh..also irgendwie heißt der GCC bei mir schon anders als bei Dir..
Code:
/usr/local/arm-dev/bin/arm-linux-gcc

Ich weis natürlich nicht welches Environment Du so hast, aber mit dem von dem Wiki downgeloadeten SDK gehts so:
Code:
/usr/local/arm-dev/bin/arm-linux-gcc shadow.c `/usr/local/arm-dev/bin/arm-linux-sdl-config --cflags --libs` -o shadow

lg
 
Problem scheint diese make-Skript zu sein. Das kennt 'arm-linux' nicht und muss entsprechend angepasst werden.

Zum Thema SDL: bitte editier das 'sdl-config' Skript in deinem bin Verzeichnis. Da stehen Pfade drin, die evtl. mit deinem System nicht zusammenpassen...
 
Berny: shadow.c :confused: Woher bekomm ich die denn?
Octoate: Glaub ich nicht, das ganze arm-linux Zeug ist bei mir 1:1 auch ohne arm-linux im Namen vorhanden, also arm-linux-gcc = gcc

Ich hab mal ne LOG gemacht, wo ich make -i -k gemacht hab.
http://mitglied.lycos.de/reimerdaniel/out.txt
 
Emu&Co said:
Berny: shadow.c :confused: Woher bekomm ich die denn?
Octoate: Glaub ich nicht, das ganze arm-linux Zeug ist bei mir 1:1 auch ohne arm-linux im Namen vorhanden, also arm-linux-gcc = gcc

Ich hab mal ne LOG gemacht, wo ich make -i -k gemacht hab.
http://mitglied.lycos.de/reimerdaniel/out.txt

Und du bist dir sicher, dass der normale gcc nicht für deinen PC ist :D
 
Hmm... News aus dem QEmu Chat:

EmuandCo Hello, I have a question: Would it be possible to port QEmu's Full system emulation to a GP2X? (www.gbax.com) I try this around 4 days now, but I'm no coder, so the tips I got from the community around this handheld did not help me very much.
dignome what kind of processor does it use?
EmuandCo ARM arch, wait I try to find out more precise.
EmuandCo ARM920T
EmuandCo User Mode seems to work, I found a zaurus ipk in static which worked.
balrog-kun what happens when you try compiling full system emulation?
pbrook Yes, it should be possible.
EmuandCo http://www.gp32x.com/board/index.php?showtopic=28294
pbrook Won't compile out the box, but not that hard to fix.
EmuandCo But I'm too stupid...
pbrook The main thing it's missing as a high resolution timer. You can probably hack routnd that with gettimeofday.
pbrook Fabrice is working on a proper solution.
EmuandCo So I can give up, right? Or can even a non coder do this?
pbrook Sounds like give up.
balrog-kun -o dyngen.exe? i think the Makefile is a bit confused
EmuandCo balrog-kun: A bit? oh yes...
balrog-kun are you cross-compiling?
EmuandCo I try to...
EmuandCo I used this devkit http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,14,1362
pbrook balrog-kun: Looks like a windows host, do dyngen.exe is right.
pbrook s/do/so/
pbrook Err, build machine.
EmuandCo It is a windows host
EmuandCo WinXP

Also, keine Chance für mich... Könnte das mal jmd mit den nötigen Kenntnissen versuchen. Ich weite sogar meinen Spendenaufruf vom englischen auf das deutsche Forum aus. Also 15€ von mir für einen laufenden Port der Version 0.8.1 oder ähnlich neu.
 
Emu&Co said:
Berny: shadow.c :confused: Woher bekomm ich die denn?
Octoate: Glaub ich nicht, das ganze arm-linux Zeug ist bei mir 1:1 auch ohne arm-linux im Namen vorhanden, also arm-linux-gcc = gcc

Ich hab mal ne LOG gemacht, wo ich make -i -k gemacht hab.
http://mitglied.lycos.de/reimerdaniel/out.txt

Brauchst die Datei ? Die macht aber nur testweise einen Schatten/transparenz auf ein BMP via SDL, hat nicht direkt was mit GP2x zu tun ...

Also ich hab festgestellt es lässt sich am problemlosesten Compilieren ohne zuviel Flags, vor allem sind die ganzen -f Flags kaum untereinander kompatiblel von Version zu Version :twisted: ... würd maximal ein -O2 dranhängen, auch würd ich die libraries statisch linken (auch wenn manche meinen dyn. gehts auch).. danach stripen und auf gp2x spielen... mit dem wiki-SDK gehts (unter debian-linux) super...

Edit: Kannst mir mal link posten von wo Du den OriginalSource hast ? Dann probier ich mal unter Linux einen Compile... Ich kämpf ja auch seit paar Wochen schon mit dem DungeonMaster-SDL Port..die haben dort soviel GTK eingebaut.. ächz..
 
Das wär nett. http://fabrice.bellard.free.fr/qemu/qemu-0.8.1.tar.gz. Kannst natürlich auch den SVN/CVS Tree nehmen, aber ich hab den Source genommen. Ich schaff das eh nie, bevor ich mein Informatikstudium angefangen hab.... :confused:

P.S: Es scheint da zwei Modi zu geben: Full system emulation und User mode emulation. Das erste ist das erwünschte, das zweite stellt AFAIK die Möglichkeit dar, libs für andere CPUs zum laufen zu bekommen. Das hab ich schon in ner steinalten Zaurus static Version gestern gefunden. Erst der Jubelschrei, als ich das hatte, dann die Enttäuschung, als ich sah, dass es nur die User Mode Emulation ist... http://mitglied.lycos.de/reimerdaniel/qemu-i386-static.gz

Um wieviel ist -O3 idR schneller? Ich frag, weil QEmu ja jedes Quäntchen Geschwindigkeit braucht. Und als SDL würd ich (wenn nich eh bereits der Fall) das http://www.gp32x.com/board/index.php?showtopic=23819 oder die neuere, bisher nur prekompliliert erhältliche, die weiter hinten im Forum zu finden ist http://paeryn.myby.co.uk/libSDL-0330.tar.bz2 nehmen.

Noch ein Link, auf den ich gestern gestossen bin: http://tbox.jpn.org/wiki/linuzau/wiki.cgi?LinuxZaurus%b8%fe%a4%b1%a5%d3%a5%eb%a5%c9%2fQEMU
 
Also hier iss mal ein Link der die Optimierungen von den diversen -O beschreibt... http://gcc.gnu.org/onlinedocs/gcc-3.3/gcc/Optimize-Options.html

Tja, bei mir gings wegen unsupporteter CPU nicht, nehme an die haben dort InLine-Assembler programmiert, das ist (für mich) nicht übersetzbar da ich kein ARM-ASM kann leider..
Code:
<i>
</i>bernhard@london:~/downloads/gp2x/qemu-0.8.1$ ./configure --static --cc=/usr/local/arm-dev/bin/arm-linux-gcc --target-list=arm-linux
/scratchbox/tools/bin/misc_runner: /targets/links/scratchbox.config: No such file or directory
Install prefix    /usr/local
BIOS directory    /usr/local/share/qemu
binary directory  /usr/local/bin
Manual directory  /usr/local/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /home/bernhard/downloads/gp2x/qemu-0.8.1
C compiler        /usr/local/arm-dev/bin/arm-linux-gcc
Host C compiler   gcc
make              make
install           install
host CPU          i386
host big endian   no
target list       arm-linux
gprof enabled     no
profiler          no
static build      yes
SDL support       yes
SDL static link   yes
mingw32 support   no
Adlib support     no
CoreAudio support no
ALSA support      no
DSound support    no
FMOD support      no
kqemu support     yes
Documentation     no

(im configure hab ich von sdl-config auf arm-linux-sdl-config geändert).
Code:
<i>
</i>bernhard@london:~/downloads/gp2x/qemu-0.8.1$ make
for d in arm-linux; do \
        make -C $d all || exit 1 ; \
        done
make[1]: Entering directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/arm-linux'
/usr/local/arm-dev/bin/arm-linux-gcc -Wall -O2 -g -fno-strict-aliasing -fomit-frame-pointer -I. -I.. -I/home/bernhard/downloads/gp2x/qemu-0.8.1/target-arm -I/home/bernhard/downloads/gp2x/qemu-0.8.1 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I/home/bernhard/downloads/gp2x/qemu-0.8.1/fpu -I/home/bernhard/downloads/gp2x/qemu-0.8.1/slirp -c -o vl.o /home/bernhard/downloads/gp2x/qemu-0.8.1/vl.c
/home/bernhard/downloads/gp2x/qemu-0.8.1/vl.c:564: #error unsupported CPU
make[1]: *** [vl.o] Error 1
make[1]: Leaving directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/arm-linux'
make: *** [all] Error 1
bernhard@london:~/downloads/gp2x/qemu-0.8.1$ make clean
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
rm -f *.o *.a qemu-img dyngen TAGS *.pod *~ */*~
make -C tests clean
make[1]: Entering directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/tests'
rm -f *~ *.o test-i386.out test-i386.ref \
           test-x86_64.log test-x86_64.ref qruncom linux-test testthread sha1-i386 test-i386 runcom sha1
make[1]: Leaving directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/tests'
for d in arm-linux; do \
        make -C $d clean || exit 1 ; \
        done
make[1]: Entering directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/arm-linux'
rm -f *.o  *.a *~ qemu-fast gen-op.h opc.h op.h nwfpe/*.o slirp/*.o fpu/*.o
make[1]: Leaving directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/arm-linux'
bernhard@london:~/downloads/gp2x/qemu-0.8.1$ make
gcc -Wall -O2 -g -fno-strict-aliasing -I. -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -o dyngen dyngen.c
dyngen.c: In function 'load_object':
dyngen.c:508: warning: pointer targets in assignment differ in signedness
dyngen.c:544: warning: pointer targets in assignment differ in signedness
/usr/local/arm-dev/bin/arm-linux-gcc -DQEMU_TOOL -Wall -O2 -g -fno-strict-aliasing -I. -g -static -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -o qemu-img qemu-img.c block.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c block-vvfat.c -lz
for d in arm-linux; do \
        make -C $d all || exit 1 ; \
        done
make[1]: Entering directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/arm-linux'
/usr/local/arm-dev/bin/arm-linux-gcc -Wall -O2 -g -fno-strict-aliasing -fomit-frame-pointer -I. -I.. -I/home/bernhard/downloads/gp2x/qemu-0.8.1/target-arm -I/home/bernhard/downloads/gp2x/qemu-0.8.1 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I/home/bernhard/downloads/gp2x/qemu-0.8.1/fpu -I/home/bernhard/downloads/gp2x/qemu-0.8.1/slirp -c -o vl.o /home/bernhard/downloads/gp2x/qemu-0.8.1/vl.c
/home/bernhard/downloads/gp2x/qemu-0.8.1/vl.c:564: #error unsupported CPU
make[1]: *** [vl.o] Error 1
make[1]: Leaving directory `/home/bernhard/downloads/gp2x/qemu-0.8.1/arm-linux'
make: *** [all] Error 1

Also da muß man sicher händisch viel nachbessern um das zum Laufen zu bekommen (habs aber jetzt nicht wirklich überprüft was zu ändern wäre)...

Sorry für die schlechten News..

P.S.: ruft man configure gleich mit --cpu=arm auf, bekommt man gleich nen Fehler...
Code:
<i>
</i>bernhard@london:~/downloads/gp2x/qemu-0.8.1$ ./configure --static --cc=/usr/local/arm-dev/bin/arm-linux-gcc --target-list=arm-linux --cpu=arm
/scratchbox/tools/bin/misc_runner: /targets/links/scratchbox.config: No such file or directory
Install prefix    /usr/local
BIOS directory    /usr/local/share/qemu
binary directory  /usr/local/bin
Manual directory  /usr/local/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /home/bernhard/downloads/gp2x/qemu-0.8.1
C compiler        /usr/local/arm-dev/bin/arm-linux-gcc
Host C compiler   gcc
make              make
install           install
host CPU          arm
host big endian   no
target list       arm-linux
gprof enabled     no
profiler          no
static build      yes
SDL support       yes
SDL static link   yes
mingw32 support   no
Adlib support     no
CoreAudio support no
ALSA support      no
DSound support    no
FMOD support      no
kqemu support     yes
Documentation     no
Unsupported CPU
 
Naja wenn Du gleich mit dem Compiler richtig drauffährst, generiert er die eh nur die dementsprechenden Binaries, egal was Du angibst ;).

Am besten mal die vl.c Datein angucken warum er da mit einem #error statement das meint, vielleicht ist ja auch ASM-Code direkt da drinnen, dann wirds schwerer...

Gl ansonsten noch mit Deinem Projekt.
 
Hust,

was soll der qemu bitte auf dem gp2x bringen? Er laeuft schon nicht auf der x86 so flott und in letzter Zeit wird er auch haeufiger dazu verwendet seine crosscompilierten binaries fuer arm oder mips auf x86 platform zu testen, um damit sein eigentliches device zu schonen, was z.b. ein gp2x sein koennte.

Gruss Henning
 
Emu&Co said:
Ganz einfach. Es wär schneller als DosBox und ich könnte vll Siedler II spielen. Ausserdem könnte ich ReactOS und GP2X promotion auf einmal machen.

Schneller als dosbox? Wie kommst du auf solche Aussagen? dosbox
und qemu verfolgen ganz unterschiedliche Ansaetze und ich bin mir ziemlich
sicher das qemu bzw. dass was du im qemu laufen lassen willst, nicht schneller laeuft als dosbox.

Gruss Henning
 
Wie ich auf solche Aussagen komme? Hmm... mal schauen. Wenn ich DosBox auf meiner 3000+ AXP CPU rannehme und ihm ZSnes zu fressen gebe, dann bekommt der grade so ein billiges 2D SNES Game zum rennen. Alle andren ruckeln wie verrückt. Wenn ich das ganze mit QEMU + DOS 7.1 mache, dann läuft das einfach nur 1A und zwar ohne KQEMU. Das sollte Beweis genug sein, dass DosBox wesentlich langsamer ist, als QEMU.

P.S: @woglinde: Wenn du keine Beweise für deine Aussagen hast, dann hör doch bitte auf, künftig die Aussagen anderer madig zu machen. Ich mache dir nen Vorschlag. Hol dir hier: http://www.si-gamer.net/gulikoza/dosbox.html das neueste DosBox CVS und hier: http://www.h7.dion.ne.jp/~qemu-win/ das neueste QEMU für Windows und versuch mal genau dasselbe, wie ich.
 
jo also ich denk auch mit Qemu wären wir schon glücklich .. ich zumindest.. deswegen unterstützt Emu&Co :) vielleicht packt er das ja das würde wieder ein paar möglichkeiten mehr bedeuten

mfg
tom

edit: ausserdem kann ich ja dann prince of persia spielen hehehe und vielleicht chuck yeagers air combat
 
Back
Top