============== Device Drivers ============== NuttX supports a variety of device drivers, which can be broadly divided in three classes: .. toctree:: :maxdepth: 1 character/index.rst block/index.rst special/index.rst .. note:: Device driver support depends on the *in-memory*, *pseudo* file system that is enabled by default. Lower-half and upper-half ========================= Drivers in NuttX generally work in two distinct layers: * An *upper half* which registers itself to NuttX using a call such as :c:func:`register_driver` or :c:func:`register_blockdriver` and implements the corresponding high-level interface (`read`, `write`, `close`, etc.). implements the interface. This *upper half* calls into the *lower half* via callbacks. * A "lower half" which is typically hardware-specific. This is usually implemented at the architecture or board level.