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
5 .\" Translated to German Mon Sep 30 20:00:00 1996 by Patrick Rother <krd@gulu.net>
7 .TH MODULES 2 "30. September 1996" Linux "Linux Modul-Support"
9 get_kernel_syms, create_module, init_module, delete_module
10 \- Unterstützung für ladbare Module
12 .B #include <linux/module.h>
14 .BI "int get_kernel_syms(struct kernel_sym " *table );
16 .BI "int create_module(char " *module_name ", unsigned long " size );
18 .BI "int init_module(char " *module_name ", char " *code ,
20 .BI "\ \ \ \ unsigned " codesize ", struct mod_routines " *routines ,
22 .BI "\ \ \ \ struct symbol_table " *symtab );
24 .BI "int delete_module(char " *module_name );
29 char name[SYM_MAX_NAME];
34 void (*cleanup)(void);
38 struct module *module;
39 struct module_ref *next;
42 struct internal_symbol {
48 int size; /* insgesamt, einschließlich Stringtabelle!!! */
51 struct internal_symbol symbol[0];
52 struct module_ref ref[0];
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)
62 .BI get_kernel_syms( table );
63 hat zwei Aufgaben: Zum einen, wenn
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
73 nicht NULL ist kopiert dieser Aufruf alle Kernel-Symbole und Modulnamen
74 (und Versionsinformationen) vom Kernel in der Bereich, auf den
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
82 Beachte, dass für Symbole die ein Modul beschreiben, der Wert-Teil
86 Adresse der Struktur enthält, die das Modul beschreibt.
90 der Struktur ist dem Modul-Namen ein
92 vorausgestellt, wie in
94 Das Symbol, dass ein Modul beschreibt erscheint vor den Symbolen, die durch
95 dieses Modul definiert werden.
97 Vor den residenten Symbolen des Kernels erscheint ein Modulnamen-Symbol
100 Diese Information kann benutzt werden um eine Tabelle von Modulreferenzen
101 aufzubauen, wenn Module gestapelt (oder geschichtet) werden.
103 .BI create_module( module_name ", " size );
106 Byte Kernelspeicher für ein Modul, und erzeugt die nötigen Kernelstrukturen
109 Das Modul existiert nun im Kernelspeicher, mit dem Status
110 .BR MOD_UNINITIALIZED .
112 .BI init_module( module_name ", " code ", "codesize ", " routines ", " symtab );
114 Dies ist der wirkliche "module loader", der das Modul
121 beziehen sich auf das verschobene Binärobjektmodul, welches
127 oder-verknüpft mit MOD_AUTOCLEAN ist, wird das
128 Modul für "autocleaning" vorgesehen, d.h. für das regelmäßige entfernen
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.
137 Die Funktionen, die in
139 beschrieben werden, werden zum Starten und Stoppen des Moduls benutzt.
140 Diese Zeiger sollten daher die Adressen der Funktionen
144 enthalten, die für jedes ladbare Modul definiert sein müssen.
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
150 auf eine Struktur zu zeigen, die dies beschreibt.
153 bedeutet, dass keine Symbole exportiert werden und keine Referenzen zu anderen
154 Modulen gemacht werden.
158 die in den Kernel hinein kopiert wird, enthält eine Struktur
160 direkt gefolgt von einer Stringtabelle, die die Namen der Symbole
161 enthält, die von dem Modul definiert werden.
164 muss auch die Größe dieser Tabelle enthalten.
166 Besondere Überlegungen:
172 sagen aus, wie viele Symbole und wie viele Mudolreferenzen in der Struktur
175 Direkt nach diesen Ganzzahlen folgen die Felder mit den Symboldefinitionen.
179 .B struct internal_symbol
180 sollte kein gewöhnlicher Pointer sein, sondern der
182 zu dem zugehörigen Eintrag in der Stringtabelle relativ zum Start der
183 Struktur symbol_table.
185 Wenn alle definierten Symbole aufgelistet sind, folgt das Feld der
186 Modulreferenzen wie in den Elementen
191 dieser Struktur muss initialisiert sein.
192 Die Moduladressen, die durch einen früheren Aufrufe von
194 erhalten wurden, von Elementen deren Namen mit
196 beginnen, sollte in dieses Feld kopiert werden.
198 Wenn das Modul erfolgreich geladen werden konnte und wenn der Aufruf der
202 dann wird der Status des Moduls nach MOD_RUNNING geändert.
203 Anderenfalls wird der Kernelspeicher, der von dem Modul belegt wird,
206 .BI delete_module( module_name );
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
215 Wenn all diese Schritt erfolgreich sind wird der Kernelspeicher, der durch
216 das Modul und seine Strukturen belegt ist, freigegeben.
218 Beachte, dass wenn NULL als Argument für
220 benutzt wird, der Kernel alle Module entfernt.
222 Wenn Fehler auftreten geben diese Funktionen den Wert -1 zurück und setzen
225 mit der Fehlernummer.
226 Auch wird ein beschreibender Text auf der Konsole ausgegeben.
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>.