The devices that are used by OpenBoot can be either built-in devices or plug-in devices. The firmware device drivers for built-in devices are usually included as permanent parts of the system’s OpenBoot implementation. The drivers for plug-in devices, such as PCI cards, are typically stored on the device itself, and are automatically installed when the device is installed. For PCI cards, FCode goes into the Expansion ROM.
Device drivers can be used to boot the OS from a device or to display text on the device before the OS has activated its own drivers. This feature enables the input and output devices supported by a particular system to evolve without changing the system.
Probing is the process of determining the presence and characteristics of physical and virtual devices. For a device that uses the OpenBoot identification methods, the bulk of the probing process consists of the execution of an FCode program associated with the device. Probing involves selecting a bus device and using it to test for the presence of devices attached to that bus.
It is possible for a plug-in device itself to be a bus device. For example, a PCIe plug-in device might be an adapter for fibre channel. Before the children of a bus device can be probed, the device itself must already exist in the device tree. For the preceding example, the PCIe would have to be probed to locate the fibre channel adapter and install its device node before the fibre channel could be probed for its children.
The device tree is thus constructed incrementally, beginning from the permanent part representing built-in devices and proceeding outward toward the leaves of the tree. The default probing sequence is automatically executed during the start-up sequence, unless overridden. Each bus device that is capable of accepting plug-in devices defines a device method for probing its subordinate devices. In addition, bus devices can define device-dependent user interface commands for probing.