USB: Bilk-Polls zu selten?

13/04/2012 - 15:03 von Jan Bruns | Report spam
Hallo.

Ich habe hier ein Consumer USB-Geràt (es handelt sich um einen DVB-C
Empfànger), zu dem bisher anscheinend keine Linux-Treiber existieren.

Daher wollte ich mal schauen, ob ich ds nicht trotzdem selbst ans
laufen bekomme.

Eine problematische Konstellation ist dabei:

[X] das Geràt verwendet Bulk Pipes zum Datentransport über USB
[X] das Geràt hat nur sehr wenig Pufferspeicher (ich glaube ca. 4KB)

Die Windows-Treiber zum geràt bekommen es offenbar irgendwie
hin, trotz dieser Konstellation sehr komplette Datenströme
ganzer Programmbündel (ca. 10 Fernsehsender) zu erhalten
(das ergibt ca. 300 MByte/min).

Ich selbst komme zwar mit libusb netterweise auch ohne grossen
Aufwand an diesen Datenstrom, aber es sind etwas zu hàufig Lücken
im Datenstrom. Wie hàufig hàngt anscheinend primàr vom libusb
"Transfer-Size" Paramerter ab. Grössere Werte also 16KB kann
ich da aber leider nicht angeben (führt zu ganz viel CPU-Last,
bei keinerlei ausgegebenen Daten). libusb hat wohl einen bekannten,
grob zu diesem Fehlerbild passenden Fehler
http://libusb.sourceforge.net/api-1.0/caveats.html (unten, "eraly
transfer completion"), der aber eigentlich mit einem upgrade auf
libusb-1.0.8 behoben sein sollte, ist er aber leider bzgl. dieses
Problems nicht (kernel 2.6.32-5-amd64).

Übrigens, der Windows-Treiber verursacht in einer VM (Linux-Host)
auch recht grosse CPU-Auslastung auf dem Host, allein im USB-Teil,
und bekommt überhaupt kein Bild.

Mit echtem Windows klappt das dagegen ganz gut. Einziger
mit bisher aufgefallener Kritikpunkt ist etwas Störanfàlligkeit,
wenn der Rechner mit anderen Sachen zu tun hat (kann beim Ton
echt nerven).


Wie würdet ihr da jetzt weiter vorgehen? Erstmal weiter im Userland
mit den verlorenen Datenpaketen leben, um erstmal zu sehen, ob sich
andere Funktionalitàt des Geràtes (Senderbündel wechseln, LEDs
schalten, usw.) irgendwie ans laufen brinden lassen? Wàre natürlich
blöd, da Zeit zu investieren, falls es nicht möglich sein sollte,
spàter einen vollstàndigeren Datenstrom zu erhalten (wieviel
macht denn das Krnel da wohl selbst? wird das teils auch dem
BIOS überlassen?).

Oder erstmal schauen, ob sich eine Ebene tiefer (huch, sind
wir da schon beim Kernel?) irgendwie ein anderes Zeitmanagment
am USB-Port organisieren làsst?

Gruss

Jan Bruns

[X] Technisat CableStar Combo HD (USB)

Ein paar Fotos: http://abnuto.de/gal/
 

Lesen sie die antworten

#1 Jan Bruns
13/04/2012 - 22:48 | Warnen spam
Jan Bruns:

[libusb-bug] der aber eigentlich mit einem upgrade auf
libusb-1.0.8 behoben sein sollte, ist er aber leider bzgl. dieses
Problems nicht (kernel 2.6.32-5-amd64).



Ist auch mit 'nem 3.2er Kernel noch so.
Beim ersten Transfer über 16KB scheint laut einer Debug-Message
wohl der root-hub zurückgesetzt zu werden. Sehr seltsam. Ich wüsste
auch gar nicht, woher der Hub das bei den ersten Paketen schon
wissen könnte, daß es mehr als 16K werden.


Oder erstmal schauen, ob sich eine Ebene tiefer (huch, sind wir da schon
beim Kernel?) irgendwie ein anderes Zeitmanagment am USB-Port
organisieren làsst?



Habe mir jetzt einige tutorials zu kernelmode USB-Treibern angesehen.
Ich vermute, die würden das Problem echt lösen.

<jammermodus>

Aber so richtig viel Lust habe ich erstmal noch nicht, mich da mit
hinsichtlich der die Sache immer erschwerenden Formalitàten zeitlich
rasant veràndernden und/oder distributionsabhàngigen "Entwicklungsumgebungen"
rumzuàrgern (habe doch sonst auch nix mit C, und dieses ganzen Hilfsbehelfen
rund um C drumzu zu tun). Ich will doch nur Fernsehen.

</jammermodus>


Gruss

Jan Bruns


Ein paar Fotos: http://abnuto.de/gal/

Ähnliche fragen