DDE/DDEKit
Overview
Device drivers are an essential element in every operating system, because without them no interaction with the external world is possible. Because of the huge range of available devices, implementing L4 device drivers for even the most common devices on the market would be a tedious job. To circumvent this problem and support a wide range of devices on L4, we designed DDE, the Device Driver Environment. Aim of this project is to provide legacy device driver interfaces, so that the large amount of readily available device drivers for other operating systems (such as Linux and BSD) can be reused on L4 with few effort.
DDE consists of three layers:
- DDEKit is a glue layer between the L4Env and the higher device driver layers.
- DDEsomeOS implement OS-specific environments for every supported OS.
- native device drivers are not modified and simply linked against the DDE/DDEKit libraries and extended with a little server code in order to export their interface to other L4 applications.
DDEKit
Even though running inside different operating system environments, drivers usually make use of a certain functionality. DDEKit provides such functionality and therefore relies on L4Env services being available. The mechanisms implemented by DDEKit are:
- Device resource management
- Interrupts
- I/O ports (x86-specific)
- I/O memory
- Access to the PCI config space
- Memory Management
- Memory allocation
- Mapping of virtual to physical addresses
- Threads
- Management of threads
- Synchronization mechanisms
- Locks
- Semaphores
- Condition variables
- Thread-local storage
- Utilities
- Initcalls
- printf(), panic()
The purpose of DDEKit is to provide a common interface to this functionality in order to ease development of device driver environments for different operating systems.