Originally, Unix up to and including SVR3 could only incorporate internal drivers that were directly a part of the kernel binary. The vendor shipped all the drivers and other kernel components as pre-compiled binary files located on the installed filesystem.
If you added a new hardware device to the system like a SCSI controller, you would have to build a new kernel binary that incorporated the appropriate driver for this device. This driver would either already be supplied by the Unix vendor or be a third party driver supplied by the hardware vendor of the device you are installing.
The installation script supplied by the vendor by the third party vendor, or the Unix vendor (when installing generic drivers) would normally also create an appropriate device file in the /dev directory, that would allow programs to gain access to the hardware with normal file access system calls such as open(), close(), read(), write().
After this operation was complete, you would have to reboot this system in order for the new kernel to run, which now included the appropriate driver. This new kernel would now be able to communicate with the respective device.
SVR4 introduced the concept of loadable modules. BSD and Linux also follow this design model, however every Unix system uses different commands to manage these.