Moto4lin

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Teil ist Artikel der Hardware Serie.
Laptops Motherboards Servers Eingabegeräte RAID Controller TV Karten Wireless Andere Hardware Andere Architekturen alphabetischer Hardware Index


Inhaltsverzeichnis

[Bearbeiten] Einleitung

Dieser Artikel soll euch helfen mit Hilfe des Programms "moto4lin" und dem original USB-Kabel das Maximum aus eurem P2K-basierten Motorola Telefon herauszuholen. Die meisten modernen Motorola-Geräte unterstützen dieses Protokoll, falls ihr nicht sicher seid, ob euer Telefon dabei ist installiert zuerst das p2kmoto-Paket und führt das Testprogramm aus, wie es weiter unten beschrieben ist. Ich muss leider auch dazu schreiben, dass alles, was ihr mit eurem Telefon und den hier beschriebenen Programmen macht auf eigenes Risiko erfolgt.

[Bearbeiten] Nötige Kernelmodule

Ich verwende für mein System hotplug und udev und beziehe mich später auch darauf. Mit devfs wird es sicherlich ähnlich funktionieren. Um überhaupt mit dem Telefon kommunizieren zu können, benötigt ihr das Kernelmodul für USB-Modems. Es klingt zwar merkwürdig, aber wenn ihr euch mal überlegt, dass das Telefon auch als Modem genutzt werden kann, klingt es weniger unlogisch :-) Das Modul heißt cdc-acm und befindet sich in der Kernel-Konfiguration unter "Device Drivers ---> USB support ---> <M> USB Modem (CDC ACM) support".

[Bearbeiten] Software installieren

Das Programm "moto4lin" befindet sich derzeit noch im Alpha-Stadium und ist meines Wissens noch nicht im Portage-Tree (auch nicht hard masked). Ich würde ja einen ebuild erstellen, aber damit habe ich mich noch nicht auseinander gesetzt. Also führt erstmal kein Weg daran vorbei das Programm selber zu kompilieren. Den Quelltext gibt es unter http://sourceforge.net/projects/moto4lin/. Ihr müsst beide Pakete herunterladen (p2kmoto und moto4lin) und "irgendwohin" entpacken.

moto4lin scheint im portage zu sein (22.03.08), aber nicht p2kmoto

[Bearbeiten] p2kmoto kompilieren

Das ganze habe ich als root durchgeführt, aber den make-Schritt (bis auf make install) kann man noch als user machen. Wechelt ins Verzeichnis "irgendwohin/p2kmoto".

./configure bzw. ./configure --prefix=/usr
make
make install
make clean

Auf einigen Systemen könnte es das schon gewesen sein, aber bei mir musste ich noch ein paar Bibliotheken kopieren (oder bei ./configure --prefix=/usr benutzen) Das Installations-Script kopiert die Bibliotheken nach "/usr/local/lib", aber damit es bei mir funktioniert hat musste ich die Dateien zuerst nach "/usr/lib" kopieren. Anstelle die libs zu kopieren einfach nach "/usr/lib" symlinken (ist nicht der beste weg, aber hier funktioniert es). Funktionieren sollte auch das eintragen von /usr/local/lib in die ld.so:

touch /etc/env.d/50p2kmotot
echo PATH=/usr/local/lib > /etc/env.d/50p2kmotot
ldconfig

Da dies allerdings nicht funktioniert bleibe ich beim linken.

ACHTUNG, alles markieren und einfach in die console pasten, ENTER, fertig.

cd /usr/lib &&\
ln -s /usr/local/lib/libp2kmoto.0.0.0 libp2kmoto &&\
ln -s /usr/local/lib/libp2kmoto.0.0.0 libp2kmoto.0 &&\
ln -s /usr/local/lib/libp2kmoto.0.0.0 libp2kmoto.0.0.0 &&\
ln -s /usr/local/lib/libp2kmoto.a libp2kmoto.a &&\
ln -s /usr/local/lib/libp2kmoto.la libp2kmoto.la

