GP2X Login via USB Gadget Serial


thebohemian

Still Fresh
Joined
Nov 29, 2005
Messages
86
Ich habe jetzt solange an meinem GP2X rumgefrickelt, bis ich die serielle Konsole nicht nur mit dem bash hack bekomme, sondern mich auch richtig einloggen kann.

Und jetzt schreibe ich auf, wie du das auch haben kannst:

Achtung Eins: Ich hab das hier zum Teil ausm Kopf geschrieben. Mein GP2X ist schon lange nicht mehr das, was GPH ausgeliefert hat. Soweit es geht habe ich die von mir verwendeten Dateien irgendwo online hingestellt. Aber worauf es wirklich ankommt ist, dass du dir genau überlegst, was du hier tust. Ich schreibe nich extra hin, wenn du dir von einer Datei lieber ein Backup machen solltest. Da ich hier Systemdateien verändere können ein paar falsch gesetzte Zeichen dafür sorgen, dass dein GP2X ein wenig nutzlos wird. Allerdings sollte die berühmte Unbrick Anleitung helfen, die Kiste wieder in gang zu kriegen. Also: Betreten auf eigene Gefahr.

Achtung Zwei: Ich schreibe das an einer GNU/Linux Maschine und habe keine Ahnung ob Windows mit dem USB Gadget Serial Modul umgehen kann.

1) Als erstes brauchst du unbedingt das USB Gadget Serial Modul und ein passendes Skript. Unter http://www.inf.fu-berlin.de/~rschuste/usb.tar.gz findest du alles beisammen. Pack den Ordner auf die SD Karte, ins NAND, wo immer du willst.

Sobald es drauf ist, verbinde den GP2X mit deinem PC, führe das Programm bash.gpe aus. Das läd das Kernelmodul und startet eine Bash deren Ein- und Ausgabe auf die serielle Schnittstelle umgeleitet ist (weil das so ungeheuer nützlich ist, liegt dieser Kram bei mir im NAND).

2) An deinem Desktop-PC brauchst du jetzt ein Terminal Programm. Aber halt! Hat dein Rechner den GP2X erkannt? Ein kurzes dmesg sollte zeigen, welcher Datei die USB-getunnelte serielle Schnittstelle zugeordnet wird. Unter Ubuntu soll das automatisch funktionieren. Hier auf meinem Gentoo musste ich an einer Stelle nachhelfen. Das Kernelmodul usbserial muss ich mit den Parametern vendor=0x0525 product=0xa4a7 starten, damit es funzt. Bei mir wird dann die Schnittstelle unter /dev/tts/ttyUSB0 abgelegt.

Starte minicom -s und konfiguriere es für deine Schnittstelle (dazu musst du root sein). Danach starte minicom als user. Et voila du hast ne Konsole auf deinem GP2X.

Leider ist diese Konsole ein bischen eingeschränkt. Ctrl-C funzt nicht so richtig und das ist ganz schön ätzend wenn du aus versehen ein Programm wie wc gestartet hast.

3) Mach dein root Ordner beschreibbar, falls er schreibgeschützt sein sollte: mount / -o remount,rw,noatime

4) Öffne die Datei /etc/securetty und füge am Ende ttygs0 ein. Diese Prozedur erlaubt es später, dass du dich über dieses device als root einloggen darfst.

5) Gehe in deine /etc/profile und such die Zeile, wo das devicenode GPIO erzeugt wird. (mknod /dev/GPIO ....)
Füge darüber folgende paar Zeilen ein:
Code:
<i>
</i>if [ -c /dev/GPIO ]; then
  /bin/bash;
  logout;
  exit;
fi

Was wir damit erreichen ist folgendes: Wenn wir uns später per login einwählen, wird /etc/profile ausgeführt. Blöderweise kommen weiter unten Anweisungen, die ziemlich sicher einen Hänger verursachen werden. (Disclaimer: Zumindest wenn du Myus noatime/ext2/readonly-mount Patch drauf hast). Also gucken wir per if-Anweisung nach, ob die Datei /dev/GPIO existiert (die wird immer beim ersten Start erzeugt) und machen halt was anderes, wenn dem so ist. Und was wir tun ist die bash starten. Wenn der Benutzer die bash beendet wird logout gemacht und dann beendet sich das Skript .

