How do I add a new device driver to seL4?

seL4 runs all device drivers in user mode, device support is therefore not the kernel’s problem. The exceptions are a timer driver, which seL4 needs to enforce time-slice preemption, and the interrupt controller access to which seL4 mediates. When compiled with debugging enabled, the kernel also contains a serial driver.

Other than that, device support is the user’s problem. seL4 provides the mechanisms for user-mode device drivers, especially the ability to map device memory to drivers and forward IRQs as (asynchronous) messages.

Existing drivers

A collection of existing drivers are available in two repositories: https://github.com/SEL4PROJ/projects_libs and https://github.com/seL4/util_libs. Note that these drivers are designed for rapid-prototyping with seL4 and do not provide verification guarantees.