GP2X startet nicht bei eingestecktem seriellen Kabel


dkoch82

Still Fresh
Joined
Sep 6, 2010
Messages
6
Hallo,

ich hoffe mir kann jemand bei meinem folgenden Problem helfen.

Ich habe mir ein serielles Datenkabel zusammen gelötet (so ein Samsungkabel halt). Funktioniert auch alles wunderbar. Ich kann mir den Bootvorgang anschauen, kann das gp2xmenu mit Ctrl+C abbrechen und mich auf der Konsole anmelden, ich kann dann mit meinem geschriebenen Programm auch die Baudrate ändern und mit anderen seriellen Geräten kommunizieren, alles kein Problem.

Nun möchte ich jedoch folgendes:
1) Mein Programm soll von SD-Karte sofort beim Booten anstelle des GP2XMenus gestartet werden.
2) Das serielle Kabel soll ständig angeschlossen sein (GP2x startet also, während auf dem kabel bereits daten gesendet werden)

Punkt 1) hab ich gelöst, in dem ich mein Program + ein skript mit namen autorun.gpu (welches mein Program startet) auf eine sd-karte kopiert hab. funktioniert wunderbar

Punkt 2) klappt nicht so ganz:
a) kabel nicht eingesteckt -> bootet -> gp2xmenu bzw. mein program wird gestartet
b) kabel eingesteckt -> bootet -> blockiert (vor'm starten vom gp2xmenu bzw. meinem programm: grüner Bildschirm mit logo) -> kabel raus -> gp2xmenu bzw. mein program startet
c) kabel nicht eingesteckt -> bootet -> menu bzw. mein program startet -> kabel rein -> traffic funktioniert.

ich hab in der datei inittab bereits die konsole über serial ausgeklammert, sodass nur der boot-vorgang erscheint und danach ruhe ist

mein program ändert die baudrate des seriellen ports übrigens auf 9600 baud, aber das scheint kein problem zu sein.

für mein projekt ist es leider zwingend erforderlich, dass das kabel permanent im gp2x drinsteckt.

kann mir da jemand helfen?

Dennis
 
Hi,

überprüfe nochmal alle Kabel an deinem Stecker, ich hatte das auch und es lag daran das ich irgendo am Stecker eine Brücke drin hatte (war ein ganz dünnes Drähtchen).

Schönen Gruß
Rene
 
relei said:
Hi,

überprüfe nochmal alle Kabel an deinem Stecker, ich hatte das auch und es lag daran das ich irgendo am Stecker eine Brücke drin hatte (war ein ganz dünnes Drähtchen).

Schönen Gruß
Rene

Also, vielen Dank schon mal für die schnelle Antwort. Hätte nicht gedacht, dass das hier so schnell geht.

Bist du sicher, dass es an so etwas liegen könnte? Denn außer der Tatsache, dass ich den Stecker bei Anschalten des GP2X nicht eingesteckt haben kann, funktioniert alles tadellos, wenn ich nach dem Bootvorgang einstecke. Also, ich kann senden, empfangen, alles...

Werd' aber trotzdem nochmal alles überprüfen.
 
Hi,

oder schau mal nach das auch alle nötigen Masse-Leitungen angeschlossen sind. Bei mir war es jedenfalls weg als ich den "Kurzschluss/Drahtbrücke" entfernt hatte.

Schönen Gruß
Rene
 
Also, zuerst hab' ich das Kabel nochmal komplett überprüft. Scheint alles in ordnung zu sein.
Dann ist mir allerdings aufgefallen, dass der Boot-Vorgang nur dann blockiert, wenn wenn auf der anderen Seite meines Kabels die Gegenstelle bereits Daten sendet.

Kurze Zusammenfassung meines gesamten Projektes:

In meinem BMW befindet sich ein I-Bus System über das viele Geräte im Auto miteinander kommunizieren. Radio, Navigationssystem, CD-Wechsler, aber auch z.B. Tachoeinheit usw.

Mein GP2X soll nun die Rolle des CD-Wechslers übernehmen. Hierfür hab' ich mir einmal ein Interface zusammengelötet "BMW-zu-Seriell" und ein Interface "GP2X-zu-Seriell".

