Linuxドライバーモジュールで100ミリ秒以上一時停止するにはどうすればよいですか?

delay linux linux-device-driver linux-kernel
Linuxドライバーモジュールで100ミリ秒以上一時停止するにはどうすればよいですか?

定期的に読み取るための一定量のデータを生成するデバイス用のカーネルドライバーを作成しています。 ユーザースペースプログラムは、これをブロッキングドライバーにするのに理想的です。

*ドライバーで4から100ミリ秒の範囲で一時停止するために使用できる方法(つまり、 「_block _」)*を実行していますか? ユーザー空間では、次のようなことをします。

tv.tv_sec  = microsecond_delay / 1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);

or

gettimeofday(tv,NULL);

構造を比較します。

{空} [編集-私自身の答え]

ドライバーで次のコードを使用します。

#include
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);

ほら! 私は今テストします…​

  10  2


ベストアンサー

#include

...
msleep(100);
...

21


schedule_timeoutを使用すると、指定された時間ではなく、指定された最小時間だけスリープします。 指定した時間だけブロックしたい場合は、ロックを使用する必要があります。 睡眠はあなたに最小限の時間を保証するだけです-これはあなたが必要とする多くの細分性によってあなたにとって重要ではないかもしれません。 しかし、いずれにしても、読者がより多くのデータを要求するまで、より良いドライバーは眠ります。

1


タイトルとURLをコピーしました