/usr/share/doc/HOWTO/de-html/DE-SCSI-Programmierung-HOWTO-3.html is in doc-linux-de 2003.10-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
<TITLE>Das Linux SCSI Programmier HOWTO: Was sind die notwendigen Voraussetzungen?</TITLE>
<LINK HREF="DE-SCSI-Programmierung-HOWTO-4.html" REL=next>
<LINK HREF="DE-SCSI-Programmierung-HOWTO-2.html" REL=previous>
<LINK HREF="DE-SCSI-Programmierung-HOWTO.html#toc3" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-SCSI-Programmierung-HOWTO-4.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO-2.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO.html#toc3"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="s3">3.</A> <A HREF="DE-SCSI-Programmierung-HOWTO.html#toc3">Was sind die notwendigen Voraussetzungen?</A></H2>
<H2><A NAME="ss3.1">3.1</A> <A HREF="DE-SCSI-Programmierung-HOWTO.html#toc3.1">Kernel Konfiguration</A>
</H2>
<P>Natürlich muß ein unterstützter SCSI Kontroller vorhanden sein.
Außerdem muß der Kernel noch Treiber für SCSI, den/die
SCSI-Hostadapter und das generische Interface beinhalten.</P>
<P>Die Kernelkonfiguration (mittels <CODE>make config</CODE> unter
<CODE>/usr/src/linux</CODE>) sieht typischerweise so aus:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
...
*
* SCSI support
*
SCSI support? (CONFIG_SCSI) [n] y
*
* SCSI support type (disk, tape, CDrom)
*
...
Scsi generic support (CONFIG_CHR_DEV_SG) [n] y
*
* SCSI low-level drivers
*
...
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Falls Module möglich sind, können diese natürlich auch
stattdessen
verwendet werden.</P>
<H2><A NAME="ss3.2">3.2</A> <A HREF="DE-SCSI-Programmierung-HOWTO.html#toc3.2">Device Deskriptoren</A>
</H2>
<P>Das generische SCSI Interface verwendet eigene Devicedeskriptoren, also
nicht die der anderen SCSI Gerätetreiber. Das Skript <CODE>MAKEDEV</CODE>
(zu finden im <CODE>/dev</CODE> Verzeichnis) kann die Einträge erzeugen.
Der Aufruf <CODE>MAKEDEV sg</CODE> erzeugt diese Einträge:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
crw------- 1 root system 21, 0 Aug 20 20:09 /dev/sga
crw------- 1 root system 21, 1 Aug 20 20:09 /dev/sgb
crw------- 1 root system 21, 2 Aug 20 20:09 /dev/sgc
crw------- 1 root system 21, 3 Aug 20 20:09 /dev/sgd
crw------- 1 root system 21, 4 Aug 20 20:09 /dev/sge
crw------- 1 root system 21, 5 Aug 20 20:09 /dev/sgf
crw------- 1 root system 21, 6 Aug 20 20:09 /dev/sgg
crw------- 1 root system 21, 7 Aug 20 20:09 /dev/sgh
| |
Major, Minor Device Nummern
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Es fällt auf, daß dies Character-Deviceeinträge für
Lowlevelzugriff sind.</P>
<P>Hinweis: Auf manchen Systemen mögen die Namen auch
<CODE>/dev/{sg0,sg1,...}</CODE> lauten,
die folgenden Beispiele müssen dann entsprechend angepaßt werden.</P>
<H2><A NAME="ss3.3">3.3</A> <A HREF="DE-SCSI-Programmierung-HOWTO.html#toc3.3">Abbildung der SCSI-Geräte auf Deskriptoren</A>
</H2>
<P>Diese Deskriptoren werden dynamisch auf die aktiven SCSI ID/LUNs der
SCSI-Busse abgebildet (LUN bedeutet logische Einheit von logical unit).
Die Zuordnung (beim SCSI-Busscan) weist der Reihe nach alle LUNs von
allen IDs von allen SCSI-Bussen zu. Begonnen wird bei der kleinsten
LUN der kleinsten ID des ersten SCSI-Busses. Bei mehreren SCSI-Kontrollern
schließen sich die folgenden Busse ohne Lücken an. Dieser Schritt
findet
beim Initialisieren des SCSI-Hosttreibers statt (also zum Zeitpunkt des
Bootens oder beim Einfügen des Hosttreibermoduls).</P>
<P>Ein Beispiel:
Nehmen wir an, es gibt drei angeschlossene SCSI Geräte mit den Ids 1,
3 und 5 auf dem ersten SCSI-Bus (jedes belegt eine LUN). Dann würde
sich die folgende Zuordnung ergeben:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/dev/sga -> SCSI Id 1
/dev/sgb -> SCSI Id 3
/dev/sgc -> SCSI Id 5
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Falls jetzt ein weiteres Gerät mit ID 4 dazukommt, verändert sich die
Zuodnung
(nach erneutem Busscan) zu:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/dev/sga -> SCSI Id 1
/dev/sgb -> SCSI Id 3
/dev/sgc -> SCSI Id 4
/dev/sgd -> SCSI Id 5
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Beachte die Änderung bei Id 5 -- das entsprechende Gerät ist nicht
mehr
<CODE>/dev/sgc</CODE> zugeordnet, sondern erscheint als <CODE>/dev/sgd</CODE>.</P>
<P>Zum Glück gibt es bei modernen Kerneln eine Möglichkeit, darauf
Einfluß
zu nehmen.</P>
<H3>Dynamisches Einfügen und Löschen von SCSI Geräten</H3>
<P>Wenn alls ein neuerer Kernel und das <CODE>/proc</CODE> Filesystem läuft,
können Geräte, die gerade nicht benutzt werden, mitten im Betrieb
ausgetragen und neu angemeldet werden. Dazu sind natürlich Superuser-
privilegien erforderlich.</P>
<P>Zum Austragen eines angemeldeten SCSI-Gerätes wird
<BLOCKQUOTE><CODE>
<PRE>
echo "scsi remove-single-device a b c d" > /proc/scsi/scsi
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>und ähnlich zum Anmelden
<BLOCKQUOTE><CODE>
<PRE>
echo "scsi add-single-device a b c d" > /proc/scsi/scsi
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>verwendet, dabei ist</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
'a' die Hostadapter Id (die erste ist 0)
'b' der SCSI-Bus des Hostadapters (der erste ist 0)
'c' die ID
'd' die LUN (die erste ist 0)
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um also die Zuordnungen der beiden Geräte <CODE>/dev/sgc</CODE> und
<CODE>/dev/sgd</CODE> zu vertauschen (siehe letztes Beispiel),
geben wir Folgendes ein:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
echo "scsi remove-single-device 0 0 4 0" > /proc/scsi/scsi
echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 4 0" > /proc/scsi/scsi
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Das klappt, weil die Gerätezuordnung nach Anmeldereihenfolge erfolgt.</P>
<P>Beim Anmelden neuer SCSI-Geräte ist zu beachten, daß nur eine
begrenzte
Anzahl von freien Einträgen zur Verfügung steht. Der Speicher ist zur
Bootzeit reserviert worden und erlaubt zwei weitere Gerätezuordnungen.</P>
<HR>
<A HREF="DE-SCSI-Programmierung-HOWTO-4.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO-2.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO.html#toc3"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>
|