summaryrefslogtreecommitdiff
path: root/community/gsoc/project_ideas/driver_glue_code.mdwn
blob: 8581c7cba31098041893c3fcb3d60a9347566d0f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[[!meta copyright="Copyright © 2008, 2009, 2010, 2011 Free Software Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[!meta title="New Driver Framework"]]

[[!tag stable_URL]]

The Hurd presently uses hardware drivers
implemented in the microkernel, [[GNU_Mach|microkernel/mach/gnumach]].
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]].
[[open issues/user-space device drivers]].
[[open issues/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|zhengda]] 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.
<!-- should probably provide separate task descriptions for each... -->

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...)