The Hurd presently uses hardware drivers implemented in the microkernel, GNU Mach. These drivers are old Linux drivers (mostly from 2.0.x) accessed through a glue code layer. This is not an ideal solution, but works quite OK, except that the drivers are extremely old by now. Thus we need a new framework, so we can use drivers from current Linux versions instead, or perhaps from one of the free BSD variants.

This is GNU Savannah task #5488. user-space device drivers. device drivers and io systems.

The most promising approach for getting newer drivers seems to be DDE: it already does the hard work of providing an environment where the foreign drivers can run, and offers the additional benefit of being externally maintained. DDE also offers the necessary facilities for running all drivers in separate userspace processes, which is more desirable than drivers running in the microkernel.

Zheng Da has already done considerable work on this. The basic framework for using DDE in the Hurd is present, and network card drivers are already working very well. However, this work isn't fully integrated in the Hurd yet. The additional kernel interfaces that were created for this are still prototypes, and will need to be reworked. Also, there is no build system for automatically compiling all Linux network card drivers in one go.

Other types of drivers are missing so far. Support for IDE drivers has been partially implemented, but isn't fully working yet. To fully replace the old in-kernel drivers, further infrastructure will be necessary to make userspace disk drivers usable for the root filesystem.

Some other subsystems are missing or incomplete in DDE itself, and will require additional work that is not specific to the Hurd implementation.

The goal of this task is to fix at least one of the mentioned major shortcomings: rework the kernel interfaces; provide a streamlined build system for the drivers; finish IDE support; or implement support for some other subsystem.

This is a doable, but pretty involved project. Previous experience with driver programming probably is a must. To be able to work on the framework, the student will also have to get a good understanding of certain aspects of Hurd, such as memory management for example.

Possible mentors: Zheng Da, Samuel Thibault (youpi)

Exercise: Get one of the not yet integrated Linux network card drivers to work. (Note: This should be straightforward, once you have the framework properly built and set up...)