The drivers represent the hardware dependent part of the device management code, implementing the routines necessary to perform low-level accesses to the devices. Depending on the implemented management scheme, the driver code can be embedded in the Generic Kernel (as done in classical Unix systems), in a dedicated system or user thread (as in multithreaded kernels, like Solaris, or in micro-kernel architectures, like Mach or Fiasco), or in the user-level application code (as in the ExoKernel architectures or in the Nemesis vertical-structured kernel).
In our solution, the driver code can be inherited from other free OSs, that can be compiled in the S.Ha.R.K. environment using some glue code, remapping the other system calls to the Generic Kernel interface. This solution allows to support all the hardware supported by the free OS from which the driver is inherited (note that we can inherit code from Linux, that supports most of the current PC hardware).
A new Linux 2.6 Emulation Layer is designed to easily reuse all the device drivers supported by the kernel release 2.6 of Linux. This layer control all the IRQ and linux kernel timers used by a device drivers. A particular bandwidth control mechanism guaranties that any device driver running inside the linux layer cannot break the system real-time constraints. It also keeps the devices fully functional.
A detailed descrition of this device drivers control technique will be put on the documentation as soon as possible.
Serial and Parallel ports
Voltage/Frequency scalable CPU
Network (only UDP support)