Operating systems differ in the ways they associate a device with a specific driver.
In Windows, the hardware-driver association is performed via an INF file,
which registers the device to work with the driver. This association is
performed before the DriverEntry() routine is called. The
operating system recognizes the device, checks its database to identify which
INF file is associated with the device, and according to the INF file, calls
the driver's entry point.
In Linux, the hardware-driver association is defined in the driver's
init_module() routine. This routine includes a callback that
indicates which hardware the driver is designated to handle. The operating
system calls the driver's entry point, based on the definition in the code.