Imported tab->space correction by redhat
[infodrom/manpages-de] / man2 / modules.2
1 .\" Copyright (c) 1994 Bjorn Ekwall <bj0rn@blox.se>
2 .\" This program is distributed according to the Gnu General Public License.
3 .\" See the file COPYING in the kernel source directory /linux
4 .\"
5 .\" Translated to German Mon Sep 30 20:00:00 1996 by Patrick Rother <krd@gulu.net>
6 .\"
7 .TH MODULES 2 "30. September 1996" Linux "Linux Modul-Support"
8 .SH NAME
9 get_kernel_syms, create_module, init_module, delete_module
10 \- Unterstützung für ladbare Module
11 .SH ÜBERSICHT
12 .B #include <linux/module.h>
13 .PP
14 .BI "int get_kernel_syms(struct kernel_sym " *table );
15 .PP
16 .BI "int create_module(char " *module_name ", unsigned long " size );
17 .PP
18 .BI "int init_module(char " *module_name ", char " *code ,
19 .br
20 .BI "\ \ \ \ unsigned " codesize ", struct mod_routines " *routines ,
21 .br
22 .BI "\ \ \ \ struct symbol_table " *symtab );
23 .PP
24 .BI "int delete_module(char " *module_name );
25 .PP
26 .nf
27 struct kernel_sym {
28         unsigned long value;
29         char name[SYM_MAX_NAME];
30 };
31
32 struct mod_routines {
33         int (*init)(void);
34         void (*cleanup)(void);
35 };
36
37 struct module_ref {
38         struct module *module;
39         struct module_ref *next;
40 };
41
42 struct internal_symbol {
43         void *addr;
44         char *name;
45 };
46
47 struct symbol_table {
48         int size; /* insgesamt, einschließlich Stringtabelle!!! */
49         int n_symbols;
50         int n_refs;
51         struct internal_symbol symbol[0];
52         struct module_ref ref[0];
53 };
54 .fi
55 .SH BESCHREIBUNG
56 Diese Systemaufrufe sind noch nicht in eine Bibliothek eingebunden,
57 das heißt, sie müssen durch den Mechanismus
58 .B syscall(__NR_function)
59 aufgerufen werden.
60 .PP
61 .TB
62 .BI get_kernel_syms( table );
63 hat zwei Aufgaben: Zum einen, wenn
64 .I table
65 NULL ist, gibt dieser Aufruf nur die Anzahl der Symbole,
66 einschließlich Modulnamen, zurück, die verfügbar sind.
67 Diese Anzahl sollte benutzt werden um Speicher zu reservieren für diese
68 Anzahl von Einträgen von
69 .B struct kernel_sym.
70 .br
71 Wenn
72 .I table
73 nicht NULL ist kopiert dieser Aufruf alle Kernel-Symbole und Modulnamen
74 (und Versionsinformationen) vom Kernel in der Bereich, auf den 
75 .I table
76 zeigt.
77 Die Einträge sind nach LIFO-Prinzip geordnet.
78 Für jedes Modul wird ein Eintrag, der das Modul beschreibt, gefolgt von
79 Einträgen, die die Symbole beschreiben, die von diesem Modul exportiert
80 werden, erzeugt.
81 .PP
82 Beachte, dass für Symbole die ein Modul beschreiben, der Wert-Teil
83 .I value
84 der Struktur die
85 .I kernel
86 Adresse der Struktur enthält, die das Modul beschreibt.
87 .br
88 Im Teil
89 .I name
90 der Struktur ist dem Modul-Namen ein
91 .B #
92 vorausgestellt, wie in
93 .BR #my_module .
94 Das Symbol, dass ein Modul beschreibt erscheint vor den Symbolen, die durch
95 dieses Modul definiert werden.
96 .br
97 Vor den residenten Symbolen des Kernels erscheint ein Modulnamen-Symbol
98 mit dem Dummynamen
99 .BR # .
100 Diese Information kann benutzt werden um eine Tabelle von Modulreferenzen
101 aufzubauen, wenn Module gestapelt (oder geschichtet) werden.
102
103 .BI create_module( module_name ", " size );
104 belegt
105 .I size
106 Byte Kernelspeicher für ein Modul, und erzeugt die nötigen Kernelstrukturen
107 für das neue Modul
108 .IR name .
109 Das Modul existiert nun im Kernelspeicher, mit dem Status
110 .BR MOD_UNINITIALIZED .
111
112 .BI init_module( module_name ", " code ", "codesize ", " routines ", " symtab );
113 .br
114 Dies ist der wirkliche "module loader", der das Modul
115 .I name
116 in den Kernel lädt.
117 Die Parameter
118 .I code
119 und
120 .I codesize
121 beziehen sich auf das verschobene Binärobjektmodul, welches
122 .I codesize
123 Byte groß ist.
124
125 Wenn der Parameter
126 .I codesize
127 oder-verknüpft mit MOD_AUTOCLEAN ist, wird das
128 Modul für "autocleaning" vorgesehen, d.h. für das regelmäßige entfernen
129 ungenutzter Module.
130
131 Beachte, dass die ersten 4 Byte in der Moduldatei als Referenzzähler im
132 Kernelbereich benutzt werden und von den Makros MOD_INC_USE_COUNT und
133 MOD_DEC_USE_COUNT aktualisiert werden.
134 Dieser Zähler enthält auch die Kennzeichenbits MOD_AUTOCLEAN sowie
135 MOD_VISITED, die für "autocleaning" benutzt werden.
136
137 Die Funktionen, die in
138 .I routines
139 beschrieben werden, werden zum Starten und Stoppen des Moduls benutzt.
140 Diese Zeiger sollten daher die Adressen der Funktionen
141 .B init_module()
142 und
143 .B cleanup_module()
144 enthalten, die für jedes ladbare Modul definiert sein müssen.
145
146 Wenn ein Modul Symbole für die Benutzung durch andere Module exportieren
147 will, oder wenn das Modul Referenzen erstellt zu Symbolen, die durch andere
148 Module definiert wird, dann hat der Parameter
149 .I symtab
150 auf eine Struktur zu zeigen, die dies beschreibt.
151 Ein NULL-Wert für
152 .I symtab
153 bedeutet, dass keine Symbole exportiert werden und keine Referenzen zu anderen
154 Modulen gemacht werden.
155
156 Die
157 .IR symtab ,
158 die in den Kernel hinein kopiert wird, enthält eine Struktur
159 .B symbol_table
160 direkt gefolgt von einer Stringtabelle, die die Namen der Symbole
161 enthält, die von dem Modul definiert werden.
162 Das Element
163 .I size
164 muss auch die Größe dieser Tabelle enthalten.
165
166 Besondere Überlegungen:
167 .br
168 Die Elemente
169 .I n_symbols
170 und
171 .I n_refs
172 sagen aus, wie viele Symbole und wie viele Mudolreferenzen in der Struktur
173 .I symbol_table
174 enthalten sind.
175 Direkt nach diesen Ganzzahlen folgen die Felder mit den Symboldefinitionen.
176 Das Element
177 .I name
178 in jeder
179 .B struct internal_symbol
180 sollte kein gewöhnlicher Pointer sein, sondern der
181 .I offset
182 zu dem zugehörigen Eintrag in der Stringtabelle relativ zum Start der 
183 Struktur symbol_table.
184
185 Wenn alle definierten Symbole aufgelistet sind, folgt das Feld der
186 Modulreferenzen wie in den Elementen
187 .B struct module_ref
188 Beschrieben.
189 Nur das Feld
190 .B module
191 dieser Struktur muss initialisiert sein.
192 Die Moduladressen, die durch einen früheren Aufrufe von
193 .B get_kernel_syms
194 erhalten wurden, von Elementen deren Namen mit
195 .B #
196 beginnen, sollte in dieses Feld kopiert werden.
197 .PP
198 Wenn das Modul erfolgreich geladen werden konnte und wenn der Aufruf der
199 Modulfunktion
200 .B init_module()
201 auch Erfolg hatte,
202 dann wird der Status des Moduls nach MOD_RUNNING geändert.
203 Anderenfalls wird der Kernelspeicher, der von dem Modul belegt wird,
204 freigegeben.
205
206 .BI delete_module( module_name );
207 .br
208 Diese Routine sollte benutzt werden um ein Modul zu entladen.
209 Wenn der Modulreferenzzähler anzeigt, dass das Modul nicht aktiv ist, und wenn
210 es keine Referenzen zu diesem Modul von anderen Modulen gibt, wird
211 die Modulfunktion
212 .B cleanup_module()
213 aufgerufen.
214
215 Wenn all diese Schritt erfolgreich sind wird der Kernelspeicher, der durch
216 das Modul und seine Strukturen belegt ist, freigegeben.
217
218 Beachte, dass wenn NULL als Argument für
219 .B delete_module
220 benutzt wird, der Kernel alle Module entfernt.
221 .SH DIAGNOSE
222 Wenn Fehler auftreten geben diese Funktionen den Wert -1 zurück und setzen
223 die globale Variable
224 .B errno
225 mit der Fehlernummer.
226 Auch wird ein beschreibender Text auf der Konsole ausgegeben.
227 .SH SIEHE AUCH
228 .BR insmod (1),
229 .BR rmmod (1),
230 .BR lsmod (1),
231 .BR ksyms (1),
232 .BR genksyms (8).
233 .SH GESCHICHTE
234 Modul-Support wurde von A. Nonym eingeführt.
235 Die Linux-Version stammt u.a. von Bas Laarhoven <bas@vimec.nl>,
236 Version 0.99.14 von Jon Tombs <jon@gtex02.us.es>,
237 erweitert durch Bjorn Ekwall <bj0rn@blox.se>.
238 .SH BUGS
239 Naah...