Hilfe bei SDL Problem


pr0npro

Still Fresh
Joined
Apr 1, 2006
Messages
91
Hi Leute,

ist nicht wirklich ein GP2X spezifisches Problem, aber da ich fuer den GP2X entwickeln will, koennt ihr mir vielleicht trotzdem helfen.

Ich verwende libSDL 1.2.11 und Gentoo AMD64 und bekommen bei einem SDL_Init() immer die Fehlermeldung:
Unable to open /dev/mem
Hab schon probiert die Permissions anzupassen, aber das bringt auch nichts.
Wenn ich das Programm als root ausfuehre schmiert es gar ganz ab.

Irgendwelche Ideen?

Gruss,
pr0npro
 
Bei welchem Code passiert das?

Man hat auf /dev/mem
eigentlich nicht zuzugreiffen, das ist schon gut so...

Fuchs

Edit:

Sollte dies bei allen SDL Programmen vorkommen:

emerge --info

resp., falls da irgendwelche custom Flags gesetzt sind,

emerge -pv libsdl
 
Fuchs said:
Bei welchem Code passiert das?

Man hat auf /dev/mem
eigentlich nicht zuzugreiffen, das ist schon gut so...

Fuchs

Das stimmt so nicht.

Hier kommt ein Stück Code welches ich mehr oder weniger aus
rlyeh's lib habe. Das ist eine "mini" Library ähnlich zur SDL die aber direkt auf
den Framebuffer malt. Sie umfasst Joystick abfragen, Initialisation von Joystick, Audio usw, und benutzt beide CPUs des GP2X.
Code:
<i>
</i>#include <unistd>
#include <fcntl>
#include <stdlib>
#include <sys>

Uint16 *fb;
static volatile unsigned short *gp2x_memregs;
static volatile unsigned long  *gp2x_memregl;


unsigned long gp2x_joystick_read(void)
{
  unsigned long value=(gp2x_memregs[0x1198>>1] & 0x00FF);

  if(value==0xFD) value=0xFA;
  if(value==0xF7) value=0xEB;
  if(value==0xDF) value=0xAF;
  if(value==0x7F) value=0xBE;

  return ~((gp2x_memregs[0x1184>>1] & 0xFF00) | value | (gp2x_memregs[0x1186>>1] << 16));
}

void draw_stuff()
{
  int i,j;

  for(i=0;i<320;i++)
    for(j=0;j<240;j++)
      fb[j*320+i*2]=rand()%255;
}

int main(int argc, char *argv[])
{
  int fbdev,gp2x_dev;
  int i,j,done;

  fbdev=open("/dev/fb0", O_RDWR);
  fb=(Uint16 *)mmap(0, 320*240*sizeof(Uint16), PROT_WRITE, MAP_SHARED, fbdev, 0);
  gp2x_dev = open("/dev/mem",   O_RDWR);

  gp2x_memregl=(unsigned long  *)mmap(0, 0x10000,                    PROT_READ|PROT_WRITE, MAP_SHARED, gp2x_dev, 0xc0000000);
  gp2x_memregs=(unsigned short *)gp2x_memregl;


  srand(time(NULL));
....
....
....

Fuchs:Auf http://www.paines.de gibt es unter GP2X - Skeleton ein kleines SDL Programm. Gucks dir mal an.

Gruß
 
paines said:
Fuchs said:
Bei welchem Code passiert das?

Man hat auf /dev/mem
eigentlich nicht zuzugreiffen, das ist schon gut so...

Fuchs

Das stimmt so nicht.

Hier kommt ein Stück Code welches ich mehr oder weniger aus
rlyeh's lib habe. Das ist eine "mini" Library ähnlich zur SDL die aber direkt auf
den Framebuffer malt. Sie umfasst Joystick abfragen, Initialisation von Joystick, Audio usw, und benutzt beide CPUs des GP2X.

[snip]

Ich habe nicht gesagt man kann nicht,
ich habe gesagt man habe nicht, was
fuer "man sollte nicht" steht.

Bei Direktzugriff auf den Speicher
sollte man schon sehr genau wissen was man tut,
deswegen auch die Frage nach dem Code.
Fuchs:Auf http://www.paines.de gibt es unter GP2X - Skeleton ein kleines SDL Programm. Gucks dir mal an.

Warum?

retour,

Fuchs
 
Fuchs: Okay, hatte mich verlesen.Pardon.

Der Link war auch für den ursprünglichen Poster des Threads bestimmt, pronpro.

Gruß

Memo: Wenn müde, schlafen, nicht Forum Posts beantworten.
 
Hallo,

ich habe kein Problem mit der Programmierung in SDL, da habe ich schon ein wenig Erfahrung.
Trotzdem hat mich das auf die Idee gebracht mal ein anderes Programm herunterzuladen welches ebenfalls SDL benutzt um zu sehen ob es an mir liegt. Aber auch hier ist das gleiche passiert.
Als normaler User kommt die Meldung "Unable to open /dev/mem" und als root haengt sich das Programm einfach auf.

Sonst noch irgendwelche Ideen?

Gruss,
pr0npro
 
Um mich zu wiederholen:

Code?
Passiert das bei allen SDL Programmen oder nur bei spezifischen?
emerge --info
emerge -pv libsdl

Vorher: Kristallkugel.

Fuchs
 
Fuchs said:
Um mich zu wiederholen:

Code?
Passiert das bei allen SDL Programmen oder nur bei spezifischen?
emerge --info
emerge -pv libsdl

Vorher: Kristallkugel.

Fuchs

Ihr Schweizer seid schon komisch ;-)

