serielle Com && Time Stamp Counter

serielle Com && Time Stamp Counter

Post by Stephan Wolf » Wed, 28 Apr 1999 04:00:00



Hallo Freaks

Ich suche jemanden der sich Kernelprogrammierung unter Linux auskennt,
und zwar geht es umfolgendes :

-Kernel Version 2.2.5
-Pentium system
-Programmierung der seriellen Schnittstelle com1 oder com2,
Characterdeveice
-Timerprogrammierung zur Zeitname :
                a : mit dem iternen clock timer (REAL TIME CLOCK)
                b : mit Hilfe des Pentium eigenen TIME STAMP COUNTER

Problemstellung :
es soll ein Kernelmodul (Geraete_treiber)erstellt werden,
welches die serielle Schnittstelle auf Eingabe berwacht :
      -einlesen eines 8bit Zeichens(Konfiguration Baudrate, Buffer =
NULL,
       Paritybit soll alles Konform mit der bereits bestehenden
       serial.c des Kernels bleiben, ebenfalls der Interrupthandler )
      -dies soll im asynchronen Betrieb erfolgen ( abtesten ob Zeichen
       eingegangen oder nicht mit Irq 3,4 je nach com)
      -wenn ein Zeichen eingelesen wird soll sofort der Clock Timer
ausgelesen werden
       (es soll daraus eine Echtzeitmessung werden,
       welche eine Genauigkeit im Micro || Nano
       sekunden bereich bewerkstelligt)
       das Hauptproblem liegt hierbei in der Aktuellen Zeitname
       innerhalb des Seriellen Ger?tetreibers es wird hier eine Irq
unterdrckung
       mittles <cli> erforderlich sein
      -der Devicetreiber, so hab ich mir gedacht, soll in folgender
       weise implementiert werden, entweder durch Ver?nderung des
bereits
       bestehen Seriellen Treibers des Linux Kernels (serial.c &
/dev/ttyS)
       oder als neues Modul welches den Character mit dem der jeweiligen

       Timestampstruktur zurck gibt
  -Vor und Nachteile :
       #bei Ver?nderung von serial .c wird der treiber incompatible, fr
die Mouse
        and so on .... weiter hin greift sich dieser Treiber
 gleich alle coms die er findet mittels
        autodetect ......
Frage  : Wie kann man den Port und die Irq einer einzelnen com  wieder
freigeben, so da?
        man darauf wieder  einen neuen Treiber (MODUL) setzen
kann.......
 vielleicht mit setserial ???????
        Wo greift man da am besten in den Treiber ein ???? vielleicht
beim
 Auslesen des Ports, wo wird
        der Port mit dem Filedescripter verknpft, wie kann
 ich die verknpfung des Rckgabewerts
        mit der Rckgabe des Time Stamps am besten realisieren,
 ich will sp?ter im Usermode nur noch einen Filedescripter
        auslesen der einen Character und die Timestructure
 enth?lt auslesen und abspeichern
 ( dazu sind schon gute Programme in der Serial HOWTO erh?ltlich
        die sich auf ein solches Modul zuschneiden lassen  .........

Sinn und Zweck :  Mu? man dafr in bestehende Serialtreiber
                  eingreifen bzw. Neuschreiben oder
    kann man diese Funktion auch Usermode realisieren, da ist
                  das Einlesen der eines Charkters mittels Irq kein
Problem(termio),
    allerdings kann da die Zeitmessung nicht mehr ohne
                  Unterbrechung erfolgen (weil kein Zugriff auf die
Systeminterrupts
                  gestattet ist) dies kann man vielleicht noch
                  als root umgehen, falls sich dort cli einsetzen l??t,
weiterhin bleibt
                  bei solchen Sachen eine gewisse Zeitverz?gerung nicht
aus ,
                  da ich sowas noch nicht so oft
                  gemacht habe kenne ich mich da leider nur sehr
sp?rlich damit aus .....
                  wenn ich mich an dieser stelle geirrt habe bin ich fr
jeden Tip fr eine m?gliche
                  Implementierung sehr ;)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Und hier  fr alle die nicht lesen wollten noch ein struktogramm :

serielle Pipeline --> UART-Baustein --> port,irq der com0

|

|

|<----- interrupthandler(async)

|

|
                                                        auslesen des
ports mit outb,inb
                                                        auslesen des
Time Stamp Counters

  Problem : entweder serial.c oder neues Modul was kann man tun ???

                                                         beides in der
selben Interruptroutine
                                                       andere Interrupts
werden mit cli blockiert

|

|

|
                                             /dev/ttySspezial-->
Ger?tetreiber (mknode)

|

|

|
                                                  auslesen der Device
mittels fd
                                                  zurck gegeben werden
Character und
                                                  zugeh?riger Time Stamp

|

|

|

fertig

Also noch mal wer dazu noch eine Idee hat oder wei?  was  nicht geht
oder  wie man sowas realisiert der kann sich an folgende
Email addresse wenden oder eine Nachricht in der Newsgroup hinterlassen.

P.S. Quellcode von eigenen Treibern wird in dieser Beziehung natrlich
immer gern genommen, alte BORG WEISHEIT aus STARTRECK
 "Was man nicht assimlieren kann, kann man auch nicht verstehen !"

Email  :

Also dann hoff ich mal das sich jemand meldet und verabschiede mich
hiermit

Tschss ............