次の例は、標準的な _init (9E) インタフェースを示しています。
使用例 6-2 _init() 関数static void *xxstatep; int _init(void) { int error; const int max_instance = 20; /* estimated max device instances */ ddi_soft_state_init(&xxstatep, sizeof (struct xxstate), max_instance); error = mod_install(&xxmodlinkage); if (error != 0) { /* * Cleanup after a failure */ ddi_soft_state_fini(&xxstatep); } return (error); }
ドライバは、1 回限りのリソース割り当てまたはデータ初期化を _init() でのドライバのロード中に実行します。たとえば、ドライバは、そのドライバに対してグローバルな mutex をすべてこのルーチン内で初期化します。ただし、ドライバは _init(9E) を使用して、デバイスの特定のインスタンスと関係があるものを割り当てたり、初期化したりしません。インスタンスごとの初期化は、attach(9E) で実行する必要があります。たとえば、プリンタのドライバが一度に複数のプリンタを処理できる場合、そのドライバは、各プリンタインスタンスに固有のリソースを attach() で割り当てます。