Drivers are built on top of devices to interpret hardware-level data and publish it to the controller interface. They may also receive commands from the controller interface to read or write to hardware devices.