Sobald mein Programm auf dem GP2X läuft, werden Nachrichten vom Auto (z.B. "Ist ein CD-Wechsler angeschlossen?") beantwortet (z.B. "Ja, ich bin da"). Außerdem wird der Bordcomputer (welcher im Navigationsbildschirm angezeigt wird) emuliert, was eigentlich Aufgabe meiner Tachoeinheit wäre, da ich aber nur die kleine Tachoeinheit ohne Bordcomputerfunktion verbaut habe, übernimmt auch das mein GP2X.

Der CD-Wechsler soll später so funktionieren, dass die SD-Karte im GP2X als CD-Magazin angesehen wird. Also, 6 Verzeichnisse (= 6 CDs zum auswählen). In jedem Verzeichnis entweder MP3s, oder Videodateien, welche dann über das Radio und den Radiobildschirm ausgegeben werden.

An sich alles kein Problem. Funktioniert ja auch alles schon soweit. Bordcomputer-Emulation ist fast fertig und CD-Wechsler-Emulation macht auch langsam Fortschritte.

Problem ist aber halt, dass wenn ich mein GP2X mit dem Auto verbunden habe, der Boot-Vorgang blockiert (genau in dem Moment, wo das GP2Xmenu bzw. mein Programm per autorun.gpu gestartet wird). Wenn ich das Kabel wieder rausziehe, geht es weiter, das GP2Xmenu bzw. Autorun.gpu wird gestartet. Wenn ich es dann wieder reinstecke, funktioniert alles.

Ich nehme an, dass es daran liegt, dass während das GP2X startet, mein Auto bereits fleißig am senden von Nachrichten ist, und somit die Leitung zum GP2X zumüllt.

Der GP2X Bootvorgang läuft auf 150200,8N1,Xon/Xoff mein BMW-Bus auf 9600,8E1,Xon/Xoff. Sobald mein Programm gestartet ist, schalte ich auf 9600,8E1 um.

Vielleicht gibt es irgendwie eine Möglichkeit an entsprechender Stelle den seriellen Port zu "flushen", oder so. In meinem Programm hab' ich es bereits versucht, aber soweit kommt er ja garnicht, da er schon vorher blockiert.

Den Boot-Vorgang des GP2X kann ich mir trotz Verbindung mit dem Auto über den seriellen Anschluss ansehen:
U-Boot 1.0.0 (Apr 20 2006 - 12:51:09)

U-Boot code: 03E00000 -> 03E49610 BSS: -> 03E82208
IRQ Stack: 03ea3204
FIQ Stack: 03ea4204
DRAM Configuration:
Bank #0: 00100000 63 MB
Flash: 0 kB
NAND:probing at 0x9c000000
Flash chip found:
\0x09 Manufacturer ID: 0xEC, Chip ID: 0x76 (Samsung K9F1208 64Mb)
1 flash chips found. Total nand_chip size: 64 MB
Get Environment from NAND offset 0x70000 ...
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial

NAND read: device 0 offset 0x1a0000, size 0x40000 ... 262144 bytes
read: OK

NAND read: device 0 offset 0x80000, size 0xb0000 ... 720896 bytes read:
OK
### main_loop: bootcmd="bootm"
Hit any key to stop autoboot: 0
## Booting image at 01000000 ...
Image Name: MMSP2 Linux Kernel
Created: 2006-09-21 11:08:29 UTC
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: 618206 Bytes = 603.7 kB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK

Starting kernel ...