[Bearbeiten] Berechtigungen von /dev/ttyACMx setzen

Um überhaupt als user das ttyACM device benutzen zu dürfen müssen wir erst die Berechtigungen ändern. Dank UDEV geht das recht einfach. Dazu legen wir einfach eine neue Datei "51-my.permissions" in "/etc/udev/permissions.d/" an. (Wer schon eine eigene XX-abc.permissions Datei hat kann dies selbstverständlich dort unterbringen). In dieser Datei lassen wir UDEV beim verbinden eines ACM devices die Rechte auf 0770 setzen und ändern die Gruppenzugehörigkeit von der Gruppe root auf die Gruppe tty. Jetzt muss euer Hauptbenutzer nur noch Mitglied der Gruppe tty werden und schon dürft auf dem device schreiben und lesen.

touch /etc/udev/permissions.d/51-my.permissions
echo ttyACM*:root:tty:0770 > /etc/udev/permissions.d/51-my.permissions

Einschub on klm: 30. Juni 2007: bei mir geht das aber nur so:

touch /etc/udev/rules.d/51-acm.rules
echo KERNEL=="ttyACM[0-9]*", NAME="ttyACM%n", GROUP="usb", MODE="0660" > /etc/udev/rules.d/51-acm.rules

Einschub off klm: 30. Juni 2007

Leider funktioniert "p2ktest" unter einem user dann immer noch nicht, aber es greift immerhin schon mal auf das Telefon zu und sagt "P2k Phone found". Danach trennt das Telefon allerdings die Verbindung zum PC und ich bekomme nur errors. Wenn jemand das Problem gelösthat bitte diese Fehlermeldung dann raus schmeissen. Danke

$ p2ktest
P2k Test
Device list:
22b8:4902: [] []
0000:0000: [] []
046d:c50e: [] []
06a3:052d: [] []
0000:0000: [] []
Switching to P2K...
P2k Phone found

(E_p2k_connect.-3: Unable to set configuration)
Error:[error sending control message: Operation not permitted]
(E_p2k_getPhoneName.-14: E001)
Can not get phone model
Error:[error sending control message: Operation not permitted]
(E_p2k_getDriveName.-14: E001)
Can not get drive name
Error:[error sending control message: Operation not permitted]
(E_p2k_freeSpace.-14: E001)
Can not get free space Error:[error sending control message: Operation not permitted]
(E_p2k_fileCount.-14: E001)
Can not get file count Error:[error sending control message: Operation not permitted]
(E_p2k_fileCount.-14: E001)
(E_p2k_fileList.-14: E000)

Eine billige und unsaubere Lösung wäre:

chmod +s /usr/local/bin/p2ktest

[Bearbeiten] P2K-Verbindung testen

Dem Paket p2kmoto liegt ein kleines Testprogramm bei, mit dem man wunderbar diese Verbindung testen kann. Es befindet sich in "/usr/local/bin" und heißt "p2ktest". Verbindet zuerst das Telefon mit dem PC und behaltet den syslog im Auge. Hotplug und udev sollten ein device namens /dev/ttyACMx erstellt haben und syslog sollte das auch anzeigen.

Wenn ich mein Telefon verbinde sieht das so aus:

