Raspberry Pi 5, Waveshare PCIe to M.2 E KEY Adapter und Wireless AX210 Modul

Zusammenbau

Unbedingt darauf achten, dass das Kabel richtig herum angeschlossen wurde. Beachtet dazu die Pfeile an den Kabelenden

Mittels lspci schauen, ob das Modul erkannt wurde

Kernel kompilieren

Ich empfehle ein separates Ubuntu-System um den Kernel zu kompilieren, das macht den Vorgang etwas einfacher. Ich habe hierzu ein aktuelles Ubuntu 24.04 LTS verwendet, welches unter amd64 läuft, also kein arm basiertes system.

Es vereinfacht die Sache, wenn auf dem Raspberry Pi SSH Zugriff für root mittels Password aktiviert wird.

vi /etc/ssh/sshd_config

die Zeile

PermitRootLogin prohibit-password

in

PermitRootLogin yes

ändern. Und falls noch nicht geschehen, root ein Password geben

sudo su
passwd

Dann mit dem folgenden Befehl schauen, welcher Kernel aktuell läuft

sudo uname -r

Bei mir ist das 6.12, wie im folgenden Bild zu sehen.

Dann auf die Raspberry Pi Kernel Seite gehen (https://github.com/raspberrypi/linux) und den passenden Kernel auswählen

Die URL des Repositories einfach mal zwischenspeichern, die benötigen wir im laufe des folgenden Ablaufs. Die URL findet ihr hier:

Weiter geht es auf dem Ubuntu System

Abhängigkeiten installieren

sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev sshfs neovim gcc-aarch64-linux-gnu

Arbeitsverzeichnis erstellen

mkdir ~/cm4
mkdir ~/cm4/gcc-linaro

GCC compiler herunterladen und installieren

wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
mv gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu gcc-linaro

Umgebungsvariablen anpassen

# vi ~/.bashrc
export PATH=$PATH:~/cm4/gcc-linaro/bin

Umgebung aktualisieren

source ~/.bashrc

Nun das Linux repository klonen (URL, welche wir uns oben gemerkt haben):

git clone --depth=1 https://github.com/raspberrypi/linux/…

Config Datei erstellen

cd linux
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

Kernel Treiber auswählen

device drivers > network device support > wireless LAN > intel devices > intel wireless wifi next gen agn(iwlwifi)
device drivers > network device support > wireless LAN > intel devices > intel wireless wifi next gen agn(iwlwifi) > intel wireless wifi MVM

Kernel kompilieren (das wird eine Zeit dauern)

make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs

Nachdem der Kernel kompiliert wurde, können wir die Dateien auf den Raspberry Pi übertragen

sudo mkdir /mnt/pi
sudo mkdir /mnt/pi-boot
sudo sshfs root@192.168.x.x:/ /mnt/pi
sudo sshfs root@192.168.x.x:/boot /mnt/pi-boot
(192.168.x.x ist die IP-Adresse des Raspberry Pi)
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/pi modules_install
cd ~/cm4/linux
sudo cp arch/arm64/boot/Image /mnt/pi-boot/kernel8.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /mnt/pi-boot/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /mnt/pi-boot/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /mnt/pi-boot/overlays/

Auf dem Raspberry Pi den Kernel aktivieren

sudo vi /boot/firmware/config.txt
arm_64bit=1 kernel=kernel8.img

(Die Zeile arm_64bit=1 existiert schon, den Parameter mir kernel einfach anhängen)

Den Raspberry Pi neu starten und schauen, ob der Treiber vorhanden ist und geladen wurde.

Das geschieht mittels

dmesg | grep iwlwifi

In meinem Beispiel ist zu erkennen, dass iwlwifi-ty-a0-gf-a0* fehlt. Es genügt hier, die neuste Version zu holen und zu installieren.

Dazu auf https://gitlab.com/kernel-firmware/linux-firmware gehen und die Datei, inkl. Versionsnummer, in die Suche eintragen. Dann die fehlende Firmware Datei auf dem Raspberry Pi ins richtige Verzeichnis herunterladen

cd /lib/firmware
wget https://gitlab.com/kernel-firmware/linux-firmware/-/raw/main/intel/iwlwifi/iwlwifi-ty-a0-gf-a0-89.ucode

Auf meinem System fehlte anschließend noch die iwlwifi-ty-a0-gf-a0.pnvm, welche ich auf der gleichen Seite gesucht und heruntergeladen habe.

cd /lib/firmware
wget https://gitlab.com/kernel-firmware/linux-firmware/-/raw/main/intel/iwlwifi/iwlwifi-ty-a0-gf-a0.pnvm

Nach einem erneuten Neustart sollte der Treiber dann geladen werden und das neue Gerät steht zur Verfügung