Forum: PC Hard- und Software avrdude bauen, libusb?


von Dergute W. (derguteweka)


Lesenswert?

Moin,

Hier ist ein selbstgebastelter usbtiny Programmieradapter (Bus 001 
Device 004: ID 1781:0c9f Multiple Vendors USBtiny), der frueher auch 
schon im Einsatz war und ein recht frisch zusammenkompiliertes 
BLFS-12.2.
Jetzt wollte ich mir da einen avrdude-8.0 bauen. Das hat mit dem fiesen 
build.sh script prinzipiell geklappt, es fiel auch ein avrdude hinten 
raus. Nur mosert der:
1
avrdude -c usbtiny -pt13 -U flash:w:bla.hex
2
Error: no usb support; please compile again with libusb installed
3
Error: unable to open port usb for programmer usbtiny
4
5
Avrdude done.  Thank you.

Ich hab irgendwas im Hinterkopf, dass aeltere avrdudes nicht nur die 
libusb-1.0.x sondern auch noch die libusb-0.1.x brauchten
Ist das immernoch so?
Die libusb-1.0.27 hab' ich, die libusb-0.1.12 laesst sich mit dem 
gcc-14.2.0 von BLFS12 nicht bauen, alldieweilen er diverse "Sauereien" 
nicht mehr durchgehen laesst:
1
linux.c:377:27: error: '%s' directive output may be truncated writing up to 4096 bytes into a region of size 1006 [-Werror=format-truncation=]
2
  377 |     USB_ERROR_STR(-errno, "couldn't opendir(%s): %s", dirpath,
3
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~  ~~~~~~~

Was ist denn da der Stand der Dinge?

Gruss
WK

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Dergute W. schrieb:
> Ich hab irgendwas im Hinterkopf, dass aeltere avrdudes nicht nur die
> libusb-1.0.x sondern auch noch die libusb-0.1.x brauchten

Ältere Versionen werden sich bestimmt nicht von selbst verändern. Wenn 
das damals stimmte (was ich annehme), dann wird das wohl immer noch so 
sein.

Kannst du nicht einfach das Paket libusb-dev (0.1.x) installieren? Dann 
musst du sie nicht "bauen", denn das hat schon der Linux Distributor 
erledigt.

: Bearbeitet durch User
von Stephan S. (uxdx)


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> Kannst du nicht einfach das Paket libusb-dev (0.1.x) installieren? Dann
> musst du sie nicht "bauen", denn das hat schon der Linux Distributor
> erledigt.

Sowohl bei Debian als auch Ubuntu sind libusb-1.0-0 und libusb-0.1-4 in 
den Paketquellen enthalten.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Was ist denn da der Stand der Dinge?
1
# -------------------------------------
2
# Find libusb
3
4
find_library(HAVE_LIBUSB NAMES ${PREFERRED_LIBUSB})
5
if(HAVE_LIBUSB)
6
    set(LIB_LIBUSB ${HAVE_LIBUSB})
7
endif()
8
9
find_library(HAVE_LIBUSB_1_0 NAMES ${PREFERRED_LIBUSB_1_0})
10
if(HAVE_LIBUSB_1_0)
11
    set(LIB_LIBUSB_1_0 ${HAVE_LIBUSB_1_0})
12
endif()
13
14
# FreeBSD's library 'libusb' supports both the libusb-0.1 and libusb-1.0 API.
15
if (HAVE_LIBUSB AND CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
16
    set(HAVE_LIBUSB_1_0 ${HAVE_LIBUSB})
17
endif()
18
19
find_library(HAVE_LIBUSB_WIN32 NAMES libusb0.a usb0)
20
21
if(HAVE_LIBUSB OR HAVE_LIBUSB_1_0 OR HAVE_LIBUSB_WIN32)
22
    check_include_file(usb.h HAVE_USB_H)
23
    check_include_file(lusb0_usb.h HAVE_LUSB0_USB_H)
24
    check_include_file(libusb.h HAVE_LIBUSB_H)
25
    check_include_file(libusb-1.0/libusb.h HAVE_LIBUSB_1_0_LIBUSB_H)
26
27
    if((USE_LIBUSBWIN32 OR NOT HAVE_LIBUSB) AND HAVE_LIBUSB_WIN32)
28
        set(HAVE_LIBUSB ${HAVE_LIBUSB_WIN32})
29
        set(LIB_LIBUSB ${HAVE_LIBUSB_WIN32})
30
        unset(HAVE_USB_H CACHE)
31
    elseif(NOT HAVE_USB_H)
32
        find_path(LIBUSB_COMPAT_DIR libusb-compat/usb.h)
33
        if(LIBUSB_COMPAT_DIR)
34
            set(LIBUSB_COMPAT_DIR ${LIBUSB_COMPAT_DIR}/libusb-compat)
35
            set(HAVE_USB_H 1)
36
        else()
37
            unset(LIBUSB_COMPAT_DIR CACHE)
38
        endif()
39
    endif()
40
endif()

von Dergute W. (derguteweka)


Angehängte Dateien:

Lesenswert?

Moin,

Danke fuer die Tipps. Insbesondere den beiden Stephanenden, wo sofort 
klar ist, dass sie die eigentliche Problematik messerscharf erkannt 
haben.
OK, avrdude-8.0 braucht also unter Linux libusb-1.x und libusb-0.y.

Ist nur die libusb1.x da und keine libusb-0.y kommt halt die 
Fehlermeldung: no usb support; please compile again with libusb 
installed
-> Vielleicht da mal ueber eine kleine Texterweiterung nachsinnen?

Anbei ein fieser patch, der die Gscheidhaferligkeit des gcc14 durch 
sinnlos vergroesserte Buffer umgeht. Damit kompiliert die libusb-0.1.12, 
in Folge tut dann auch der avrdude.

Gruss
WK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> OK, avrdude-8.0 braucht also unter Linux libusb-1.x und libusb-0.y.

Hat nichts mit Linux zu tun. Das liegt einfach daran, auf welchem der 
APIs die jeweiligen Implementierungen aufsetzen. Die meisten setzen auf 
dem 0.1 API auf (hat sich halt nie jemand gefunden, der sie hätte neu 
schreiben wollen), lediglich CH341 wurde für das 1.0 API geschrieben, 
USBasp kommt wahlweise mit 0.1 oder 1.0 aus, und FT245 kann entweder 
libusb 1.0 oder libftdi nehmen.

> Anbei ein fieser patch

Ziemlich wirr. Einfach wahllos Puffer vergrößert, mal 2 * PATH_MAX, ein 
andermal 3 *, dann 4 *, und eine völlig aus der Luft gegriffene Zahl für 
einen globalen Puffer.

Was ist denn eigentlich genau das Problem beim Compilieren? Den größeren 
Puffer für den error string kann ich mir vorstellen, wenngleich gewiss 
niemand 10 Kilobyte braucht, aber bei den Dateinamen verstehe ich das 
gar nicht. So lang können die nicht sein, die sind doch irgendwo unter 
sysfs bei Linux.

Dem Compiler sollte das sowieso egal sein, aber kann natürlich sein, 
dass der Laufzeittest auf überlaufende Puffer (mal wieder) fehlt.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jörg W. schrieb:
> Ziemlich wirr. Einfach wahllos Puffer vergrößert, mal 2 * PATH_MAX, ein
> andermal 3 *, dann 4 *, und eine völlig aus der Luft gegriffene Zahl für
> einen globalen Puffer.

Der Faktor haengt damit zusammen, wieviele strings im snprintf zu einem 
neuen verwurstet werden.
Ich sag' ja: Ein fieser patch.
Nur grad soviel, dass make durchlaeuft und ich dann sicher weiss, ob 
tatsaechlich die libusb-0.x die Sache fixt. Haett' ich den patch hier 
nicht angepappt, sondern nur geschrieben: "Prima, jetzt gehts" haette 
sich sicherlich mindestens wieder einer auf den Schlips getreten 
gefuehlt.

> Was ist denn eigentlich genau das Problem beim Compilieren?
Steht im 1. Post, hier noch mal deutlich: make bricht beim bauen der 
libusb-0.1.12 ab, weil gcc(14.2.0) mit einer Fehlermeldung (siehe 1. 
Post) abbricht.
So wie ich das sehe, hat gcc "Angst", dass strings abgeschnitten werden. 
Pufferueberlaeufe wirds da auf den ersten Blick eher nicht geben.
Die gcc-Konstrukteure haben da jetzt ein paar Sachen fest eingebaut, mit 
denen sich gcc standardmaessig so verhaelt, wie wenn er "frueher" mit 
-Werror gestartet worden waere. (Und wo ich mich tlw. wundere, wie lange 
gcc das einfach so mitgemacht hat; das stringverarbeitungsgedoens hier 
gehoert nicht dazu)

Gruss
WK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Steht im 1. Post,

OK, nochmal gelesen (vorher nur auf dem Handy geguckt und nicht alles so 
überblickt).

Damit hätte es aber genügen sollen, diesen error-String auf 4096 
aufzuweiten.

Besser wäre es ohnehin, die Größe dynamisch zu machen, aber das ist 'n 
anderer Punkt.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jörg W. schrieb:
> Besser wäre es ohnehin, die Größe dynamisch zu machen, aber das ist 'n
> anderer Punkt.

Noch besser waere es ohnehin, nicht mehr in altem Code rumzuruehren, den 
seit >18 Jahren keiner mehr angefasst hat, weil's eine neue lib gibt.

Jörg W. schrieb:
> (hat sich halt nie jemand gefunden, der sie hätte neu
> schreiben wollen)

Jaa, ich kenne die Problematik... :-)


Gruss
WK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Noch besser waere es ohnehin, nicht mehr in altem Code rumzuruehren, den
> seit >18 Jahren keiner mehr angefasst hat, weil's eine neue lib gibt.

Das hilft nichts, wenn das neue API halt vollständig inkompatibel mit 
dem vorherigen ist und die Leute da schon eine Menge Arbeit reingesteckt 
haben.

Aus gutem Grund liefert die (OS-eigene) libusb bei FreeBSD sowohl das 
0.1 als auch das 1.0 API (und noch ein weiteres, FreeBSD-eigenes, das 
sie 2.0 getauft haben). Der Code, der 0.1 verwendet, schreibt sich halt 
nicht von selbst um, und bloßes Umschreiben von Code, nur weil jemand 
ein schickeres API gemacht hat, ohne dass dabei sonst ein Mehrwert 
entstünde, gehört nicht unbedingt zu den Tätigkeiten, bei denen die 
Freiwilligen sofort alle nach vorn stürmen würden …

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Dergute W. schrieb:
>> Steht im 1. Post,
>
> OK, nochmal gelesen (vorher nur auf dem Handy geguckt und nicht alles so
> überblickt).
>
> Damit hätte es aber genügen sollen, diesen error-String auf 4096
> aufzuweiten.

Kleiner Nachtrag: bei den diversen Pfadnamen wäre es auch völlig 
legitim, snprintf() zu benutzen, um so den sich ergebenden String zu 
limitieren.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jörg W. schrieb:
> Kleiner Nachtrag: bei den diversen Pfadnamen wäre es auch völlig
> legitim, snprintf() zu benutzen, um so den sich ergebenden String zu
> limitieren.

Ja, das wird dort auch genauso gemacht. Hab' grad nochmal 
druebergeschaut: Es liegt nicht am picky gcc14, sondern es liegt daran, 
dass die libusb-0 Entwickler das Ding mit -Werror kompilieren. Was ja 
nun in der release nicht unbedingt clever ist, weils genau solche 
Probleme mit immer schlauer werdenden Compilern triggert.
Man kann das -Werror auch aus dem Makefile[,.am] rausbauen, dann laeufts 
auch ohne meinen fiesen Patch.
Dem gcc faellt nur auf, dass bei der snprintf() Operation was 
abgeschnitten werden kann. Also nix mit bufferoverflow oder so.

Aber egal was: Irgendwas muss an der ollen libusb-0 angefasst werden, 
damit das mit aktuellem gcc tut.

Gruss
WK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> es liegt daran, dass die libusb-0 Entwickler das Ding mit -Werror
> kompilieren

Das dürfte dann eine Zeile über dem von dir zitierten Text gestanden 
haben. ;-) "Warnings treated as errors" oder sowas.

