Seite 1 von 1

(gelöst) kUbuntu 10.10 Probleme mit seriellen Port

Verfasst: 7. Dezember 2010 12:57
von Ritchie
Hallo Zusammen,

hat Erfahrungen damit gemacht, das sich offensichtlich etwas in der Ansteuerung der seriellen Schnittstetelle geändert hat.

Wenn ja, gibt es irgendwo ein Log, wo man nachlesen kann, was sich geändert hat.

Mein Binary Übertragung arbeiten nicht mehr, seit dem ich auf kUbuntu 10.10 mein System geupdated habe.

Gruss R.

Edit:
Störende Pakete sind 'brltty' oder 'brtty' und 'modem-manager'. :-)

Verfasst: 7. Dezember 2010 13:07
von franzf
Ich hab kein Ubuntu, und auch keine Serielle Schnittstelle. Google hat nach ein wenig Quängeln aber das ausgespuckt:
http://www.linux.org/docs/ldp/howto/Ser ... TO-11.html
Bringt dich das weiter?

Verfasst: 7. Dezember 2010 17:11
von Ritchie
Hallo,

nun ja, hinter dem Link ist eine Beschreibung, wie man die Software erstellen soll, wenn man eine serielle Schnittstelle abfragen will.

Mein Routine hat eigentlich unter kUbuntu 9.4 / 10.4 korrekt gearbeitet. Ich konnte zwischen diesen beiden Rechner eine Binäre-Datenübertragung ohne Probleme fahren.
(Habe ein Simulationsprogramm für das Protokoll 3964 von Siemens geschrieben und am laufen.

Bei der Erstellung hatte ich damals schon Probleme, alleine in Sachen Doku., konnte diese aber alle lösen.

Nach dem Update auf 10.10 habe ich jetzt keine stabile Verbindung mehr und teilweise lässt sich der Port ttyS0 nicht mehr öffnen. Hier kommt die Fehlermeldung dev nicht vorhanden,
jedoch ist die Datei /dev/ttyS0 vorhanden.

Ich suche eigentlich nur die Stelle(n), wo beschrieben ist, was die Entwickler in diesem Teilbereich geändert haben, damit ich mein Programm anpassen kann.

Edit1:
Scheint ein Sicherheitproblem zu sein:
http://www.ubuntu-forum.de/artikel/5158 ... enied.html

Jedoch sind meine Benutzer bereits Mitglied in "dialout".

Code: Alles auswählen

	if ((fd = open("/dev/ttyUSB0", (O_RDWR | O_NOCTTY | O_SYNC))) == -1)
		{
Das Programm bleibt in diesem Aufruf hängen ??


Gruss R.

Verfasst: 7. Dezember 2010 21:05
von kater
Ach wie war das... buntu installiert irgendein Programm welches die erste serielle Schnittstelle belegt. berilie berlly beryl ich komm nicht drauf. Irgendwas mit Blindenschrift, Eingabehilfe für Behinderte, oder sowas.

Wenn man danach sucht steht als erstes immer, man solle es deinstallieren ^^ Mir fällt dummerweise grad nicht ein wie es heisst und auf die schnelle auch nicht bei google gefunden. Aber vllt. hast du mehr Glück :)

Verfasst: 7. Dezember 2010 21:49
von franzf
kater hat geschrieben:berilie berlly beryl ich komm nicht drauf. Irgendwas mit Blindenschrift, Eingabehilfe für Behinderte, oder sowas.
Braille? Unter Gentoo hab ich als Paket das "nfbtrans" gefunden - meinst du das?

Verfasst: 8. Dezember 2010 04:45
von kater
brltty heisst es
http://www.ladyada.net/learn/arduino/lesson0-lin.html
If you see something like this

[ 1900.712000] ftdi_sio 2-10:1.0: FTDI USB Serial Device converter detected
[ 1900.712000] drivers/usb/serial/ftdi_sio.c: Detected FT232BM
[ 1900.712000] usb 2-10: FTDI USB Serial Device converter now attached to ttyUSB0
[ 1901.868000] usb 2-10: usbfs: interface 0 claimed by ftdi_sio while 'brltty' sets config #1
[ 1901.872000] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 1901.872000] ftdi_sio 2-10:1.0: device disconnected

That means you have not uninstalled brltty and you should try again.
http://wiki.laptop.org/go/Serial_adapte ... 9_software
Debian (and derivative) distros come with the brltty package installed. This package conflicts with using the device as a plain serial port. Upon insertion the brltty driver takes over the device and disconnects the /dev/ttyUSBn device. The solution to this is to remove or disable the brltty package. On Debian (and derivatives) you can do this with

