devswadd-Kernel-Service
Zweck
Fügt der Einheitenwechseltabelle einen Einheiteneintrag hinzu.
Syntax
Parameter
| Element | Beschreibung |
|---|---|
| Devno | Gibt die Major-und Minor-Einheitennummern an, die dem angegebenen Eintrag in der Einheitenwechseltabelle zugeordnet werden soll |
| DSWPTR | Verweist auf die Einheitenswitchstruktur, die der Einheitenswitchtabelle hinzugefügt werden soll. |
Beschreibung
Der DevSWADD -Kernel-Service wird normalerweise von der ddconfig -Routine eines Einheitentreibers aufgerufen, um die Eingangspunkte des Einheitentreibers in der Einheitenwechseltabelle hinzuzufügen oder zu ersetzen. Die Einheitenswitchtabelle ist eine Tabelle mit Einheitenswitchstrukturen (Devsw), die durch die Haupteinheitennummer des Einheitentreibers indexiert werden. Diese Strukturtabelle wird von den Einheitentreiberschnittstellenservices im Kernel verwendet, um das Aufrufen von Einheitentreiberroutinen zu erleichtern.
Der Teil mit der Haupteinheitennummer des Parameters Devno wird verwendet, um den Index in der Einheitenswitchtabelle anzugeben, in die der DevSWADD -Service den angegebenen Einheitenswitcheintrag stellen muss. Bevor dieser Service die Einheitenswitchstruktur in die Einheitenswitchtabelle kopiert, prüft er den vorhandenen Eintrag, um festzustellen, ob eine geöffnete Einheit sie verwendet. Wenn ein geöffnetes Gerät den auszutauschenden Eintrag belegt, führt der DevSWADD -Service die Aktualisierung nicht aus. Stattdessen wird ein EEXIST (EXIST) -Fehlerwert zurückgegeben. Wenn die Aktualisierung erfolgreich ist, wird der Wert 0 zurückgegeben.
Eingangspunkte in der Einheitenswitchstruktur, die vom Einheitentreiber nicht unterstützt werden, müssen auf eine von zwei Arten behandelt werden. Wenn ein Aufruf an einen nicht unterstützten Eingangspunkt zur Rückgabe eines Fehlercodes führen soll, muss der Eingangspunkt auf die Routine Knotenv in der Struktur gesetzt werden. Daher ruft jeder Aufruf an diesen Eingangspunkt automatisch die Routine Knotenv auf, die einen ENODEW -Fehlercode zurückgibt. Der Kernel stellt die Routine Knotenv bereit.
Andernfalls sollte ein Aufruf an einen nicht unterstützten Eingangspunkt als Funktion ohne Operation behandelt werden. Anschließend sollte der entsprechende Eingangspunkt auf die Routine nulleinheit gesetzt werden. Die nulleinheit -Routine, die ebenfalls vom Kernel bereitgestellt wird, führt keine Operation aus, wenn sie aufgerufen wird, und gibt den Rückkehrcode 0 zurück.
Auf Multiprozessorsystemen werden alle Einheitentreiberroutinen standardmäßig auf dem ersten Prozessor ausgeführt, der beim Booten des Systems gestartet wurde. Dies stellt die Kompatibilität mit Einzelprozessoreinheitentreibern sicher. Wenn der hinzuzufügende Einheitentreiber für die Multiprozessorsicherheit konzipiert wurde, setzen Sie das Flag DEV_MPSAFE in derd_optsFeld der Devsw -Struktur, die an den DevSWADD -Kernelservice übergeben wird. Die Einheitentreiberroutinen werden dann auf jedem verfügbaren Prozessor ausgeführt.
Alle anderen Felder in der Struktur, die nicht verwendet werden, sollten auf 0 gesetzt werden. Einige Felder in der Struktur sind für die Kernelverwendung bestimmt. Der DevSWADD -Service kopiert diese Felder nicht in die Switchtabelle der Einheit. Diese Felder sind in der /usr/include/device.h -Datei dokumentiert.
Ausführungsumgebung
Der Kernel-Service DevSWADD kann nur über Prozessumgebung aufgerufen werden.
Rückgabewerte
| Element | Beschreibung |
|---|---|
| 0 | Zeigt eine erfolgreiche Operation an. |
| EEXIST | Gibt an, dass der angegebene Einheitenswitcheintrag im Gebrauch ist und nicht ausgetauscht werden kann. |
| ENOMEM | Gibt an, dass der Eintrag aufgrund von nicht ausreichendem Realspeicher nicht fixiert werden kann. |
| EINVAL | Gibt an, dass der Teil mit der Haupteinheitennummer des Parameters Devno die maximal zulässige Anzahl von Einheitenswitcheinträgen überschreitet. |