> Aber egal was: Irgendwas muss an der ollen libusb-0 angefasst werden,
> damit das mit aktuellem gcc tut.

Angesichts dessen, dass das 0.1er API halt nach wie vor eine Bedeutung 
hat, könnten sie auch mal eine neue Version davon veröffentlichen, die 
genau das korrigiert. Man kann sich ja gern wünschen, dass alle auf die 
1.0 aufspringen, aber wie wir sehen, passiert das davon allein eben 
nicht.

: Bearbeitet durch Moderator
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jörg W. schrieb:
> Das dürfte dann eine Zeile über dem von dir zitierten Text gestanden
> haben. ;-) "Warnings treated as errors" oder sowas.

Nee, ganz so einfach - bzw. ganz so blind bin ich/war es nicht.

Jörg W. schrieb:
> Angesichts dessen, dass das 0.1er API halt nach wie vor eine Bedeutung
> hat, könnten sie auch mal eine neue Version davon veröffentlichen, die
> genau das korrigiert.

Das koennte man machen. Hast du spontan ein Projekt ausser avrdude im 
Kopf, was die libusb-0 noch braucht?
Ich bau' ja dann und wann gerne mal ein BLFS und da ist die libusb-0 
nach BLFS-6.3 (August2008) aus "dem Buch" rausgeflogen. Und mir faellt's 
eben erst jetzt auf, dass die aktuell noch wer braucht...

