DEVICE_IDENTIFY(9) FreeBSD カーネル開発者マニュアル DEVICE_IDENTIFY(9)
名称
DEVICE_IDENTIFY − デバイスの識別とその登録 |
書式
#include <sys/param.h> void |
DEVICE_IDENTIFY(driver_t *driver, device_t parent); |
解説 |
デバイスのための識別関数は、例えば ISA バスなどの、子デバイスを独立して識 別できないバス上のデバイスのためにだけ必要とされます。これはデバイスを認 識 (大抵はハードウェアの不明瞭でないレジスタにアクセスすることによって行 われます) し、そのデバイスに関してカーネルに通知し、新しいデバイスの実体 を作成するために、使用されます。 BUS_ADD_CHILD(9) はバスの子デバイスとして、デバイスを登録するために使用さ れます。そのデバイスの (IRQ や I/O ポートのような) リソースは、個々のリ ソースのために bus_set_resource() (詳細は bus_set_resource(9) を参照) を 呼び出すことによってカーネルに登録されます。 デバイスツリーおよびデバイスドライバツリーが解体されるため、 DEVICE_IDENTIFY() ルーチンはこれを考慮に入れる必要があります。識別ルーチ ンを持っているデバイスドライバをロードおよびアンロードする場合には、この 可能性を排除するための特別の手段がとられない限りは、その子ノードは同じ ノードを何度も追加する能力を持っています。 |
使用例
以下の疑似コードは、ハードウェアの一部をプローブし、デバイスとそのリソー ス (I/O ポート) をカーネルに登録する関数の例を示しています。 void foo_identify(driver_t *driver, device_t parent) { |
device_t child; |
|||
デバイス情報の取り出し; |
|||
if (サポートするデバイスうちの 1 つがマッチする && |
|||
デバイスツリーに未だ存在しない) { |
|||
child = BUS_ADD_CHILD(parent, 0, "foo", -1); |
|||
bus_set_resource(child, SYS_RES_IOPORT, 0, FOO_IOADDR, 1); |
|||
} |
} |
関連項目
BUS_ADD_CHILD(9), bus_set_resource(9), device(9), device_add_child(9), DEVICE_ATTACH(9), DEVICE_DETACH(9), DEVICE_PROBE(9), DEVICE_SHUTDOWN(9) |
作者
このマニュアルページは Alexander Langer 〈alex@FreeBSD.org〉 が書きました。 FreeBSD 10.0 May 13, 2004 FreeBSD 10.0 |