EN JA
DEVICE_ADD_CHILD(9)
DEVICE_ADD_CHILD(9) FreeBSD Kernel Developer's Manual DEVICE_ADD_CHILD(9)

名称

device_add_child, device_add_child_ordered既存のデバイスの子どもとして新しいデバイスを追加する

書式

#include < sys/param.h>
#include < 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 の新しい子どものデバイスを追加します。 nameunit 引数は、デバイスの名前とユニット番号を指定します。名前が知られていないなら、呼び出し側は、 NULL を渡すべきです。ユニットが知られていないなら、呼び出し側は、 -1 を渡すべきで、システムは、次の使用可能なユニット番号を選択します。

デバイスの名前は、どのドライバがデバイスに適切であるかを決定するために使用されます。名前が指定されているなら、その名前のドライバだけがプローブされます。名前が与えられないなら、保有しているバスのすべてのドライバがプローブされます。いずれにしても、その名前にバインドされているドライバを安全にアンロード/ロードできるようにデバイスの名前だけが格納されます。

これによって、(PCI のような) デバイスのインスタンスをユニークに識別することができるバスは、各ドライバが、照合のために各デバイスのインスタンスをチェックすることができます。 1 つのドライバだけがデバイスをプローブする機会を得ることができるところで、供給されたプローブのヒントを当てにするバスについて、ドライバ名は、デバイス名として指定されるべきです。

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

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

DEVICE_IDENTIFY(9) ルーチンのコンテキストでデバイスを追加するとき、 device_find_child(9) ルーチンは、デバイスがツリーにまだ追加さてていないことを保証するために使用されるべきです。デバイス名と devclass_t が (子どもの追加時ではなく) プローブ時に関連させられるので、 (後でアンロードされたモジュールに記述された) ドライバの以前のインスタンスは、既にインスタンスを追加しています。バスドライバの作者は、子どもを追加するとき、そして、それらが子どものデバイスの複製を回避するためにロードされアンロードされるとき、同様に注意しなければなりません。

device_add_child(9) の代わりに BUS_ADD_CHILD(9) を使用するべきルーチンを識別します。

戻り値

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

作者

このマニュアルページは、 Doug Rabson によって書かれました。
September 12, 2006 FreeBSD