Apr 24 16:12:22 nemesis hub 1-1:1.0: state 5 ports 4 chg 0000 evt 0008
Apr 24 16:12:22 nemesis hub 1-1:1.0: port 3, status 0101, change 0001, 12 Mb/s
Apr 24 16:12:22 nemesis hub 1-1:1.0: debounce: port 3: total 100ms stable 100ms status 0x101
Apr 24 16:12:22 nemesis usb 1-1.3: new full speed USB device using uhci_hcd and address 17
Apr 24 16:12:22 nemesis usb 1-1.3: ep0 maxpacket = 8
Apr 24 16:12:22 nemesis usb 1-1.3: skipped 4 descriptors after interface
Apr 24 16:12:22 nemesis usb 1-1.3: skipped 4 descriptors after interface
Apr 24 16:12:22 nemesis usb 1-1.3: new device strings: Mfr=1, Product=2, SerialNumber=0
Apr 24 16:12:22 nemesis usb 1-1.3: default language 0x0409
Apr 24 16:12:22 nemesis usb 1-1.3: Product: Motorola Phone (V3)
Apr 24 16:12:22 nemesis usb 1-1.3: Manufacturer: Motorola Inc.
Apr 24 16:12:22 nemesis usb 1-1.3: hotplug
Apr 24 16:12:22 nemesis usb 1-1.3: configuration #1 chosen from 2 choices
Apr 24 16:12:22 nemesis usb 1-1.3: adding 1-1.3:1.0 (config #1, interface 0)
Apr 24 16:12:22 nemesis usb 1-1.3:1.0: hotplug
Apr 24 16:12:22 nemesis cdc_acm 1-1.3:1.0: usb_probe_interface
Apr 24 16:12:22 nemesis cdc_acm 1-1.3:1.0: usb_probe_interface - got id
Apr 24 16:12:22 nemesis cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device

Also root führt nun folgenden Befehl aus:

p2ktest

Die Ausgabe zeigt bei mir folgendes:

P2k Test
Device list:
0000:0000: [Linux 2.6.11-gentoo-r5 uhci_hcd] [VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (#2)]
22b8:4902: [Motorola Inc.] [Motorola Phone (V3)]
3538:0015: [] []
05e3:0604: [] [USB Hub]
0a12:0001: [] []
0000:0000: [Linux 2.6.11-gentoo-r5 uhci_hcd] [VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller]
Switching to P2K...
P2k Phone found
Phone Model: V3
Drive: /a
Free space: 4938330 bytes
File count: 436 bytes
#Hier käme jetzt eine komplette Liste von Dateien auf dem Telefon

Wenn das funktioniert hat könnt ihr jetzt moto4lin installieren.

[Bearbeiten] moto4lin kompilieren

Entpackt die Dateien wieder "irgendwohin" und führt folgende Befehle aus: Die Warnung von qmake, dass images\video.png fehlt könnt ihr ignorieren, falls "qmake" von bash nicht erkannt wird, versucht mal /usr/qt/3/bin/qmake.

cd irgendwohin/moto4lin
qmake
make
make install

Moto4lin wird, anders als p2ktest, ins Verzeichnis "/usr/bin" kopiert.

[Bearbeiten] Moto4lin verwenden

Vorneweg noch eine kleine INFO: Hier das gleiche Problem wie bei "p2ktest" um "Moto4lin" als user zu verwenden muss ein "chmod +s /usr/bin/moto4lin" her.

Da das Programm noch im Alpha-Stadium ist, ist die Einrichtung nicht ganz intuitiv. Ich habe beispielsweise etwas länger gebraucht, bis ich herausgefunden habe, dass dieses Programm als root ausgeführt werden muss, damit es funktioniert. Das lässt sich sicherlich irgendwie ändern, aber ich habe noch nicht herausgefunden, wie. (An udev liegt es nicht, die Zugriffsrechte habe ich schon angepasst) Unter "Settings --> Preferences" müssen die Vendor-ID und die Product-ID in die entsprechenden Felder eingetragen werden. Um diese herauszufinden bedient ihr euch am besten der Liste im unteren Bereich. Bei mir ist es so, dass das AT-Protokoll (wird unter anderem zum Auslesen des Telefonbuches und zum Versenden von SMS mit dem PC verwendet) eine andere Product-ID hat, als das P2K-Protokoll. Die anderen Einstellungen sind für diese Anleitung unbedeutend, können aber sehr angenehm für die Benutzung sein. Wenn im unteren Textfeld steht "Phone plugged as AT" oder "Phone plugged as P2K" einfach auf "Connect/Disconnect" klicken und die Verbindung zum Telefon sollte stehen. Falls ihr nicht das automatische Downloaden der Dateiliste eingestellt habt, solltet ihr sie jetzt manuell herunterladen und ihr könnt loslegen. Mit dem Programm können Dateien gelöscht werden, die unnötig sind, aber kostbaren Speicher fressen (z.B. vorinstallierte Videos und Klingeltöne). Es ist zwar nicht so komfortabel, wie z.B. Konqueror, aber damit lässt es sich trotzdem leben. Vor dem Löschen solltet ihr ein komplettes Update aller Dateien machen und die Dateiattribute solltet ihr auch auch notieren. Leider unterstützt das Programm (noch) keinen Download das kompletten Speichers und (noch) keinen Up- bzw. Download von Verzeichnisstrukturen. Es können zwar mehrere Dateien auf einmal zum Transfer ausgewählt werden, aber moto4lin kann auf dem Telefon (noch) keine Ordner anlegen. Bevor ihr loslegt solltet ihr euch auch noch die Links anschauen, da findet ihr ein paar nützliche Tipps. Sie beschreiben zwar Windows-Programme, aber ein Linux-User sollte sie problemlos auf moto4lin anwenden können.

[Bearbeiten] Links

Customizing the Motorola Vxxx A Guide to Hex Editing

MAP OF HACKS FOR THE MOTOROLA Vxxx PHONE

MotoModders, just everything you are dreaming of

[Bearbeiten] Anmerkung zum Seem-Editor

Seems können mit moto4lin, im Gegensatz zu p2kman für Windows, direkt editiert werden und müssen nicht als Dateien mit einem Hex-Editor bearbeitet werden. Vorher aber IMMER ein Backup vom Originalzustand anfertigen, damit man die Änderungen im Zweifelsfall rückgängig machen kann. Es gibt unter Win auch Tools mit denen SEEMs direkt editiert werden koennen zu diesen Tools gehören P2KFunc und Bezols's P2KTools. Für eine übersicht an Windows Software schaut einfach mal in die Downloadsection auf MotoModders

[Bearbeiten] Anmerkung zu Problemen

Es scheint, dass die Einbindung eines Motorola V3x, obwohl es eigentlich gehen sollte, einige Probleme erzeugen kann, siehe auch den Bugtracker von moto4lin. Dies ist eventuell ein Kernel-Problem, vielleicht aber auch nicht; siehe Kernel-Bugs 6396 6397. Ein Erfahrungsaustausch wäre hier sehr hilfreich, außerdem scheint es, dass Freiwillige für moto4lin gebraucht werden, das Projekt scheint relativ tot.

Manche Handys (z.B. mein C450) werden zwar erkannt, das Programm scheitert aber dennoch mit der Fehlermeldung "Unable to set configuration". Diese Fehlermeldung erwies sich bei mir als Unsinn - schaltete ich sie ab, funktionierte das Programm einwandfrei. Zumindest einen Versuch sollte es also für alle wert sein:

diff -Nru moto4lin-0.3/moto_ui/p2kproc.cpp moto4lin-0.3-new/moto_ui/p2kproc.cpp
--- moto4lin-0.3/moto_ui/p2kproc.cpp	2005-03-02 19:49:30.000000000 +0100
+++ moto4lin-0.3-new/moto_ui/p2kproc.cpp	2006-07-17 21:34:12.879034000 +0200
@@ -707,7 +707,6 @@
 	phoneHandle=0;
 	phoneHandle = usb_open(phone);
 	if (phoneHandle==0) RAISE("Unable to open phone\n");
-	if (usb_set_configuration(phoneHandle,1)) RAISE("Unable to set configuration");
 	if (usb_claim_interface(phoneHandle, INTERFACE_TEST_COMMAND)) RAISE("Unable to  claim the interface");
 	return(1);
 }
'Persönliche Werkzeuge