MMC/SD Card Detected
MMC/SD Slot initialized
Partition check:
mmcsda: p1
Register SD: 972MsB
mount...1
mount...2:
Reading data from NAND FLASH without ECC is not recommended
Freeing init memory: 280K
INIT: version 2.84 booting
<7>**>>ecc error unfixed on chunk 4164:0
Started device management daemon v1.3.25 for /dev
<7>**>>ecc error unfixed on chunk 4740:0
MSDOS FS: IO charset utf8
Mount image directory, if not mounted...
You must set heads sectors and cylinders.
You can do this from the extra functions menu.
You must set heads sectors and cylinders.
You can do this from the extra functions menu.
Partition table size is 4096
Loopback device setup...
losetup: ioctl: LOOP_CLR_FD: No such device or address
MSDOS FS: IO charset utf8
Using /lib/modules/2.4.25/kernel/drivers/usb/gadget/net2272.o
net2272: Set 2272 bus timing
USB SUSPEND MODE
net2272: PLX NET2272 USB Peripheral Controller
net2272: irq 222, mapped mem c280c000, chip rev 0011
net2272: running in 16-bit, byte normal bus mode
net2272: version: 2006 April 5, v3
net2272: unbind
SDL_SYS_JoystickInit
Apply LCD Timing
Set CPU Clock...(-1)
SDL Quit...
EXIT

Danach blockiert alles, auf dem GP2X-Bildschirm ist das grüne Bild mit dem Logo zusehen. Wenn ich die Verbindung zum Auto unterbreche, geht es weiter. Danach kann ich die Verbindung zum Auto wieder herstellen (egal, ob mein Programm läuft - welches ja die Baudrate ändert, oder ob das GP2Xmenu läuft - welches ja eigentlich garnichts macht)

Dennis

Nachtrag:
Vielleicht würde es helfen, wenn ich den ganzen Kernel-Output unterbinden könnte. Oder während des Boot-Vorgangs schnellstmöglich umleiten würde, auf /dev/null, oder so. Auf meinem Debian-Rechner habe ich den Befehl setlogcons. Gibt es auf dem GP2X irgendeine Alternative? Den Befehl setconsole gibt es auch nicht, obwohl ich ihn schonmal in Verbindung mit BusyBox gehört habe.

Hat nicht irgendjemand eine Idee?
 
dkoch82 said:
der Boot-Vorgang blockiert (genau in dem Moment, wo das GP2Xmenu bzw. mein Programm per autorun.gpu gestartet wird).
[...]
Ich nehme an, dass es daran liegt, dass während das GP2X startet, mein Auto bereits fleißig am senden von Nachrichten ist, und somit die Leitung zum GP2X zumüllt.
[...]
Vielleicht gibt es irgendwie eine Möglichkeit an entsprechender Stelle den seriellen Port zu "flushen", oder so.
Code:
U-Boot 1.0.0 (Apr 20 2006 - 12:51:09)
### main_loop: bootcmd="bootm"
Hit any key to stop autoboot:  0 
## Booting image at 01000000 ...
Danach blockiert alles, auf dem GP2X-Bildschirm ist das grüne Bild mit dem Logo zusehen.

Die Frage ist also, wo ist die entsprechende Stelle. Eine Möglichkeit wäre uboot, dort ist ein Hinweis auf autoboot zu sehen. Das dort bereits die serielle voll da ist und die Pause bewirkt halte ich für unwahrscheinlich, da Du ja den grünen Bildschirm siehst, welcher zum Kernelstart gehören sollte. Ich befürchte Du wirst den Kernel selbst modifizieren müssen, damit er die Inputs auf der seriellen während der Bootphase ignoriert.

Die mechanische Lösung würde so aussehen, das Du Dir einen Unterbrecherkontakt einbaust, welcher die serielle Leitung erst nach ca. 60 Sekunden durchschaltet.

Letzte Idee die ich noch hätte wäre vielleicht mal open2x zu versuchen. Vielleicht hat das dieses Verhalten nicht. http://sourceforge.net/projects/open2x/ und http://dl.openhandhelds.org/cgi-bin/gp2x.cgi?0,0,0,0,42,2751
 
Also Open2x hab' ich jetzt ausprobiert. Genau das gleiche.

Kernel modifizieren... Hab' ich ehrlich gesagt nicht viel Ahnung von, und somit auch zu viel Angst mein GP2X unbrauchbar zumachen.

Ich denke mal, es muß die "mechanische Lösung" werden.

...Es ist die "mechanische Lösung" geworden, und funktioniert wunderbar. (12V Zeitrelais Bausatz von Conrad)
 
Back
Top