sudo apt-get remove brltty

Verfasst: 8. Dezember 2010 09:13
von Ritchie
Hallo "kater",

werde das heute abend sofort prüfen. Hat mich eine Menge Nerven gekostet, da ich mir das nicht erklären konnte.

Danach sollte ich wohl, wenn es das ist, eine Funktion einbauen, welche prüft, ob die serielle Schnittstelle von jemand anderem verwendet wird.

Hätte ich eigentlich von dem Aufruf erwartet, das er mit Fehlermeldung beendet wird und nicht einfach "stirbt".

Gruss R.

Verfasst: 8. Dezember 2010 09:50
von kater
Eigentlich nicht nein. Warum nutzt du das Flag O_NOCTTY?

O_NOCTTY:
If pathname refers to a terminal device -- see tty(4) -- it will not become the
process's controlling terminal even if the process does not have one.

Verfasst: 8. Dezember 2010 12:39
von Ritchie
Weil ich eine Binäre Datenübertragung fahre und nicht haben will,
das Steuerzeichen interpretiert werden.
Die Software hat ja bereits ein Jahr lang so korrekt gearbeitet.

Edit1:
Joo, habe den Text "britty" erst gelesen und danach gesucht. Es ist aber BRTTY nur klein geschrieben. Das war noch auf einer Installation zu finden.


Ich habe jetzt gtkTerm auf beiden Rechner installiert und ich kann via Terminal in beiden Richtungen Daten übertragen. Die Schnittstellen sind also verfügbar. (jedenfalls für gtkTerm)

Jetzt habe ich auch den "ttyUSB0 Treiber gegen eine ttyS0 Schnittstelle an dem zweiten Rechner ersetzt. Läuft immer noch nicht :-(

Edit 2:
So, ein Testprogramm von Rechner 1 zu 2 arbeitet auch korrekt.
Wird der Port vom Hauptprogramm einmal korrekt geöffnet, arbeitet die Übertragung korrekt.

Das ganze läuft in einem Thread im Hintergrund (SysTray), wurde evtl. der Stackbereich verkleinert ? Ich sehe immer in eine Stringumwandlung nach den Aufruf "Schmutzzeichen" ...

Edit 3:
Ach ja,
lsof /dev/tty*
Zeige keine offenen Dateien, es ist also kein anderer beteiligt, obwohl die Fehlermeldung aussagt. "Device nicht vorhanden"



Gruss R.

Verfasst: 8. Dezember 2010 17:56
von kater
Aber das Flag ist doch für was ganz anderes zuständig als Steuerzeichen, oder hab ich das komplett falsch verstanden.

Verfasst: 8. Dezember 2010 18:03
von Ritchie
Hi,

habe es auch mal weg genommen. Keinen Einfluss. Es klappt ja auch mal, aber eben nicht stabil.

Code: Alles auswählen

//	p=comPortString.toLocal8Bit();						// Convert QT -> char
	if ((fd = open("/dev/ttyS0", (O_RDWR | O_NOCTTY | O_SYNC ))) == -1)
		{
		error=errno;
		ErrorText=tr("initPort: Can't open device %1 because of %2").arg(comPortString).arg(strerror(error));
		qDebug() << ErrorText;
		ErrorStatus=true;
		return;
		}
Wenn ich auf den ttyUSB0 Port schalte, arbeitet das Programm auf dem einen Rechner nicht mehr. Es bleibt im Aufruf stehen.
Hier habe ich jetzt eine echt serielle Schnittstelle, bis das Problem gelöst ist. (hoffe auf Treiberfehler)

Auf dem anderen Rechner scheint die Wandlung von QString nach ASC nicht immer korrekt zu arbeiten, daher wurde der Port nicht korrekt geöffnet (hier ist es bereits ttyS0).

Code: Alles auswählen

const		char	*p;

	p=comPortString.toLocal8Bit();						// Convert QT -> char

Wo ist der Fehler ?
wahrscheinlich deshalb! Ein geändertes timing im OS könnte den Fehler hervorgerufen haben, der schon immer im Programm vorhanden ist/war.
http://doc.trolltech.com/4.7/qstring.html
Note: All functions in this class are reentrant, except for ascii(), latin1(), utf8(), and local8Bit(), which are nonreentrant.

Gruss R.

Verfasst: 8. Dezember 2010 21:00
von Ritchie
Nochmals vielen Dank an Euch beide,

alleine wäre ich nicht so schnell weiter gekommen !

Gruss Ritchie :-)

P.S.: Das störende Paket kann auch 'BRLTTY' (klein geschrieben) heissen unter kUbuntu.
Edit: Und das Paket 'Modem-Manager' für UMTS handys