When the host OS is ready to start using device drivers in this framework, it typically calls a probe function for each driver set it uses; this function initializes the drivers and checks for hardware devices supported by any of the drivers in the set. If any such devices are found, they are registered with the host OS by calling a registration routine specific to the type of bus on which the device resides (e.g., ISA, PCI, SCSI). The host OS can then record this information internally so that it knows which devices are available for later use. The OS can implement device registration any way it chooses; however, the driver support library (libdev) provided by the OSKit provides a default implementation of a registration mechanism which builds a single ``hardware tree'' representing all known devices; see Section 12.2 for more information.
When a device driver discovers a device, it creates a device node structure representing the device. The device node structure can be of arbitrary size, and most of its contents are private to the device driver. However, the first part of the device node is always a structure of type oskit_device_t, defined in oskit/dev/dev.h, which contains generic information about the device and driver needed by the OS to make use of the device. In addition, depending on the device's type, there may be additional information available to the host OS, as described in the following section.