Achso: Ganz unten im Skript wird das gp2xmenu gestartet. Das ist natürlich auch totaler Käse, wenn man sich remote einloggt. Also if-Anweisung muss auf jeden Fall rein.

Sind wir fertig? Nee, leider noch nich.

6) Öffne mal jetzt die Datei /etc/inittab und gehe zu der Zeile wo sie das mit dem Serial login beschreiben:
Code:
<i>
</i># Example how to put a getty on a serial line (for a terminal)
#                                                             to let this work"#T0:12345:respawn:/sbin/getty -L ttyS0 115200 vt100
T0:2345:respawn:/sbin/autologin ttyS0 login -f root
Darunter packst du jetzt diese Zeile:
Code:
<i>
</i>T1:2345:respawn:/sbin/getty -L ttygs0 38400 vt102

Dadurch sagen wir, dass ein login Programm auf ttygs0 lauschen soll und das eine vt102 Konsole emuliert wird.

7) Jetzt brauchen wir nur noch ein Skript was uns den usb gadget treiber läd, das Devicenode anlegt und init anweisst sich nochmal die Inittab anzusehen. Letzteres ist notwendig, weil das ttygs0 Device ja beim booten noch nicht existiert. Dieses Skript sieht so aus.

Ich nenne es load_g_serial.sh:
Code:
<i>
</i>#!/bin/sh

mknod /dev/ttygs0 c 127 0

insmod /lib/modules/2.4.25/kernel/drivers/usb/gadget/net2272.o
insmod g_serial.o use_acm=1

init q

Und weil es so nicht für das Menü ausführbar ist, packe ich folgende Datei noch hinzu: load_g_serial.gpe
Code:
<i>
</i>#!/bin/sh
./${0/.gpe/.sh}

cd /usr/gp2x
./gp2xmenu

Zum entladen des ganzen Krams hatte ich dieses Skript angedacht. Ich nenne es unload_g_serial.sh:
Code:
<i>
</i>#!/bin/sh
rm /dev/ttygs0

rmmod g_serial
rmmod net2272

wait 3

init q
Ums menufähig zu machen kopiere einfach das .gpe File von oben und nenne es unload_g_serial.gpe ...

Aber! So wie es da ist, funktioniert es nicht richtig. Also es entläd zwar die Sachen, aber hinterher ist das System ganz schön instabil. ps ranzt ab und sobald man versucht die Treiber wieder reinzuladen hängt sich der GP2X auf. Usb Storage übers menü funzt auch nicht mehr.

Vielleicht kennt aber jemand eine Spitzenlösung für dieses Problem.

8 ) Wie was? Nix 8ter Punkt. Achso. Gib exit ein. Damit beendet sich die Remote bash und ist frei für andere Sachen.

Jetzt kannst du das load_g_serial Skript ausführen und dann bekommst du eine freudiges 'Hallo' beim nächsten Aufruf von minicom auf deinem PC.

Probleme: So richtig hinhauen will die Terminal emulation nicht. Manchmal werden zeichen nciht richtig aufgefrischt und und Programme wie vi leiden sehr darunter. Kennt vielleicht jemand eine tolle Lösung dafür? Außerdem wäre es cool, wenn die Konsole Farbcodes senden könnte wie ich es von der Linuxkonsole gewöhnt bin ....

Btw: Woher ich das ganz hier habe? Hm tja. Google, rumprobieren, man-pages, etc. Eigentlich bin ich gar nicht so der Admintyp. :)

Wie immer: Kritik, Hinweise, Ergänzungen sind gern willkommen.
 
Achtung Zwei: Ich schreibe das an einer GNU/Linux Maschine und habe keine Ahnung ob Windows mit dem USB Gadget Serial Modul umgehen kann.

