Also mal langsam: Unter Echtzeitfähigkeit versteht man, daß ein System innerhalb festgeleter Zeiten auf Ereignisse Reagiert. Es wird unter weicher und harter Echtzeit (EZ)unterschieden: Bei weicher EZ ist ein Verstoß gegen die Vorgaben zwar erlaubt, aber die Nützlichkeit des Ergebnisses nimmt mit der Zeit ab; bei harter EZ darf es keinen Verstoß geben.
Die HFC-Karte ist, genauso wie z.B. Soundkarten, ein hartes EZ-System, da es sofort hörbar wird, wenn die Daten nicht rechtzeitig abgeholt/gesendet wurden (in unserem Fall besagte 125 µs).
Linux ist im allgemeinen dagegen (bestenfalls) ein weiches EZ-System, da es auf guten durchschnittlichen Durchsatz ausgelegt ist, und eben nicht auf garantierte Reaktionszeiten (=Latenz). Der 2.6er Linuxkernel ist dahingehend besser geworden, als daß er (entsprechend konfiguriert) nicht mehr so lange Interrupts blockiert, wodurch er eine kürzere Latenz haben kann. Aber es wird nichts garantiert, auch keine maximalen Reaktionszeiten! (Warum auf der von dir angesprochenen Seite der 2.6er immer langsamer als der 2.4er ist, weiß ich auch nicht...)
ztdummy hilft uns da leider auch nicht weiter, da auch er nichts garantieren kann, wenngleich er vielleicht die Zuverlässigkeit verbessern würde.
Bei RTAI werden Interrupts zuerst von den RTAI-Tasks bearbeitet, und zwar exklusiv (d.h. sie können nur von höherprioren RTAI-Tasks unterbrochen werden, falls vorhanden), erst danach bekommt Linux etwas von dem Interrupt mit. Dadurch kann eine maximale Latenz garantiert werden, es wird 100% "cumulative percentage" erreicht, und zwar bei realistischen Zeiten wie z.B. die 15,5µs; bei Linux werden die 100% niemals erreicht (zumindest theoretisch)!
Fazit: Um den Echtzeitanforderungen unter Linux zu genügen, müßte man entweder erreichen, daß Linux bei einem Timer-Interrupt zuerst den HFC-Treiber anspricht und keine Taskwechsel zuläßt (Änderungen am Kernel, schlecht!), oder man verwendet einen Treiber unter RTAI. Vermutlich würde es bei letzterem reichen, Daten von der Karte zu holen und in einen FIFO zu stecken (und umgekehrt für die Gegenrichtung); den Rest kann dann der normale Treiber übernehmen (sprich alle 8 Bytes die Daten an den Zaptel-Treiber weiterleiten).
Ich sehe keinen anderen Weg, die harten EZ-Anforderungen der Hardware zu erfüllen (ohne groß am Linux-Kernel herumzuschrauben, was doch etwas unsauber wäre).
Zum Schluß noch eine Ergänzung zu LXRT: Es handelt sich hierbei um einen Aufsatz auf RTAI, welcher "normale" Linux-Tasks echtzeitfähig macht - selbst, wenn diese nicht als root gestartet wurden! Dadurch erhöht sich die Latenz, aber man hat dafür so nette Dinge wie Speicherschutz und eine bessere Debug-Fähigkeit. Der Asterisk-Task sollte als solcher laufen, mit einer geringeren Priorität als der RTAI-HFC-Treiber. Dann gäbs wohl keine Timing-Probleme mehr (auch wenn er dann nur noch mit weicher EZ laufen würde, da er Systemaufrufe ausführt)...
Dann kann man gemütlich den Rechner PI auf beliebig viele Nachkommastellen berechnen lassen oder die E-Mails des Nachbarn entschlüsseln lassen, und das Telefon klingt trotzdem noch gut ;-)
(SPASS!!!)
Gruß, Sion
[edit] Man könnte natürlich den Treiber auch anders gestalten, um der ganzen Problematik etwas zu entgehen. Andere Treiber laufen ja auch wunderbar...ohne RTAI! Siehe Florz-Versionen![/edit]