Marvell SATA MV88SX6041 Treiber

Erstellt am 13.10.2006

Kleine Vorgeschichte

Bei einem "Bekannten" (wer, oder was auch immer das ist - möchte ich jetzt hier nicht vertiefen) sollte ein HP Proliant ML150 G2 installiert werden - mit SuSE9.3. Eigentlich sollte das ja nicht allzu schwer sein, also SuSE-DVD rein und ab geht die Post...

Denkste! SuSE hat keinen Treiber für den eingebauten SATA-Controller dabei. Nach langen Recherchen im Internet (ca. zwei Nachmittage) und langen rumprobieren hatte ich dann die Lösung für mein Problem gefunden.

Davor möchte ich aber noch betonen, dass Adaptec seither auf meiner Blacklist steht. Ich werde NIE NIE wieder einen Adaptech-Controller kaufen - und das hat außer diesem Vofall sogar noch einen weiteren Grund: Anfrage auf Dokumentation NICHT Support - nein Dokumentation! von dem OpenBSD-Entwickler Theo de Raadt.

Nja - jetzt nehm ich eben LSI Logic-Controller, die geben wenigstens Dokumentation raus...

Achja, bitte lest das HowTo erst einmal komplett durch, bevor ihr damit anfangt. Manchmal hab ich mich etwas komisch ausgedrückt, oder was vergessen. Das kommt dann vielleicht erst in der nächsten Zeile.

Das Compiler-HowTo

Vorbereitungen:
Kernelsourcen des Kernels installieren (z.B. Yast - wenn bereits ein Kernelupdate durchgefhrt wurde, dann Kernelsourcen installieren und nochmal das Update machen)

Den Treiber herunterladen. Auf http://www.keffective.com/mvsata/FC3/ das Zip-File mvsata340.zip herunterladen und im /home/dir entpacken.

Als root nach /usr/src/linux-2.6.xx gehen und hier den Befehl make cloneconfig ausführen. Danach den Befehl make prepare-all ausführen.

Danach noch einen Link, damit das build-Script funktionieren kann: ln -s /usr/src/linux-2.6.xx /usr/src/linux-2.6

Die Installation:
Wenn ihr die oberen Schritte alle abgearbeitet habt, dann gehts jetzt recht einfach. Im /home/dir in das Verzeichnis wechseln, in das ihr das Zip entpackt habt. Hier dann nochmal nach LinuxILA wechseln und dem darin befindlichen build.sh-Script ausführungs-Rechte geben ( chmod +x build.sh ).
Nun einfach ./build.sh eingeben und schon sollte er installieren.
Das hat auf meinem AMD AthlonXP 2700 etwa 30 Sekunden gedauert - also nicht die Welt. Wärend des Kompillierens kommen zwar immer mal wieder ein paar Fehlermeldungen, die man aber ignorieren kann (zumindest haben bei mir die Moule funktioniert). Wenn der Rechner fertig ist liegt in dem Verzeichnis das fertige Kernelmodul: mv_sata.ko. Das kann man nun mit insmod mv_sata.ko einbinden. Danach hat SuSE bei mir nach ein paar Sekunden eine neue Festplatte erkannt *freu*.

Wenn das build-Script mit einer Fehlermeldung abbricht, dann evtl. noch diesen Link setzen:
Ich hab bisher nur auf meinem i386-Rechner zu Hause und auf dem Proliant-PC (x86_64) installiert. Hier musste ich jeweils ein bisschen verschiedene Links setzen; bitte vorher überprüfen, ob die Dateien wirklich nicht existieren!

ln -s /usr/src/linux-obj/x86_64/scripts/mod/modpost /usr/src/linux-2.6/scripts/mod/modpost
Je nach Architektur müsst ihr die Links natürlich anpassen. Der Fehler entstand aber wohl, weil ich das make prepare-all vergessen hatte *peinlich*.

Das ganze funktioniert aber nur, wenn man schon ein System auf einer z.B. SCSI- oder IDE-Platte installiert hat, deren Controller von SuSE erkannt wurde (dazu noch ein kleiner Tip: Der ProLiant erkennt immer nur ein IDE-Gerät, also entweder DVD-Laufwerk oder Festplatte. Also muss zum Installieren erst das DVD-LW als Master angeschlossen werden, dann kurz bevor die Installation zu Ende ist die fstab angepasst werden (/ ist nach dem umjumpern ja auf hda) und schließlich noch den Grub anpassen. Dann kann man den Rechner ausschalten, die Festplatte als Master einhängen und starten).

Jetzt solltet ihr noch das Initrd-Image erstellen; wie das funktioniert steht weiter unten.

Wenn kein System auf einer IDE-Platte vorhanden ist, dann kanns speziell, wenn man den SMP-Kernel verwenden möchte etwas komplizierter sein. Dazu gleich etwas mehr.

Ohne IDE-Platte:

Wie eben erwähnt funktioniert das ganze nur, wenn man bereits ein Linux auf dem Rechner installiert hat. Wenn man nun aber das System direkt auf die SATA-Platte installieren will muss man ein wenig mehr machen - speziell, wenn ein SMP-Kernel auf dem zuknftigen System verwendet werden soll - und zwar aus folgendem Grund:
Die Module, die man da erstellt gehen nur auf dem jeweiligen Kernel. Wenn ihr nun auf einem SMP-Kernel kompilliert, dann funktioniert das Modul auch nur damit. Zur Installation wird aber der defaul-Kernel geladen. Sprich man muss dafür auch erst ein Modul erstellen.
Also wenn ihr nun ein Modul für SMP und default habt kanns losgehen (diese Module müsst ihr wohl oder übel auf einer IDE-Installation erstellen):