Code... halte ich fuer irrelevant, aber bitte, sollst du haben:
Code:
<i>
</i>        if( SDL_Init( SDL_INIT_VIDEO ) == -1 ) {
                fprintf(stderr, "error:\n%s", SDL_GetError());
                return 1;
        }
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_HWSURFACE );
        if( screen == NULL ) {
                fprintf(stderr, "error:\n%s", SDL_GetError());
                return 1; 
        }

Das passiert bei allen SDL Programmen.

emerge --info gibt folgendes aus:
Code:
<i>
</i>Portage 2.1.1-r1 (default-linux/amd64/2006.0, gcc-3.4.4, glibc-2.4-r3, 2.6.17-gentoo-r8 x86_64)
=================================================================
System uname: 2.6.17-gentoo-r8 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
Gentoo Base System version 1.12.5
Last Sync: Sun, 29 Oct 2006 13:50:01 +0000
app-admin/eselect-compiler: [Not Present]
dev-java/java-config: 1.3.7, 2.0.30
dev-lang/python:     2.4.3-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache:     [Not Present]
dev-util/confcache:  [Not Present]
sys-apps/sandbox:    1.2.17
sys-devel/autoconf:  2.13, 2.59-r7
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2
sys-devel/binutils:  2.16.1-r3
sys-devel/gcc-config: 1.3.13-r3
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.11-r2
ACCEPT_KEYWORDS="amd64"
AUTOCLEAN="yes"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=k8 -pipe -O2"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /opt/jetty/etc /usr/share/X11/xkb /usr/share/texmf/dvipdfm/config/ /usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/"
CONFIG_PROTECT_MASK="/etc/env.d /etc/env.d/java/ /etc/gconf /etc/java-config/vms/ /etc/revdep-rebuild /etc/terminfo"
CXXFLAGS="-march=k8 -pipe -O2"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoconfig distlocks metadata-transfer sandbox sfperms strict"
GENTOO_MIRRORS="ftp://ftp.tu-clausthal.de/pub/linux/gentoo/ ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/gentoo http://linux.rz.ruhr-uni-bochum.de/download/gentoo-mirror/ ftp://linux.rz.ruhr-uni-bochum.de/gentoo-mirror/ http://ftp.uni-erlangen.de/pub/mirrors/gentoo ftp://ftp.uni-erlangen.de/pub/mirrors/gentoo ftp://ftp.join.uni-muenster.de/pub/linux/distributions/gentoo ftp://ftp.wh2.tu-dresden.de/pub/mirrors/gentoo http://mirrors.sec.informatik.tu-darmstadt.de/gentoo/ http://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/ ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/ ftp://ftp.gentoo.mesh-solutions.com/gentoo/ http://pandemonium.tiscali.de/pub/gentoo/ ftp://pandemonium.tiscali.de/pub/gentoo/ ftp://ftp.rz.tu-bs.de/pub/mirror/ftp.gentoo.org/gentoo-distfiles/ http://gentoo.intergenia.de"
MAKEOPTS="-j3"
PKGDIR="/usr/portage/packages"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude='/distfiles' --exclude='/local' --exclude='/packages'"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
SYNC="rsync://rsync.de.gentoo.org/gentoo-portage"
USE="X alsa amd64 apache avi berkdb bitmap-fonts cdr cli cracklib crypt cups dlloader dri dvd eds elibc_glibc emboss encode foomaticdb fortran gdm gif gnome gpm gstreamer gtk gtk2 iconv imlib input_devices_keyboard input_devices_mouse ipv6 isdnlog jpeg kernel_linux lzw lzw-tiff mp3 mpeg ncurses nls nptl nptlonly opengl pam pcre perl png pppd python qt3 qt4 quicktime readline reflection sdl server session spell spl ssl tcpd tiff truetype truetype-fonts type1-fonts usb userland_GNU video_cards_nvidia xml2 xorg xpm xv zlib"
Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, LDFLAGS, LINGUAS, PORTAGE_RSYNC_EXTRA_OPTS, PORTDIR_OVERLAY

