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:
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:
Darunter packst du jetzt diese Zeile:
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:
Und weil es so nicht für das Menü ausführbar ist, packe ich folgende Datei noch hinzu: load_g_serial.gpe
Zum entladen des ganzen Krams hatte ich dieses Skript angedacht. Ich nenne es unload_g_serial.sh:
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.
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
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
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.