Gruss
WK

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dergute W. schrieb:
> Hast du spontan ein Projekt ausser avrdude im Kopf, was die libusb-0
> noch braucht?

Nö, kann ich auch schlecht testen, weil es bei den FreeBSD-Ports ja nie 
als Abhängigkeit auftaucht, da das API vom OS bereitgestellt wird. (Dort 
kann ich nur Abhängigkeiten von 3rd-Party-Software verfolgen.)

Aber letztlich jeder, der mal irgendwann irgendwas für 0.1 geschrieben 
hat, was dann "einfach so läuft". Never change a running system und so … 
Klar ist das 1.0er API besser (durchdacht), aber wenn man irgendwas hat, 
was mit 0.1 bereits funktioniert, hat das andere API keinerlei Mehrwert.

Beitrag #7769491 wurde vom Autor gelöscht.
von Thomas Z. (usbman)


Lesenswert?

Jörg W. schrieb:
> Dergute W. schrieb:
>> Hast du spontan ein Projekt ausser avrdude im Kopf, was die libusb-0
>> noch braucht?
>
> Nö, kann ich auch schlecht testen, weil es bei den FreeBSD-Ports ja nie
> als Abhängigkeit auftaucht, da das API vom OS bereitgestellt wird. (Dort
> kann ich nur Abhängigkeiten von 3rd-Party-Software verfolgen.)

