DEVICE_ADD_CHILD(9)

名称
device_add_child, device_add_child_ordered - 存在しているデバイスの子として新しいデバイスを追加

書式
<sys/param.h> <sys/bus.h> device_t device_add_child(device_t dev, const char *name, int unit) device_t device_add_child_ordered(device_t dev, int order, const char *name, int unit)

解説
dev の新しい子デバイスを追加します。 name および unit 引数はデバイスの名前とユニット番号を指定します。 名前が不明の場合には、呼び出し側は NULL を渡すべきです。 ユニット番号が不明の場合には、呼び出し側は -1 を渡すべきで、システムは次の使用可能なユニット番号を選択するでしょう。

デバイスの名前は、どのドライバがそのデバイスに適切であるかを 決定するために使用されます。 名前が指定されている場合には、その名前のドライバのみがプローブされます。 名前が与えられなかった場合には、 認識しているバスの全てのドライバがプローブされます。 全てのイベントで、その名前に結び付いているドライバのロードとアンロードが 安全にできるように、そのデバイスの名前のみが格納されます。

これは、デバイスインスタンスを独自に識別することができるバス (PCI 等) が、 個々のドライバが個々のデバイスインスタンスに適合しているか チェック可能にします。 供給されたプローブヒントに依存して、 たった 1 つのドライバがデバイスをプローブ可能なバスでは、 ドライバの名前はデバイスの名前として指定されるべきです。

通常、ユニット番号はシステムによって自動的に選択されますので、ユニット番号は -1 が与えられるべきです。 指定のユニット番号が希望された時に (例えばハードウェアの一部分を あらかじめ設定されたユニット番号に結びつけるため)、unit は渡されるべきです。 指定されたユニット番号が既に割り当てられていた場合には、新しいユニット番号が 割り当てられ、診断メッセージが表示されます。

指定の順序でプローブされなければならないバス (例えば ISA バス用の幾つかの デバイスは関連の無いドライバのプローブの試みの失敗に敏感で、それゆえ 最初にプローブされなければならない) にアタッチされたデバイスの場合には、 device_add_child_ordered() の order 引数が半順序を指定するために使用されるべきです。 新しいデバイスは、 既存のより大きい順序を持つすべてのデバイスの前に追加されます。 device_add_child() が使用された場合には、順序が 0 であるとして新しい子が追加されます。

DEVICE_IDENTIFY(9) ルーチンのコンテキストでデバイスを追加するときには、 そのデバイスが既にツリーに追加されていないことを保証するために いくつかの注意が払われなければなりません。 なぜならば、そのデバイスの名前と devclass_t はプローブ時に (子の追加時ではなく) 関連付けられ、(モジュールの中で 後でアンロードされたと示されている) そのドライバの前のインスタンスが 既に追加されているかもしれないからです。 バスドライバの作者は同様に、 子デバイスの複製を避けるためにロードおよびアンロードされるときに、 子の追加時にも注意しなければなりません。

戻り値
成功時には新しいデバイスが、そうでなければ NULL が返されます。

関連項目
device(9)

作者
このマニュアルページは Doug Rabson が書きました。