Hallo,

ich hoffe mir kann hier jemand weiterhelfen, da es im Netz nur wenig Material zu diesem Thema gibt.
Ich habe vor eine Software, die auf einem Mikrokontroller lief, als Treiber für Linux umzuschreiben.
Hierbei handelt es sich um einen ISDN-Kontroller, der auch als PCI-Karte im System angesprochen werden soll.
Zur Applikation hin sollte er aber wie ein serielles Modem an einem Serialport anzusprechen sein. Also als ein tty, ähnlich dem ttyS0.
Bisher läufts auch ganz klasse, nur gibts da ein paar kleiner Problemchen, die ich bisher nicht beseitigen konnte:

1. Die dynamische Vergabe der major-Nummer klappt scheinbar nicht. Vergebe ich eine feste Nummer, so läuft alles klar. Trage ich aber eine Null ein um eine dynamische Vergabe zu erhalten, initialisiert er den Treiber zwar, bricht aber mit einer Fehlermeldung ab.
Dies erfolgt an folgender Stelle in der init-Funktion:

if (tty_register_driver (&mytty_tty_driver)) {
printk (KERN_ERR "failed to register mytty tty driver\n");
return -1;
}


2. Das ist wphl das größere Problem.
Momentan bin ich noch am Testen des Treibers. Er erbekommt von der Applikation zum Beispiel ein AT-Kommando und schickt dies durch seine Verarbeitungsroutienen und am Ende soll das Kommando wieder an die Applikation zurückgesand werden, um zu schaun ob es auch korrekt durchgeschickt wurde.
So weit so gut. Die Applikation liest das Kommando auch korrekt aus und gibt aber dummerweise für jedes einzelne gelesene Zeichen aus dem Puffer eben genau dieses gelesen wieder an das tty in einem write(tty,..) zurück. Dadurch entsteht ein Echo und das System fährt sich fest.
Bisher umgehe ich das Problem indem ich einfach nachschaue ob nur ein Zeichen an das tty übergeben wurde, oder ob es eine Zeichenkette ist. Bei einem einzelnen Zeichen wird dieses verworfen.
Diese Holzhammermethode sollte aber doch elleganter zu lösen sein. Wie kann ich dieses Echo abstellen und wie kann ich sonst eine Quittung von der Applikation bekommen, das sie ein read(tty,..) ausgeführt hat und den Puffer geleert hat.


Ich bedanke mich schonmal im Vorraus für die hoffentlich zahlreichen Antworten.