Eingangspunkt des Einheitentreibers 'dddump'

Zweck

Schreibt Systemspeicherauszugsdaten auf eine Einheit.

Syntax

#include <sys/device.h>

int dddump (devno, uiop, cmd, arg, chan, ext)
dev_t  devno;
struct uio * uiop;
int  cmd,  arg;
chan_t  chan;
int  ext;

Parameter

Element Beschreibung
Devno Gibt die Major-und Minor-Einheitennummernan.
Uiop Verweist auf die UIO -Struktur, die den Datenbereich oder die Bereiche beschreibt, für die ein Speicherauszug erstellt werden soll.
cmd Der Parameter der Kernelspeicherauszugsfunktion, der die auszuführende Operation angibt.
arg Der Parameter des Aufrufenden, der die Adresse eines Parameterblocks angibt, der dem Kernelspeicherauszugsbefehl zugeordnet ist.
Chan Gibt die Kanalnummeran.
ext Gibt Erweiterungsparameteran.

Beschreibung

Die Kernelspeicherauszugsroutine ruft den Eingangspunkt Dddump auf, um Speicherauszugsanforderungen einzurichten und an die Einheit zu senden. Die Routine Dddump ist für einen Einheitentreiber optional. Dies ist nur erforderlich, wenn der Einheitentreiber eine Einheit als Ziel für einen möglichen Kernelspeicherauszug unterstützt.

Ist dies der Fall, ist es wichtig, dass sich der Systemstatus beim Erstellen des Speicherauszugs so wenig wie möglich ändert. Daher sollte die Dddump -Routine die minimale Menge an Services verwenden, um die Speicherauszugsdaten auf die Einheit zu schreiben.

Der Parameter Bef kann einen der folgenden Speicherauszugsbefehle angeben:

Befehl "dump" Beschreibung
SPEICHERAUSZUGSINITIALISIERUNG Initialisierung einer Einheit als Vorbereitung für die Unterstützung eines Systemspeicherauszugs. Die angegebene Einheiteninstanz muss zuvor geöffnet worden sein. Der Parameter arg verweist auf eine dumpio_stat -Struktur, die in /usr/include/sys/dump.hdefiniert ist. Wird für die Rückgabe eines einheitenspezifischen Status bei einem Fehler verwendet.

Die Dddump -Routine sollte den gesamten Code und alle Daten, die der Einheitentreiber verwendet, um das Schreiben von Speicherauszügen zu unterstützen, pinnen. Dies ist erforderlich, um eine Fehlseitenbedingung zu verhindern, wenn tatsächlich ein Schreiben der Speicherauszugsdaten ausgeführt wird. (Fixierter Code sollte die Routine Dddump enthalten.) Hierfür kann der Kernel-Service Pin oder Pincode verwendet werden.

DUMPABFRAGE Bestimmt die maximale und minimale Anzahl von Byte, die in einem DUMPWRITE -Befehl an die Einheit übertragen werden können Bei Netzspeicherauszügen wird auch die Adresse der Schreibroutine, die bei der Übertragung von Speicherauszugsdaten an die Netzspeicherauszugseinheit verwendet wird, gesendet. Der Parameter Uiop wird nicht verwendet und ist für diesen Befehl null. Der Parameter arg ist ein Zeiger auf eine dmp_query -Struktur, wie in der Datei /usr/include/sys/dump.h definiert.

Die Struktur dmp_abfrage enthält die folgenden Felder:

min_tsize
Mindestübertragungsgröße (in Byte)
max_tsize
Maximale Übertragungsgröße (in Byte)
dumpwrite
Adresse der Schreibroutine.

Der Befehl DUMPABFRAGE gibt die Informationen zur Größe der Datenübertragung in der dmp_abfrage -Struktur zurück, auf die der Parameter Arg verweist. Die Kernelspeicherauszugsfunktion verwendet dann beim Schreiben von Speicherauszugsdaten einen Puffer zwischen der minimalen und maximalen Übertragungsgröße (einschließlich).