I got it working on windows; you need to copy out a snippet into a .inf file, and hunt around for a driver file for a bit. (all described adequately in the 'gadget_serial.txt' file in the archive linked to in this thread on the GP32x.com board: http://www.gp32x.com/board/index.php?showtopic=24053&hl=g_serial.o&st=0)

It works, but if my batteries fail (or when switching off/rebooting the unit) before I have 'stopped' the driver from the windows side, I get a blue screen, and the windows box reboots. As long as you don't do that, it works fine.
4) Öffne die Datei /etc/securetty und füge am Ende ttygs0 ein. Diese Prozedur erlaubt es später, dass du dich über dieses device als root einloggen darfst.

One of the first things I did with 'sterm' was to try if the adduser script and su actually worked, and they did; so you ought to be able to login as non-root. (haven't played enough with it to see if it's actually useful, might not be able to access the screen as non-root..)
Probleme: So richtig hinhauen will die Terminal emulation nicht. Manchmal werden zeichen nciht richtig aufgefrischt und und Programme wie vi leiden sehr darunter. Kennt vielleicht jemand eine tolle Lösung dafür? Außerdem wäre es cool, wenn die Konsole Farbcodes senden könnte wie ich es von der Linuxkonsole gewöhnt bin ....

You should probably try using the 'linux' terminal instead of the 'vt102' one. I think vt102 only has bold, underline etc, no colors.

Also, I really, really recommend the use of 'screen':
Code:
<i>
</i>DESCRIPTION
       Screen is a full-screen window manager that multiplexes a physical ter-
       minal between several processes (typically interactive  shells).   Each
       virtual terminal provides the functions of a DEC VT100 terminal and, in
       addition, several control functions from the ISO 6429  (ECMA  48,  ANSI
       X3.64)  and ISO 2022 standards (e.g. insert/delete line and support for
       multiple character sets).  There is a  scrollback  history  buffer  for
       each virtual terminal and a copy-and-paste mechanism that allows moving
       text regions between windows.

When it is running you can have something like virtual terminals as you'll know them from the linux console. I put my cobbled together build in the file archive, together with gdb...
Wie immer: Kritik, Hinweise, Ergänzungen sind gern willkommen.

Here you go; as always, sorry for writing in English, but I'm pretty sure this is more legible than if I were to try and write in German.


Unfortunately, I didn't pay much attention in school during German-classes (so although I know what noun-cases, verb-conjugation etc. are from studying Latin (and from the last vestiges of them in my own native low-German dialect), I don't know which preposition goes with which case, or even how to properly 'bend' nouns or conjugate verbs), and watching Derrick (too bad it is no longer being made) is just not enough to use the language actively (but at least I know enough to read). Since I'm always short on time, I haven't gotten round to digging up my grammar books, yet...
 
Wenn du screen we den bash hack laufen lässt hast du auch alles richtig (ctrl-c geht und co) und du kannst es leicht mit rmmod wieder rausladen für datei transfer... das einzige problem screen schreibt in den /tmp ordner... alle zusatzdateien die es braucht hab ich mit nem hexeditor in /mnt/sd gemappt (hatte keine lust das zu kompilieren... hab da irgndwie probleme bekommen).. funktioniert auch super (bis auf das er noch in /tmp schreiben muss.. das kann ich wegen FAT und datei rechten nicht auf die sd packen)
 
Kennt ihr eine gute freeware Terminal Software für Win?

MfG
IceOnly
 
Ich habe mir screen 4.0.2 kompiliert leider bekomme ich es nciht zu laufen, da der Kernel keine Netzwerkunterstützung hat.

Wie hast du es geschaft?
 
IceOnly said:
Kennt ihr eine gute freeware Terminal Software für Win?

Tut es denn nicht der Hyperterminal? Oder meinst du jetzt was anderes als die serielle Konsole?

Greetz
BNrXYZ
 
BestNrXYZ said:
IceOnly said:
Kennt ihr eine gute freeware Terminal Software für Win?

Tut es denn nicht der Hyperterminal? Oder meinst du jetzt was anderes als die serielle Konsole?

Greetz
BNrXYZ

Doch die tuts :p

Hab sie schon total vergessen :D

MfG
IceOnly
 
