Arbeitsnotizen zu: Debian und Marvell 88SE9215
RAID bus controller: Marvell Technology Group Ltd. 88SE9215
Debian (zu diesem Zeitpunkt stable und sid) erkennt folgende Hardware nicht:
03:00.0 RAID bus controller [0104]: Marvell Technology Group Ltd.
88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
[1b4b:9215] (rev 01)
Die Informationen aus Hardware for Linux
besagen das es mit dem ahci Treiber funktionieren soll. Es wird aber in lspci -kk
nicht mit ausgegeben.
03:00.0 RAID bus controller: Marvell Technology Group Ltd.
88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller (rev 01)
Subsystem: Dawicontrol GmbH 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
Nach ein wenig Suche findet man so etwas:
/bin/echo 1b4b 9215 > /sys/bus/pci/drivers/ahci/new_id
Und schon wird die Karte mit dem entsprechenden Kernelmodul erkannt und die an diese Karte angehängten
Speichermedien werden aufgelistet zb. mit blkid
.
Nun ist das keine dauerhafte Lösung und ich war nicht in der Lage diesen Befehl irgendwie zu automatisieren.
Selbst wenn, müsste das zu einem Zeitpunkt passieren der es ermöglicht diese Speichermedien über die /etc/fstab
einzubinden und ganz normal zu verwenden.
Mit Hilfe stößt man auf das hier: https://github.com/torvalds/linux/blob/e08466a7c00733a501d3c5328d29ec974478d717/drivers/ata/ahci.c#L558-L587. Es muss als einfach nur eine Anpassung an dem ahci Kernel Modul erfolgen und gut ist.
Dazu muss man unter Debian eher ungewohnt doch einen Kernel patchen und booten. Ich bin dabei so vorgegangen einen Patch zu erstellen mit dem ich die original Sourcen anpasse. Diesen Patch kann man nun jederzeit bei neuen Kernel sourcen verwenden
Kernel sourcen beziehen
apt build-dep linux
apt install linux-source
cd /usr/src/
tar xaf linux-source-6.0.tar.xz
Kopie der ahci.c Datei anlegen:
mkdir -p linux-source-6.0-custom/drivers/ata/
cp linux-source-6.0/drivers/ata/ahci.c linux-source-6.0-custom/drivers/ata/
Diese Datei nun öffnen nano -w linux-source-6.0-custom/drivers/ata/ahci.c
und nach Marvell suchen.
Vergleich dazu die original
Quellen.
Die folgenden zwei Zeilen einfügen.
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9215), /* 88se9215 */
.driver_data = board_ahci_yes_fbs },
Für die Erstellung eines Patches
diff -rupN linux-source-6.0/drivers/ata/ahci.c linux-source-6.0-custom/drivers/ata/ahci.c > marvel-88se9215.patch
Aktuelle Kernel config kopieren
cp /boot/config-6.0.0-3-amd64 linux-source-6.0/.config
In das aktuelle Kernel Quell Verzeichnis wechseln cd linux-source-6.0/
und dort aus der .config
den Eintrag
CONFIG_SYSTEM_TRUSTED_KEYS=
entfernen.
Den erstellten Patch anwenden patch -p1 < ../marvel-88se9215.patch
und nun den Kernel bauen
make olddefconffig
make -j3 deb-pkg LOCALVERSION=-marvell
Der Wert zu LOCALVERSION=- bestimmt auch einen teil des Kernelnamens
In cd /usr/src
wechseln und daraus die neuen .deb Paket installieren. Die -dbg Paket braucht man nicht.
dpkg -i linux-headers-6.0.8-marvell_6.0.8-marvell-1_amd64.deb linux-image-6.0.8-marvell_6.0.8-marvell-1_amd64.deb
linux-libc-dev_6.0.8-marvell-1_amd64.deb
Neustart und der neue Kernel mit dem angepassten Namen sollte über uname -a
erkenntlich sein.
Ebenso die Speichermedien über den Marvell Controller.
Damit man nun bei einem apt upgrade
nicht ausversehen sich einen neuen Kernel einbaut kann
hiermit apt-mark hold linux-image-amd64
auf Wartestellung gesetzt werden.
Hier der Patch:
--- linux-source-6.0/drivers/ata/ahci.c 2022-11-10 18:17:40.000000000 +0100
+++ linux-source-6.0-custom/drivers/ata/ahci.c 2022-11-13 12:02:38.511802110 +0100
@@ -581,6 +581,8 @@ static const struct pci_device_id ahci_p
.driver_data = board_ahci_yes_fbs },
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x91a3),
.driver_data = board_ahci_yes_fbs },
+ { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9215), /* 88se9215 */
+ .driver_data = board_ahci_yes_fbs },
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9230),
.driver_data = board_ahci_yes_fbs },
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9235),