Wenn der Puffer nicht die Größe hat, die in dermax_tsizeFeld, dann muss seine Größe ein Vielfaches des Werts in dermin_tsizeFeld. Dermin_tsizeFeld und diemax_tsizekann denselben Wert angeben.

DUMPSTART Setzt die aktuelle Einheitenaktivität aus und stellt die erforderliche Konfiguration der Einheit bereit, bevor ein DUMPWRITE -Befehl empfangen wird. Der Parameter arg verweist auf eine dumpio_stat -Struktur, die in /usr/include/sys/dump.hdefiniert ist. Wird für die Rückgabe eines einheitenspezifischen Status bei einem Fehler verwendet.
DUMPWRITE Schreibt Speicherauszugsdaten auf die Zieleinheit. Die UIO -Struktur, auf die durch den Parameter Uiop verwiesen wird, gibt den Datenbereich oder die Datenbereiche an, die auf die Einheit geschrieben werden sollen, sowie den Anfangsoffset der Einheit. Der Parameter arg verweist auf eine dumpio_stat -Struktur, die in /usr/include/sys/dump.hdefiniert ist. Wird für die Rückgabe eines einheitenspezifischen Status bei einem Fehler verwendet. Code für den Befehl DUMPWRITE sollte seine Abhängigkeit von Systemservices, Prozesszuteilung und solchen Interrupt-Services wie INTIODONE Unterbrechungspriorität oder Hardware-Interrupts für Einheitenminimieren.
Anmerkung: Der Befehl DUMPWRITE darf niemals eine Fehlseitenbedingung verursachen. Dies ist seitens des Anrufers sichergestellt, da die zu dumpenden Datenbereiche als im Speicher abgelegt wurden. Der Einheitentreiber muss sicherstellen, dass alle Code-, Daten-und Stackzugriffe auf fixierten Speicher während der Verarbeitung des Befehls SPEICHERAUSZUGSINITIALISIERUNG erfolgen.
DUMPENDE Gibt an, dass der Kernelspeicherauszug abgeschlossen wurde Jede Bereinigung des Einheitenstatus sollte zu diesem Zeitpunkt erfolgen.
DUMPBEGRIFF Gibt an, dass die angegebene Einheit keine ausgewählte Speicherauszugszieleinheit mehr ist. Wenn keine anderen Einheiten, die von dieser Dddump -Routine unterstützt werden, einen ausstehenden SPEICHERAUSZUGSINITIALISIERUNG -Befehl haben, sollte der DUMPBEGRIFF -Code die Fixierung aller Ressourcen aufheben, wenn er den Befehl SPEICHERAUSZUGSINITIALISIERUNG empfangen hat. (Der Abpinnen -Kernel-Service ist für die Aufhebung der Fixierung von Speicher verfügbar.) Der Befehl DUMPBEGRIFF wird empfangen, bevor die Einheit geschlossen wird.
DUMPLESEN Empfängt das Bestätigungspaket für vorherige DUMPWRITE -Operationen an einen DFV-Einheitentreiber. Wenn der Einheitentreiber die Bestätigung innerhalb der angegebenen Zeit empfängt, gibt er eine 0 zurück und die Antwortdaten werden an die Kernelspeicherauszugsfunktion im Parameter Uiop zurückgegeben. Wenn der Einheitentreiber die Bestätigung nicht innerhalb der angegebenen Zeit empfängt, wird der Wert EZEITDOUTzurückgegeben.

Der Parameter Arg enthält einen Zeitlimitwert in Millisekunden.

Ausführungsumgebung

Die SPEICHERAUSZUGSINITIALISIERUNG Dddump -Operation wird nur in der Prozessumgebung aufgerufen. Die Operationen DUMPABFRAGE, DUMPSTART, DUMPWRITE, DUMPENDEund DUMPBEGRIFF Dddump können in Prozessumgebung und Interruptumgebungaufgerufen werden.

Rückgabewerte

Der Eingangspunkt Dddump gibt dem Aufrufenden eine Fehlerbedingung an, indem er einen Rückkehrcode ungleich null zurückgibt.