Wie kann ich in einem Linux-Treibermodul für mehr als 100 Millisekunden pausieren?

8

Ich schreibe einen Kernel-Treiber für ein Gerät, das regelmäßige Datenmengen zum regelmäßigen Lesen erzeugt. Das Benutzer-Space-Programm ist ideal geeignet, um dies zu einem blockierenden Treiber zu machen.

Welche Methoden stehen zur Verfügung, um irgendwo zwischen 4 und 100 ms in einem Treiber zu pausieren (d. h. den " block " zu machen) ? Im Benutzerbereich würde ich etwas Ähnliches tun wie:

%Vor%

oder

%Vor%

und vergleiche die Strukturen.

[Bearbeiten - meine eigene Antwort]

Ich werde den folgenden Code in meinem Treiber verwenden:

%Vor%

Voila! Ich werde jetzt testen ...

    
Jamie 09.09.2011, 21:25
quelle

2 Antworten

18
%Vor%     
Jamie 14.09.2011, 14:40
quelle
1

Die Verwendung von schedule_timeout schläft NICHT für eine bestimmte Zeit, sondern für eine bestimmte Zeit. Wenn Sie für eine bestimmte Zeit blockieren möchten, müssen Sie Sperren verwenden. Schlafen garantiert Ihnen nur eine minimale Zeit - das ist für Sie egal, abhängig von der Granularität, die Sie benötigen. Aber ein besserer Fahrer würde schlafen, bis der Leser auf jeden Fall nach mehr Daten verlangte.

    
adrianmcmenamin 09.09.2011 23:04
quelle