und emerge -pv libsdl:
Code:
<i>
</i>
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] media-libs/libsdl-1.2.11  USE="X alsa opengl xv -aalib -arts -dga -directfb -esd -fbcon -ggi -libcaca -nas -noaudio -noflagstrip -nojoystick -novideo -oss (-svga) -xinerama" 0 kB 

Total size of downloads: 0 kB

So, ich hoffe ich habe nichts vergessen.

Gruss,
pr0npro
 
pr0npro said:
Fuchs said:
Um mich zu wiederholen:

Code?
Passiert das bei allen SDL Programmen oder nur bei spezifischen?
emerge --info
emerge -pv libsdl

Vorher: Kristallkugel.

Fuchs

Ihr Schweizer seid schon komisch ;-)
Ich sehe nicht ganz, was das nun mit
meiner Nationalitaet zu tun haben soll, aber bitte.
Code... halte ich fuer irrelevant, aber bitte, sollst du haben:
[snip]
Das passiert bei allen SDL Programmen.

Genau das macht den Code irrelevant, ja.
Allerdings wusste ich ja vorher nicht, ob das
bei allen oder nur bei einigen SDL Programmen passiert.
[snip]
So, ich hoffe ich habe nichts vergessen.

Nein, aber dummerweise sieht da, bis auf
folgendes, alles gut aus.

1) Uraltversion von gcc. Ist das zufaelligerweise
ein hardened System? Das vertraegt sich
naemlich nicht mit neueren gccs.

Dafuer muesste aber, afair, die pic Useflag gesetzt sein,
ausserdem waere der gcc afair speziell gekennzeichnet.

Noch eine ganz dumme Idee, da es ein x86_64 System ist:

app-emulation/emul-linux-x86-sdl
Gruss,
pr0npro

retour,

Fuchs
 
Hi Fuchs,

das mit der Nationalitaet war nicht boes gemeint, wollte nur ein bisschen das Eis brechen.

Also das mit dem gcc find ich komisch, da mir emerge da folgendes ausgibt:
Code:
<i>
</i>*  sys-devel/gcc
      Latest version available: 4.1.1
      Latest version installed: 4.1.1
Hmm, wieso zeigt mir emerge --info dann gcc 3.4.4 an?
Ich werd gleich mal gucken woran das liegen koennte.

emul-linux-x86-sdl ist auch installiert.

Sonst noch irgendwelche Ideen?

Danke und Gruss,
pr0npro
 
pr0npro said:
Hi Fuchs,

das mit der Nationalitaet war nicht boes gemeint, wollte nur ein bisschen das Eis brechen.

Heh, da hast Du insofern Pech gehabt, dass Du da bei mir
mit Nationalitaet genau am falschen Ende anfaengst.
Kannst Du nichts fuer, hatte halt in vielen Deutschen Foren
mit Deutschen Usern genau deswegen Probleme.

Aber macht ja nichts, ich nehm Dir das nicht uebel.

(ganz abgesehen davon ist mein Ton bei technischen
Hilfen immer monoton, kalt und sachlich. Das ist
normal und gut so :) )
Also das mit dem gcc find ich komisch, da mir emerge da folgendes ausgibt:
Code:
<i>
</i>*  sys-devel/gcc
      Latest version available: 4.1.1
      Latest version installed: 4.1.1

Hmm, wieso zeigt mir emerge --info dann gcc 3.4.4 an?
Ich werd gleich mal gucken woran das liegen koennte.

gcc-config -l

Wenn gcc config nicht installiert ist stimmt so oder so etwas
nicht, dann hast Du vermutlich damals, als gcc 4.*
stable gemasked wurde, saemtliche Warnungen, Informationen
und Forenthreads ueberlesen. Der Migrationsguide ist afair
immer noch online, viel Spass beim Neuuebersetzen des
ganzen Systems ;)
emul-linux-x86-sdl ist auch installiert.

Sonst noch irgendwelche Ideen?

Leider nein, gem. Gentoo Forensuche
hat auch nur ein User das selbe Problem,
das koenntest noch glatt Du sein :)

(Die da gegebenen Ratschlaege werde
ich einmal nicht wiederholen)

Ansonsten das uebliche, betroffene Pakete
neu bauen, Vorhandensein und
Berechtigungen von /dev/mem
ansehen, revdep-rebuild laufen lassen
(obwohl der Fehler eigentlich alles andere
als Ursache in Frage kommen laesst)
etc. pp.
Danke und Gruss,
pr0npro

retour,

Fuchs
 
Back
Top