Die module jeweils mit gzip mv_sata.ko verpacken und auf Diskette bannen. Nun die installations-CD reinstecken und das Setup starten. Bei meiner SuSE9.3 (die c't-edition) muss ich einem Lizenzvertrag zustimmen - das ist die Gelegenheit, auf die Konsole zu gehen und das Modul zu laden.
Also mit [STRG]+[ALT]+[F2] auf die zweite Konsole. Hier geht's dann weiter mit dem mounten der Diskette und dem Kopieren des Moduls auf das RAM-Drive:
mount /dev/fd0 /mnt
cp /mnt/mv_sata.ko.gz /
Hier dann mit das Zip entpacken und das Modul laden:
gunzip mv_sata.ko.gz
insmod mv_sata.ko
Nun wieder mit [STRG[+[ALT]+[F7] zur Installation wechseln, den Vertrag annehmen und nun Daumen drücken, dass die Platte erkannt wird. Wenn sie erkannt wurde, kann man ganz normal installieren. Am Ende darf man aber nicht vergessen, dass man NICHT neustarten darf! Nun muss noch das Modul für den Kernel (wenn SMP, dann von der zweiten Diskette holen) in das System, was ja dann booten soll einbinden.

Initrd schreiben

So, mal schaun, ob ich das auch noch zusammen bekomme:

Als erstes muss die eben installierte Partition gemountet werden (z.B. nach /mnt). Wenn noch eine weitere Partition eingebunden werden muss, die später im System auch vorhanden wäre (wie z.B. /var oder /usr), dann diese auch händisch nach z.B. /mnt/usr mounten.

Dann müsst ihr die Diskette mit dem richtigen Modul mounten und das Modul nach /lib/modules/2.6.11.4-21.2-default/kernel/drivers/scsi kopieren (natürlich in dem eben gemounteten Verzeichnis: also in meinem Beispiel nach /mnt/lib/modules/2.6.11.4-21.2-default/kernel/drivers/scsi).

Diskette wieder umounten und das Root der bash auf die gemountete Partition setzen, damit man nun einige Links erstellen kann (denn sonst würden die Pfade ja nicht stimmen). Das geht mit chroot /mnt /bin/sh <- hier kann es Probleme geben, weil nicht die korrekte bash gefunden wird, einfach ein bisschen probieren und googlen, mal gehts, mal nicht ;-)

Wenn der Befehl also erfolgreich ausgeführt wurde, mal ein ls / machen und schaun, ob man im richtigen Verzeichnis-baum ist.

So nun muss noch eine Zeile in die /etc/modprobe.conf. Das kann man entweder mit vi machen oder schnell mit echo "alias scsi_hostadapter mv_sata" >> /etc/modprobe.conf.

Jetzt ist es nicht mehr weit, bis die Sache läuft. Auf jeden Fall müssen als nächstes erst mal die module-dependencies geupdatet werden. Das macht man mit depmod -ae -F /boot/System.map-2.6.xx.x-default[-smp] 2.6.xx.x

Wenn das soweit geklappt hat, kann man sich daran machen das initrd-image zu basteln, was dann vom BIOS (bzw. Bootloader) geladen wird. Darin befindet sich dann auch das Modul, das gleich am Anfang geladen wird. Zunächst sollte man ihm aber sagen, dass er das Modul auch einbinden muss.

Dazu mit vi in /etc/sysconfig/kernel gehen und in dieser Zeile INITRD_MODULES= in die Anführungszeichen noch ein "mv_sata" einfügen. Jetzt endlich kann man das initrd-Image erstellen. Am besten das alte noch in initrd-2.6.xx.x-default[-smp].alt umbenennen (liegt in /boot).

Danach ein mkinitrd /boot/initrd-2.6.xx.x-default[-smp] 2.6.xx.x machen. Das sollte nun ebenfalls ohne Fehler abschließen.

Jetzt neustarten und Daumen drücken!!! <- bei mir hats geklappt ;-)

Download Module

Wenn jemand zufällig die c't-SuSE9.3 hat (oder den gleichen Kernel) kann er sich glücklich schätzen! Denn ich habe hier mal zwei Module hochgeladen, mit denen man schon was anfangen könen sollte. Evtl. kommen auch noch mehr - mal sehn...

default: linux-2.6.11.4-21.2 x86_64
smp: linux-2.6.11.4-21.2-smp x86_64

Noch eine kleine Anmerkung zu den Modulen: Das erste Modul ist für die Installation und das zweite für das System selber (eben für den smp-Kernel).

Update: Modul für SuSE10 - i386
Ich hab hier auch nochmal auf meinem PC daheim für i386-default ein Modul erstellt und zwar mit diesem Treiber: mvSata-Linux-3.6.1.tgz. Dieses Archiev wurde am 15.04.2006 hochgeladen und ist also sehr neu. Das Modul selber lässt sich laden, ist aber ziemlich winizig mit 78kB. Von daher bin ich noch etwas skeptisch, ob das geklappt hat. Vielleicht kann das ja mal jemand für mich testen, da ich das Modul an dem Server selber nicht testen kann.

default: linux-2.6.13-15.10 i386

Seitenanfang