http://luteijn.xs4all.nl/html/gp2x/ linsk straight to my ~/devel/gp2x/ directory. You can inspect the Makefiles, and other configure output for screen and ncurses there. Although I'm not sure they're 100% correct, I might have sped things along a bit by calling gcc by hand with slightly tweaked parameters. I didn't change any of the source (lack of time again), it's all straight from their respective archive-sites. Unfortunately it all worked rather quickly, so I didn't delve into it.

P.
 
Elektranox said:
hab ich richtig verstanden, dass über das USB Kabel, das beim GP2X dabei liegt eine Konsolen verbindung aufgebaut wird? O.O geht die Anleitung daoben jetzt?

Ja. Read this thread http://www.gp32x.com/board/index.php?showtopic=24053 (subtitle of the thread ('linux only') is not accurate anymore.)
Read the thread, get the g_serial.o driver from the link in the first post there, cut out the windows .inf file from the text file, and get the driver for windows from drivers.com or something similar. I wouldn't use the above instructions yet, as tehy are a little overkill _at the moment_.
 
Das geht auch super.

Hab da aber nochmal ne frage:
bash.gpe leitet ja die ausgabe auf usb um und shutdownmenu.gpe ist zum menu schliessen wofür auch immer :)
Aber ist zzz_rmmod wirklich dafür da den seial gadget wieder zu schliessen?
Warum heissen die so komisch :-||

MfG
IceOnly
 
ich lad mir doch keine windows treiber für linux wo landen wir den hier ^_^ Also ich hab mit die g_serial.o geladen...aber bevor ich das jetzt drauf mache möchte ich dann doch noch wissen wie ich mit linux danach darauf zugreifen kann ;)
 
IceOnly said:
Das geht auch super.

Hab da aber nochmal ne frage:
bash.gpe leitet ja die ausgabe auf usb um und shutdownmenu.gpe ist zum menu schliessen wofür auch immer :)
Aber ist zzz_rmmod wirklich dafür da den seial gadget wieder zu schliessen?
Warum heissen die so komisch :-||

MfG
IceOnly
bash.gpe heisst mittlerweile usb_bash.gpe bei mir.
shutdownmenu.gpe beendet ganz einfach das Menüprogramm. Ich hab das irgendwann am Anfang meiner Frickeleien gebraucht. zzz_rrmod.gpe ist dafür da, die Kernelmodule zu entladen, damit wird dann die serielle Verbindung abgebaut.

Der Name des Skripts ist derselbe, wie im Originalpaket. Eventuell wollte der Author erzwingen, das die Datei am Ende steht.

Wenn du ne serielle Verbindung geöffnet hast, steht es dir ja frei die Sachen umzubennen. :)
 
Menu killer is useful if you accidentally end up with multiple copies of it running, although 'ps' and 'kill' are your friends too.
IceOnly said:
Aber ist zzz_rmmod wirklich dafür da den seial gadget wieder zu schliessen?
Warum heissen die so komisch :-||

So it will be sorted at the bottom of the list in the menu, for easy access?
I think the zzz_rmmod stuff is not working 100% correctly, actually never used it, just 'switch off' the driver on the windows side, then switch off the gp2x... What I do use is 'mount' and 'umount' on the sd-card (mount to get the /dev/ entry used, then umount to get rid of it. type 'mount' again to double check it got unmounted, then eject the card. It will automount again (if using FW 1.1.0) after you've reinserted it.).
 
Elektranox said:
ich lad mir doch keine windows treiber für linux wo landen wir den hier ^_^ Also ich hab mit die g_serial.o geladen...aber bevor ich das jetzt drauf mache möchte ich dann doch noch wissen wie ich mit linux danach darauf zugreifen kann ;)
Na mit dem guten minicom (http://alioth.debian.org/projects/minicom)
 
Elektranox said:
ich lad mir doch keine windows treiber für linux wo landen wir den hier ^_^ Also ich hab mit die g_serial.o geladen...aber bevor ich das jetzt drauf mache möchte ich dann doch noch wissen wie ich mit linux danach darauf zugreifen kann ;)

George (gfoot) explains all that in the post on the English forum..
 
Back
Top