A small piece of Software that lets the OperatingSystem communicate with a specific piece of Hardware.
DeviceDrivers have caused considerable soul-searching in the OpenSource world as they are the lowest level, most platform dependent pieces of software in many systems and many Hardware makers only provide Binary DeviceDrivers for their Hardware in order to avoid giving the competition insights into how the hardware works.
DeviceDrivers are represented in the FileSystem under /dev. They get put here by mknod(1), DevFs or UDev. The current preferred method is UDev.
A DeviceDriver is either for a BlockDevice or a CharacterDevice and has a major and a minor device number. The device numbers are preassigned and listed in the LinuxKernel source in Documentation/devices.txt