Ich hänge mich da mal rein weil ich gerade avrdude mit winusb als 
Treiber teste. Die alte v6.3 arbeitet nicht mit winusb die v8 schon. 
Andere Versionen hab ich nicht probiert. Avrdude6.3 habe ich sowohl mit 
libusbk.sys als auch mit libusb0.sys benutzen können.

unter https://github.com/libusb/libusb/wiki/Windows habe ich nun 
folgendes gesehen:

"Please note that libusb-win32 and libusbK are separate projects. 
libusb-win32 is a Windows-only project which provides a libusb-0.1 API 
compatible library for Windows and the associated kernel driver 
libusb0.sys."

Generell finde ich es schwierig bei libusb die Versionen auseinander zu 
halten (unter Windows). Kann es sein dass unter win die 0.1 API 
notwendig ist wenn winusb verwendet wird?

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Thomas Z. schrieb:
> Kann es sein dass unter win die 0.1 API
> notwendig ist wenn winusb verwendet wird?

Als ich diesbezüglich mal Nachforschungen anstellte, kam ich zu diesem 
Schluss:

libusb-win32 ist offenbar das kompatible Pendant zur libusb von Linux.

Dann führte Microsoft den winusb Treiber ein. Programme, die mit libusb 
ab v1.0.9 compiliert wurden unterstützen den winusb Treiber. 
(https://github.com/libusb/libusb/blob/master/ChangeLog#L272)

Programme, die mit libusb ab v1.0.13 compiliert wurden, unterstützen die 
Treiber winusb, libusb-win32 und libusbK. 
(https://github.com/libusb/libusb/blob/master/ChangeLog#L234)

LibusbK kannte ich noch nicht, habe ich gerade zum ersten mal von 
gelesen.

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> Dann führte Microsoft den winusb Treiber ein.

nun winusb ist seit W7 fester Bestandteil von Windows. Es gibt wohl 
sogar backports auf XP. Ich benutze winusb deshalb sehr gerne weil man 
den Treiber automatisch laden kann (ohne inf, ohne Zertifizierung), 
genauso wie es bei Klassentreiber üblich ist. Dazu muss man nur etwas 
Arbeit in die FW stecken. Viele neuere Geräte arbeiten inzwischen so. 
Man sieht ja auch hier dass User damit überfordert sind einen Usbtreiber 
zu installieren.

: Bearbeitet durch User
von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Thomas Z. schrieb:
> Man sieht ja auch hier dass User damit überfordert sind einen Usbtreiber
> zu installieren.

Für User ist es ohne ordentliche Doku schwer zu erkennen, welche Treiber 
zum Gerät passen und welche Software zu welchem Treiber passt. Beide 
Voraussetzungen müssen gleichzeitig erfüllt werden. Wenn nicht, bekommt 
der Anwender oft unverständliche Fehlermeldungen angezeigt.

Erschwerend kommt dazu, dass die meisten Programmieradapter ohne Treiber 
und ohne Software verschickt werden. Der Anwender muss selbst heraus 
finden, welche Software zum Gerät passt und welcher Treiber zu Software 
+ Gerät passt.

Selbst Atmel und Microchip halten sich mit der entsprechenden 
Dokumentation sehr zurück. Man findet lediglich Kompatibilitätslisten 
zwischen deren IDE und Programmieradapter (ohne Hinweise zu Treibern), 
die jedoch stets unvollständig sind.

Die unterschiedliche gepatchten Versionen avrdude haben ebenfalls zur 
Verwirrung beigetragen. Das es so etwas wie das Zadig Tool überhaupt 
gibt, ist schon ein Unding. Es sollte in einer heilen IT Welt völlig 
unnötig sein.

Ich denke, die Hauptschuld liegt hier bei Microsoft, die nach libusb0 
(libusb-win32) gleich zwei inkompatible Treiber auf den Markt geworfen 
haben. Aber so sind wir es ja von MS gewohnt.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Thomas Z. schrieb:
> Kann es sein dass unter win die 0.1 API notwendig ist

Die meisten der Backends in Avrdude sind für 0.1 geschrieben, und es hat 
sich nie jemand gefunden, sie auf 1.0 anzupassen.

Das ist unabhängig vom OS.

von Christian R. (supachris)


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> Ich denke, die Hauptschuld liegt hier bei Microsoft, die nach libusb0
> (libusb-win32) gleich zwei inkompatible Treiber auf den Markt geworfen
> haben. Aber so sind wir es ja von MS gewohnt.

Seit wann kommt denn LibUSB von Microsoft? Also die machen ja vieles 
seltsames, aber doch keine LibUSB.

Von MS kommt WinUSB und der Treiber klappt seit Jahren bestens.

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Christian R. schrieb:
> Seit wann kommt denn LibUSB von Microsoft?

So habe ich das nicht gemeint. libusb0 (libusb-win32) war der erste 
Treiber dieser Art. Von Microsoft gab es bis dato noch keinen.

Danach hat Microsoft libusbK und danach winusb zum Windows hinzugefügt. 
Beide implementieren das "missing Feature", aber auf inkompatible Art 
zum jeweiligen Vorgänger.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

… und insbesondere nicht plattformunabhängig.

von Christian R. (supachris)


Lesenswert?

LibusbK ist doch aber auch nicht von Microsoft. Auch wenn es sich da 
installieren lässt und ein Winusb kompatibles API hat.
Oder wie meinst du das?

WinUSB ist natürlich nicht plattformunabhängig, ich glaub das war nicht 
das Ziel von MS dabei. Man muss ja schon froh sein, dass sie sowas 
überhaupt auf die Reihe bekommen haben.

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Christian R. schrieb:
> LibusbK ist doch aber auch nicht von Microsoft.
> Auch wenn es sich da installieren lässt und ein Winusb kompatibles API hat.
> Oder wie meinst du das?

Ich meinte, dass LibusbK von Microsoft kommt. Kann sein, dass ich damit 
falsch liege.

von Thomas Z. (usbman)


Angehängte Dateien:

Lesenswert?

Jörg W. schrieb:
> … und insbesondere nicht plattformunabhängig.

muss es gar nicht sein. So wie ich das sehe wurde die 
Kompatibitätsschicht in libusb eingezogen Stefan hat die Stellen weiter 
oben gezeigt: libusb 1.0.09 bzw libusb 1.0.13.
Deswegen kann ich AvrDude 8.0 auch mit allen drei Treibern benutzen. 
Weil ich mir das nicht so recht erklären konnte hab ich mich in diesem 
Thread gemeldet.
Ich habe übrigens mit dem usbASP Backend getestet.

Leider hat bekomme ich die Zadig Installation jetzt nicht mehr aus dem 
System raus. Aber ich wusste vorher schon dass Zadig potentiell 
gefährlich ist.
Mein Ziel ist ein Compound Device Interface 0 auf winusb Interface 1+2 
auf CDC. Das soll automatisch passieren und funktioniert auch mit einer 
frischen VID PID Combo. Nur mit der Original VID/PID von Fischl klappt 
das nicht mehr. Da muss wohl noch ein Registry Eintrag vorhanden sein 
den ich übersehe.

Das hab ich benutzt:
Beitrag "Usb BOS descriptor"

Im Anhang mein UsbTreeView Output

von Thomas Z. (usbman)


Angehängte Dateien:

Lesenswert?

Thomas Z. schrieb:
> Nur mit der Original VID/PID von Fischl klappt
> das nicht mehr

so ich hab es hinbekommen. Es funktioniert nun wie erwartet. Es gibt nur 
zwei kleine Einschränkungen:
- wegen dem Compount device muss ich die mingw Variante von avrdude 
verwenden
- AvrDude muss auf usbasp-clone stehen

Da ich bei meinem Device die Seriennummer vergeben habe ist auch ein 
abwechselnder Betrieb mit einem Fischl Device möglich. Die 
Installationen stören sich nicht. usbasp-clone ist notwendig da sich 
mein Device nicht mit www.fischl.de meldet. Das ist notwendig um die 
Lizenzbedingung bezüglich VID/PID zu erfüllen.

In allen Fällen wird winusb als Treiber verwendet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.