DEVCTL(4) | FreeBSD Kernel Interfaces Manual | DEVCTL(4) |
名称
devctl — デバイスイベント報告とデバイス制御インタフェース解説
devctl デバイスは、カーネルからデバイスイベントを報告するために使用されます。また、将来のバージョンは何らかのデバイス制御を考慮に入れるでしょう。実装に関する注
この設計では /dev/devctl に対して 1 つの読み込みのみ許可します。これは、長い目で見れば望ましくはありませんが、この実装からたくさんの髪をかきむしります。多分、我々はこのデバイスをクローン可能なデバイスにするべきです。ご了承ください: 我々は、潜在的鶏肉と卵の問題を避けるために、明確にデバイスを device_t ツリーにアタッチしません。 1 つは、このすべてがルートノードに属すと主張することもあり得ます。 1 つは、我々が現在持っている sysctl(3) インタフェースが、より適切に ioctl(2) インタフェースであるかもしれないとさらに主張することもあり得ます。
SIGIO サポートはドライバに含まれています。しかしながら、作者は正しく SIGIO サポートを行うことを確実と思っていません。それは FreeBSD 3.4 か FreeBSD 2.2.8 のときからおそらくテストされていない SIGIO サポートがあるドライバからコピーされました!
このデバイスのための読み込みチャネルはリアルタイムでユーザランドのために変化するレポートに使用されます。我々は一度に 1 つのレコードを返します。一度に 1 文字をこのデバイスに読み込もうとするなら、利用者はデータの残りを失います。 listen する (接続を受け付ける) プログラムはうまく対処すると予想されます。
sysctl とブートパラメータ hw.bus.devctl_disable は、 devd(8) が全く実行されていないとき、 devctl を無効にするために使用されます。
プロトコル
devctl デバイスは ASCII プロトコルを使用します。ドライバは一度に 1 つのレコードをを読み込み側に返します。各レコードは改行で終了しています。レコードの最初の文字はイベントタイプです。
タイプ | 説明 |
! | リンク状態の変更のようなイベント通知。 |
+ | アタッチされたツリーのデバイスノード。 |
- | デタッチされたツリーのデバイスノード。 |
? | 検出された未知のデバイス。 |
メッセージフォーマット
レコードの最初の文字を除いて、アタッチ、デタッチメッセージは同じ形式になっています。
T devat
parenton
location
部分 | 説明 |
T | + または - |
dev | アタッチ/デタッチされたデバイス名。 |
parent | デバイスをアタッチした親のバスのデバイス名。 |
location | バス特定位置情報 |
nomatch メッセージは、デバイスドライバをロードするために使用することができます。デバイスドライバをロードするなら、2 つのものの 1 つが起こるかもしれません。デバイスドライバが何かにアタッチするなら、利用者はデバイスアタッチメッセージを得ます。そうしなければ、何も起こりません。
アタッチ、デタッチメッセージはイベントの後に到着します。これは、代替のドライバをロードするアタッチメッセージを使用できないことを意味します。アタッチメッセージドライバは既にこのデバイスを要求しました。デバイスのデータをフラッシュするためにデタッチメッセージを使用することはできません。デバイスは既にありません。
関連項目
devd(8)February 11, 2003 | FreeBSD |