Ich hatte ja schon angekündigt, dass ich mein Compute Module 5 in ein anderes Carrierboard umbauen will. Das Geekworm X1501 stellt dem CM5 eine große Anzahl von I/O Möglichkeiten bereit.

Geekworm X1501
Auf dem Board befinden sich gleich zwei Ethernet Anschlüsse, eine ist für 2,5GBit/sec ausgelegt. Dazu gesellen sich 1 USB 3.0 und ein USB 2.0 und zwei fullsize HDMI Buchsen. Auf der Unterseite lassen sich zwei NVME Drives einsetzen. Die Stromversorgung geschieht über eine USB-C Buchse und ist mit 5V/5A spezifiziert. Damit ist das offizielle Raspberry Pi 5 Netzteil ausreichend. Auffällig ist, das alle Komponenten auf der Platine beschriftet sind, so dass keine Missverständnisse aufkommen.
Montage
Für den ersten Test setze ich das Compute Module 5 einfach so, wie ich es im Vorgängerpost geflasht habe in das X1501 ein und schalte die Stromversorgung ein. Tatsächlich läuft, wie erwartet, der Bootvorgang vom eMMC an und ich habe einen ssh Zugang über WLAN.
Tests
Echtzeituhr
Im Modul ist wie beim Raspberry Pi 5 eine Echtzeituhr (RTC) verbaut. Das Geekworm X1501 besitzt eine Halterung für eine CR1220 Knopfzelle als Pufferbatterie. So eine habe ich in meinem Lager sogar noch gefunden und setze sie ein. Wie im verlinkten Post, setze ich sie auf die aktuelle Uhrzeit und prüfe mit timedatectl, ob sie aktiv ist.

NVME
Die beiden NVME Slots bestücke ich mit einer Crucial P3 2TB und einer Crucial P3 512GB. Falls dir das bekannt vorkommen sollte, dann deshalb, weil es das gleiche Setup wie beim Nextcloud Pi ist. Der 512 Streifen ist bereits im Orange Pi RV2 testweise zum Einsatz gekommen. Dem Board liegen zwei Adapterschienen bei, um M.2 Drives kürzer als 2280 einzubauen.


MicroSD
Der µSD Slot wird vom X1501 bereitgestellt, also schiebe ich eine neue 32GB SanDisk Ultra Speicherkarte ein und muss feststellen, dass sie in der Ausgabe von lsblk nicht zu finden ist, auch nach einem Reboot des Moduls tauchte sie nicht auf.
Nach etwas Suchen fand ich die Ursache. Wenn das CM5 vom eMMC bootet, wird der µSD Leser nicht durch das Compute Module aktiviert.
Um den Test trotzdem durchzuführen, bräuchte ich ein Compute Module 5 ohne eMMC. Ich mache es mir einfacher und flashe eine Raspberry Pi OS Installation auf die Speicherkarte und stelle die Bootreihenfolge so um, dass zuerst von der µSD gestartet wird. Das funktioniert leider auch nicht. Der Kartenleser wird vom CM5 mit eMMC nicht angebunden.
Also tausche das CM5 gegen ein CM5 Lite ohne eMMC aus und boote von MicroSD. Das klappt dann auf Anhieb. Die Speicherkarte wird unter /dev/mmcblk0 eingebunden wie auch das eMMC Modul auf dem ausgetauschten CM5. Ein Script, dass mit diesem Pfad arbeitet, würde den Unterschied also nicht bemerken.

Booten von NVME
Ich tausche das CM5 wieder aus und flashe Raspberry Pi OS (trixie) auf der 500er NVME, um davon zu starten. Dies klappt beim ersten Mal nicht. Da die Erkennung des Bootdevices beim Raspberry Pi mitunter etwas diffizil sein kann, tausche ich die beiden NVME Streifen untereinander, so dass die Boot M.2 jetzt im äußeren Slot steckt.
Aber auch danach wurde vom eMMC gestartet. Mit
sudo raspi-configändere ich über Advanced Options > Boot Order die Bootreihenfolge auf „B2 NVMe/USB Boot Boot from NVMe before trying USB and then SD Card„.

Nach Update des EPROM und dem notwendigen Neustart, startete das Geekworm X1501 tatsächlich von der NVME. In /etc/os-release wird auch Debian (trixie) als OS Version ausgewiesen.

Kühlung
Während meiner zahlreichen Umbauarbeiten bin ich zwangsläufig mit dem den Fingern den SoC berührt. Dabei stellte ich fest, dass dieser unangenehm warm ist. Also suche ich nach einer Kühllösung.
Zunächst bestellte ich mir einen offiziellen Raspberry Pi Heatsink für das Compute Module 5. Dieser wird in einem materialschonenden kleinen Karton zusammen mit Schrauben und Abstandshaltern geliefert.


Leider sitzen die Bohrlöcher für die Schrauben im X1501 direkt unter den beiden NVME, so dass ich beide Speicherstreifen erstmal wieder entfernen muss.
Dann kann ich die vier Schrauben von unten durch die Platinen des Carrierboard und des Compute Module 5 nur so weit schrauben, so dass sie auf der Oberseite ankommen. Danach stecke ich den Heatsink auf die Schrauben und jetzt erst zieh ich die Schrauben vollständig fest.
Der Heatsink deckt das CM5 vollständig ab, nur eine Aussparung lässt Platz für den Anschluss der WLAN-Antenne. Allerdings solltest du diese vor dem Kühlkörper anbringen, es wird dir aufgrund des Platzes nachher nicht gelingen!
Jetzt wieder die beiden Speicherstreifen einbauen und der SoC ist jetzt unter Kühlung.
Tests
Zuerst habe ich die halbstündige fio Suite als Belastungstest noch ohne Heatsinks laufen lassen. Dabei liegen die IOPS Werte meist zwischen 60.000 und 80.000, in der Spitze sogar bei 90.000. Die M.2 riegelt nur zwischenzeitlich mal kurz auf 10.000 und weniger ab.

Was ich jetzt noch benötige, sind zwei Kühlkörper für den beiden M.2 NVME. Nachdem ich diese erhalten habe, wiederhole ich den Belastungstest.
Ich messe jetzt für eine Weile durchgängig Werte von 90.000 IOPS ohne viel Throtteling. Erst zum Schluss scheint der Kühlkörper sich soweit aufgewärmt zu haben, dass er die Abwärme nicht mehr effizient abführen kann. Dies liegt vermutlich daran, dass das gesamte X1501 direkt mit den Heatsinks auf der Tischplatte steht und so kaum Luftaustausch möglich ist.

Fazit
Mit dem Geekworm X1501 lassen sich bequem zwei NVME an das Compute Module 5 anbinden ohne das störende FFC Kabel des PCIe Port des Raspberry Pi 5 benutzen zu müssen.
Was jetzt noch fehlt, ist ein Gehäuse für die Gesamtkonstruktion. Darum kümmere ich dann nächste Woche.