Dieser Abschnitt enthält eine Beschreibung der Bootparameter, die zur Weitergabe von Informationen über die installierten SCSI-Host-Adapter und SCSI-Geräte verwendet werden.
Das SCSI-System von Linux gliedert sich in zwei Teile. Für jeden SCSI-Adapter gibt es einen speziellen Low-Level-Treiber, der dessen Funktionalität über eine definierte Schnittstelle den Mid-Level-Treibern zugänglich macht. Für jeden SCSI-Gerätetyp wie z.B. Festplatten, CD-ROMs oder Streamer gibt es einen speziellen Mid-Level-Treiber.
Jedes SCSI-Gerät kann eine Reihe von »Sub-Geräten« enthalten. Das beste Beispiel dafür sind die CD-ROM-Wechsler. Jede CD in diesem Wechsler wird als »Logical Unit Number« (LUN) dieses bestimmten Gerätes angesprochen. Die meisten Geräte jedoch, wie z.B. Festplatten, Bandlaufwerke u.ä. bestehen nur aus einer Geräteeinheit und erhalten LUN Null.
Ein Problem ergibt sich bei einigen Geräten mit einer einzigen LUN. Diese Geräte, alte, aber leider auch neue, besitzen eine schlechte Firmware, die mit der Überprüfung für LUNs ungleich null nicht umgehen kann. Als Reaktion auf die Überprüfung hängen sich die Geräte auf und blockieren im schlimmsten Fall sogar den gesamten SCSI-Bus, so daß auch andere Geräte nicht mehr angesprochen werden können.
Neuere Kernel verfügen über eine Konfigurations-Option, die es ermöglicht, die maximale Anzahl von geprüften LUNs festzulegen. Standardmäßig untersucht man nur LUN Null, um das oben erwähnte Problem zu vermeiden.
Zur Bestimmung der Anzahl von geprüften LUNs beim Booten gibt
man max_scsi_luns=n
als Bootparameter ein, wobei n eine Zahl
zwischen 1 und 8 ist. Um oben genannte Probleme zu vermeiden,
würde man n=1 verwenden, um solche defekten Geräte
nicht zu verwirren.
Durch Übergabe eines von Null verschiedenen Wertes an diesen
Parameter wird das Logging von allen SCSI-Ereignissen
(error, scan, mlqueue, mlcomplete, llqueue, llcomplete,
hlqueue und hlcomplete) eingeschaltet. Hierbei sollte man
beachten, daß über das /proc/scsi/scsi
Interface besser kontrollieren werden kann, welche Ereignisse
protokolliert werden sollen. Diese zweite Lösung kann allerdings
nur Ereignisse protokollieren, die nach dem Mounten
des /proc
Dateisystems auftreten.
Ein Teil der Boot-Konfiguration des Treibers für SCSI-Bandlaufwerke kann mit folgendem Kommando erfolgen:
st=buf_größe[,schreib_grenzwert[,max_bufs]]
Die ersten zwei Zahlen werden in kB-Einheiten angegeben. Der
Standardwert für buf_größe
ist 32 kB und
die maximal zu bestimmende Größe sind lächerliche
16384 kB. schreib_grenzwert
ist der Grenzwert, bei dem der Puffer an das Laufwerk weitergegeben
wird. Standardwert hierbei sind 30 kB. Die maximale Anzahl
von Puffern ändert sich je nach der Zahl der erkannten
Laufwerke. Standardwert ist 2. Hier eine Beispielverwendung:
st=32,30,2
Umfassende Details findet man in der Datei README.st
im
Verzeichnis scsi
des Kernel-Quell-Baums.
Allgemeine Anmerkungen zu diesem Abschnitt:
iobase
Der erste I/O Port, der vom SCSI-Host belegt wird.
Er wird in der Hexadezimalschreibweise angegeben und liegt
für gewöhnlich zwischen 0x200
und 0x3ff
.
irq
Der Hardware-Interrupt, den die Karte per Konfiguration verwendet. Die gültigen Werte sind abhängig von der fraglichen Karte. Normalerweise gelten die Werte 5, 7, 9, 10, 11, 12 und 15. Die anderen Werte werden normalerweise für übliche Peripheriegeräte wie IDE-Festplatten, Disketten, serielle Anschlüsse etc. verwendet.
dma
Der von der Karte verwendete DMA-Kanal (Direct Memory Access). Dies gilt typischerweise nur für Busmaster-Karten. PCI und VLB Karten benötigen keinen ISA-DMA-Kanal.
scsi-id
Die ID, die der Host-Adapter verwendet, um sich auf dem SCSI-Bus zu identifizieren. Nur einige Host-Adapter erlauben die Änderung dieses Werts, da er bei den meisten intern fest eingestellt ist. Gewöhnlich ist der Standardwert ID 7. Die Seagate und Future Domain TMC-950-Boards jedoch verwenden ID 6.
parity
Legt fest, ob der SCSI Host-Adapter von den angeschlossenen Geräten erwartet, daß sie für alle ausgetauschten Informationen einen Paritätswert zur Verfügung stellen. Der Wert 1 aktiviert den Paritäts-Check und 0 schaltet ihn ab. Auch hier gilt, daß nicht alle Adapter die Auswahl eines Paritätsverhaltens als Bootparameter unterstützen.
Die aha-Zahlen beziehen sich auf Karten und die aic-Zahlen beziehen sich auf den tatsächlichen SCSI-Chip auf diesem Kartentyp, Soundblaster-16 SCSI eingeschlossen.
Die automatische Hardwareerkennung des Treibers für diesen SCSI Host schaut nach einem installierten BIOS. Falls keines vorhanden ist, wird die Karte nicht gefunden. Für diesen Fall wird man einen Bootparameter folgender Form verwenden müssen:
aha152x=iobase[,irq[,scsi-id[,reconnect[,parity]]]]
Wurde der Treiber mit aktiviertem Debugging kompiliert, dann kann ein sechster Wert zur Bestimmung des Debug-Levels gesetzt werden.
Alle Parameter verhalten sich wie eingangs dieses
Abschnitts beschrieben. Ein reconnect
Wert ungleich null erlaubt
Geräten die Verwendung von Disconnect/Reconnect.
Hier eine Beispielverwendung:
aha152x=0x340,11,7,1
Man beachte, daß die Angabe der Parameter einer bestimmten Reihenfolge folgen muß, d.h. wenn man eine Paritätseinstellung angeben will, dann muß man auch einen iobase-, einen irq-, einen scsi-id- und einen reconnect-Wert angeben.
Dies sind die Karten aus der aha154x-Serie. Die Karten aus der aha1542-Serie verfügen über einen i82077 Floppy-Kontroller, die Karten der Serie aha1540 hingegen nicht. Diese sind Busmaster-Karten und haben Parameter zur Festlegung der »Fairness«, die dazu verwendet wird, den Bus mit anderen Geräten zu teilen. Der Bootparameter sieht folgendermaßen aus:
aha1542=iobase[,buson,busoff[,dmaspeed]]
Gewöhnlich ist einer der folgenden iobase
Werte
gültig: 0x130
, 0x134
, 0x230
, 0x234
,
0x330
oder 0x334
.
Clone-Karten lassen möglicherweise andere Werte zu.
Die buson, busoff
Werte beziehen sich auf die
Anzahl von Mikrosekunden, in denen die Karte den ISA-Bus
beherrscht. Die Standardwerte sind 11 µs an und
4 µs aus,
so daß andere Karten wie z.B. eine ISA LANCE Ethernetkarte
eine Chance haben, auf den ISA-Bus zuzugreifen.
Der Wert dmaspeed
bezieht sich auf die Geschwindigkeit
(in MB/s) in der der DMA-Transfer erfolgt. Der Standardwert
ist 5 MB/s. Karten einer neueren Revision
ermöglichen die Auswahl dieses Werts als Teil der
Konfiguration per Software, ältere Karten verwenden Jumper. Man
kann Werte bis 10 MB/s benutzen, vorausgesetzt, das Motherboard
kann damit umgehen. Bei der Verwendung von Werten über
5 MB/s sollte man vorsichtig vorgehen.
Diese Boards können einen Parameter folgender Form annehmen:
aic7xxx=extended,no_reset
Der Wert extended
, falls ungleich Null, besagt, daß die
erweiterte Übersetzung für große Platten eingeschaltet
ist. Der Wert no_reset
, falls ungleich Null, teilt dem
Treiber mit, keinen Reset auf dem SCSI-Bus auszuführen, wenn der
Host-Adapter beim Booten initialisiert wird.
Der AdvanSys-Treiber akzeptiert bis zu 4 I/O Adressen,
unter denen der Treiber eine AdvanSys SCSI-Karte sucht.
Man beachte, daß diese Werte überhaupt keinen Einfluß auf
die EISA- oder PCI-Karten haben. Sie werden nur für die
Überprüfung von ISA- und VLB-Karten eingesetzt. Wurde
der Treiber mit eingeschaltetem Debugging kompiliert, kann
durch Hinzufügen des Parameters 0xdeb[0-f]
bestimmt werden, bis zu welchem Grad Debugging-Meldungen
ausgegeben werden sollen. 0-f
ermöglicht die Festlegung des Levels der Debugging-Meldungen
auf jeden der 16 Level.
Im Gegensatz zu den Bootparametern der anderen SCSI Host-Adapter verwendet der IN2000-Treiber für die meisten seiner Integer-Parameter ASCII-Strings als Präfix. Hier eine Liste von unterstützten Parametern:
Wobei addr
die I/O-Adresse einer Karte ist, die
gewöhnlich kein ROM besitzt.
Verhindert einen Reset des SCSI-Busses beim Booten. Diesem Parameter können keine optionalen Argumente übergeben werden.
x
ist eine Bitmaske, wobei die ersten 7 Bit
mit den 7 möglichen SCSI-Geräten übereinstimmen
(Bit 0 für das Gerät mit ID0, etc).
Um die Sync-Übertragung auf ein Gerät zu verhindern,
setzt man dessen Bit. Standardmäßig ist Sync für alle
Geräte ausgeschaltet.
ns
ist die minimale # von Nanosekunden für
einen SCSI-Datentransfer. Standard ist 500; erlaubte
Werte sind 250 bis 1000.
x = 0
verhindert grundsätzlich Disconnects;
x = 2
erlaubt immer Disconnects.
x = 1
führt »adaptive«
Disconnects durch. Dieses ist der
Standard und wohl allgemein die beste Wahl.
Ist »DEBUGGING_ON« angegeben, dann ist
x
eine Bitmaske, durch die verschiedene Arten von
Debug-Ausgaben ein- oder ausgeschaltet werden; siehe
hierzu die Definition der DB_xxx
Konstanten in
in2000.h
.
Ist »PROC_INTERFACE« angegeben, dann ist
x
eine Bitmaske, die festlegt, wie die
/proc
-Schnittstelle funktioniert
und was sie macht; siehe hierzu die Definition der
PR_xxx
Konstanten in in2000.h
.
Hier einige Anwendungs-Beispiele :
in2000=ioport:0x220,noreset
in2000=period:250,disconnect:2,nosync:0x03
in2000=debug:0x1e
in2000=proc:3
Im Gegensatz zu anderen Treibern verwendet dieser keine Bootparameter, um I/O-, IRQ- oder DMA-Kanäle festzulegen. Da der AM53C974 ein PCI-Gerät ist, sollte dafür auch kein Grund bestehen. Statt dessen teilen die Parameter für gewöhnlich die Transfermodi und Transferraten mit, die zwischen dem Host- und dem Zielgerät verwendet werden sollen. Dies läßt sich am besten anhand eines Beispiels beschreiben:
AM53C974=7,2,8,15
Dies würde folgendermaßen interpretiert werden: Für
die Kommunikation zwischen dem SCSI-Kontroller mit ID7 und
dem SCSI-Gerät mit ID2 soll eine Transferrate
von 8 MHz im Synchronmodus mit max. 15 Bytes Offset ausgehandelt
werden. Weitere Informationen findet man in der Datei
linux/drivers/scsi/README.AM53C974
In älteren Kerneln akzeptiert der buslogic-Treiber nur
einen Parameter, und zwar die iobase. Folgende Werte sind
zulässig: 0x130
, 0x134
, 0x230
, 0x234
,
0x330
und 0x334
.
Bei v2.x Kerneln akzeptiert der BusLogic-Treiber viele Parameter.
Man beachte die neue Schreibweise des Parameters
im Vergleich zu den alten Kernels. Dieser Parameter kennt zu viele
Option, als das man diese hier alle auflisten könnte. Eine komplette
Beschreibung der Optionen ist in der Datei
linux/drivers/scsi/BusLogic.c
zu finden, wenn man nach
der Zeichenkette BusLogic=
sucht.
Seit den späten Kernelversionen v2.0 akzeptieren die EATA-Treiber die Überprüfung eines Bootparameters, der die iobase(s) bestimmt. Dieses sieht folgendermaßen aus:
eata=iobase1[,iobase2][,iobase3]...[,iobaseN]
Der Treiber überprüft die Adressen in der Reihenfolge, in der sie aufgelistet sind.
Der Überprüfungscode für diese SCSI-Hosts schaut nach einem installierten BIOS; falls keines vorhanden ist, wird die Karte nicht gefunden werden. Auch wenn der Signatur-String des BIOS nicht erkannt wurde, wird die Karte nicht gefunden. In jedem der beiden Fälle wird man dann einen Bootparameter folgender Form verwenden:
tmc8xx=mem_base,irq
Der Wert mem_base
ist der Wert des in den Speicher eingeblendeten
I/O-Bereichs, den die Karte verwendet. Dieser ist für
gewöhnlich einer der folgenden Werte: 0xc8000
, 0xca000
,
0xcc000
, 0xce000
, 0xdc000
oder 0xde000
.
Der Treiber erkennt diese Karten entsprechend einer
Liste von bekannten BIOS ROM-Signaturen. Eine komplette
Liste bekannter BIOS-Ausgaben erhält man in der Datei
linux/drivers/scsi/fdomain.c
. Diese wird mit einer
Fülle von Informationen eingeleitet. Ist das BIOS dem
Treiber nicht bekannt, dann kann man dies folgendermaßen
überbrücken:
fdomain=iobase,irq[,scsi_id]
Dieses ist ein Treiber für den IOMEGA Parallel Port SCSI Adapter, welcher in den IOMEGA ZIP-Laufwerken enthalten ist. Er könnte auch mit dem original IOMEGA PPA3-Gerät funktionieren. Der Bootparameter für diesen Treiber sieht folgendermaßen aus:
ppa=iobase,speed_high,speed_low,nybble
Alle außer iobase
sind optional festlegbare Werte. Will man einen
der optionalen Parameter verändern, dann sollte man
einen Blick in die Datei linux/drivers/scsi/README.ppa
werfen. Dort findet man genaue Informationen darüber,
was von diesen Parametern kontrolliert wird.
Je nach Board kann der 5380 entweder über I/O-Ports oder
einen eingeblendeten Speicherbereich angesprochen werden.
Eine Adresse unter 0x400 ist für gewöhnlich ein I/O-Port.
PCI- und EISA-Hardware verwenden jedoch I/O-Adressen
über 0x3ff. In jedem Fall gibt man die Adresse,
den Wert des Interrupts und des DMA-Kanals an. Hier ein Beispiel
einer I/O-Karte: ncr5380=0x350,5,3
. Verwendet
die Karte keine Interrupts, dann können mit einem
IRQ-Wert von 255 (0xff
) Interrupts deaktiviert
werden. Ein IRQ-Wert von 254 bedeutet eine automatische
Hardwareerkennung. Weitere Informationen findet man in der
Datei linux/drivers/scsi/README.g_NCR5380
.
Die generische 53c400-Unterstützung erfolgt mit demselben Treiber wie für die oben erwähnte generische 5380-Unterstützung. Der Bootparameter ist identisch zum obig genannten, mit der Ausnahme, daß vom 53c400 kein DMA-Kanal verwendet wird.
Dieser Treiber verwendet einen Bootparameter folgender Form
ncr53c406a=PORTBASE,IRQ,FASTPIO
wobei die IRQ
- und FASTPIO
-Parameter optional sind. Ein
Interrupt-Wert von 0 schaltet die Verwendung von Interrupts aus.
Der Wert 1 für den FASTPIO
-Parameter aktiviert die Verwendung
von insl
- und outsl
-Anweisungen statt den aus einem
einzigen Byte bestehenden inb
- und outb
-Anweisungen.
Während der Kompilierung eines neuen Kernels steht DMA als
Option zur Verfügung.
PAS16 verwendet einen NCR5380 SCSI-Chip und neuere Modelle unterstützen die Konfiguration ohne Jumper. Der Bootparameter sieht folgendermaßen aus:
pas16=iobase,irq
Der einzige Unterschied besteht darin, daß man einen IRQ-Wert
von 255 verwenden kann, welcher dem Treiber mitteilt, ohne
die Verwendung von Interrupts zu arbeiten, was jedoch
Geschwindigkeitsverluste mit sich bringt.
Die iobase
ist gewöhnlich 0x388
.
Der Code zur Überprüfung für diese SCSI-Hosts sucht nach einem installierten BIOS. Ist keines vorhanden, wird die Karte nicht gefunden. Auch wenn die Signatur-Zeichenkette des BIOS nicht erkannt wird, wird die Karte nicht gefunden. In jedem Fall wird man einen Bootparameter folgender Form verwenden:
st0x=mem_base,irq
Der Wert mem_base
ist der Wert der in den Speicher
eingeblendeten I/O-Region, den die Karte verwendet. Dieser wird für
gewöhnlich einer der folgenden Werte sein: 0xc8000
,
0xca000
, 0xcc000
, 0xce000
, 0xdc000
oder 0xde000
.
Diese Karten basieren ebenfalls auf dem NCR5380-Chip und verstehen folgende Optionen:
t128=mem_base,irq
Gültige Werte für mem_base
sind:
0xcc000
, 0xc8000
, 0xdc000
und 0xd8000
.
Man beachte, daß es anscheinend zwei unabhängige Treiber
für diese Karte gibt, nämlich CONFIG_SCSI_U14_34F
,
der u14-34f.c
benutzt, und CONFIG_SCSI_ULTRASTOR
,
der ultrastor.c
verwendet. u14-34f ist derjenige, der
seit den späten Kernelversionen v2.0 einen Bootparameter
folgender Form akzeptiert:
u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN]
Der Treiber überprüft die Adressen in der Reihenfolge, wie sie aufgelistet sind.
Die automatische Erkennung für wd7000 sucht nach einer bekannten BIOS ROM-Zeichenkette und kennt einige Standardeinstellungen. Werden die korrekten Werte für die eigene Karte nicht geliefert oder hat man eine nicht erkannte BIOS-Version, dann kann man einen Bootparameter folgender Form verwenden:
wd7000=irq,dma,iobase
Zur Zeit verwenden die Treiber folgender SCSI-Karten keine Bootparameter. In einigen Fällen kann man Werte »hartkodieren«, indem man, falls nötig, den Treiber selbst editiert.