Apcsilmic ARM64 Qualcomm Windows Drivers

Wenn ich ein frisches Windows 11 IOT ARM64 oder Windows 10 IOT ARM64 auf meinem Apcsilmic Dot 1 Mini-PC installieren möchte, scheitert das Ganze schon vor der Installation, weil Maus, Tastatur und USB generell nicht funktionieren.

Es fehlen also die notwendigen Treiber … und ich finde diese auch nicht als Download im Internet.
Also … was tun?


Windows on ARM neu installieren

Die mitgelieferte Windows Lizenz auf meinem kleinen ARM-PC ist vermutlich der größte Kritikpunkt. Denn im Netz findet man einige Berichte, dass die Herstellerfirma entweder kein aktiviertes Windows vorinstalliert hatte, oder die Lizenz “irgendwie fehlerhaft” sei.

Für mich ist das kein Problem, da mir mein (teures) MSDN Abo ausreichend Windows-Lizenzen beschert. Doch interessanterweise habe ich genau das auf dem PC eingesetzte “Windows 11 Pro” nicht für ARM64 verfügbar.

Nur “Windows 11 Enterprise” und “Windows 11 IOT Enterprise” habe ich im Angebot und gleiches gilt auch für Windows 10. Alle anderen Downloads betreffen nur x86 und x64.

Problem: Keine Qualcomm Treiber im Windows Image

Wenn man ein ARM64 ISO Image dann auf einen UEFI FAT32 USB-Stick kopiert, boot der kleine PC auch brav in dessen Setup, kann aber dann die USB Ports nicht neu laden und man landet auf dem Setup Startbildschirm, kann aber in keinster Weise “Weiter” klicken.
Unter den Hardware-IDs im vorinstallierten Windows fand ich im Netz genau gar nichts und weder auf der Herstellerseite, noch bei Qualcomm fand ich einen Treiber für Geräte wie:

  • Qualcomm(R) XHCI Filter Device
  • Qualcomm(R) USB Type-C Device
  • Qualcomm(R) Adreno(TM) 618 GPU
  • Qualcomm(R) Aqstic(TM) Audio Device

Lösung: Treiber extrahieren

Wie gut, dass das Tool dism inzwischen gelernt hat, aller Treiber aus einem bestehend Windows Image zu extrahieren.
Ich startete das originale Windows 11 im Reparaturmodus, wechselte zur Konsole und führte folgendes Kommando aus:

1mkdir c:\drivers
2dism /Image:C:\Windows /Export-Driver /Destination:C:\drivers

Das hätte man auch im laufenden Windows mit
dism.exe /Online /Export-Driver /Destination:C:\drivers hinbekommen, aber ich wollte ohnehin die gesamte Windows-Installation in eine Backup-WIM-Datei sichern.

So kamen 96 Unterverzeichnisse mit jeder Menge Qualcomm Treiber heraus, die ich wieder in ein anderes Windows Image integrieren kann.

Treiber in Boot und Installations-Image integrieren.

In meinen Windows 10 und 11 IOT Images beinhalteten sowohl sources/boot.wim, wie auch sources/install.wim je zwei Images (einmal IOT und einmal nur Enterprise) und so integrierte ich die zuvor exportierten Treiber allesamt viermal.

Würde ich dafür ein Script schreiben, sähe das etwa so aus:

 1@ECHO OFF
 2SET PATH_TO_SETUP_FILES=c:\path\to\extracted_win_iso
 3SET PATH_TO_DRIVERS=C:\path\to\drivers
 4
 5cd %PATH_TO_SETUP_FILES%
 6cd sources
 7mkdir mount
 8
 9ECHO Adding drivers to boot image 1
10dism /Mount-Wim /WimFile:boot.wim /index:1 /MountDir:mount
11dism /Image:mount /Add-Driver /Driver:%PATH_TO_DRIVERS% /recurse
12dism /UnMount-Wim /MountDir:mount /commit
13
14ECHO Adding drivers to boot image 2
15dism /Mount-Wim /WimFile:boot.wim /index:2 /MountDir:mount
16dism /Image:mount /Add-Driver /Driver:%PATH_TO_DRIVERS% /recurse
17dism /UnMount-Wim /MountDir:mount /commit
18
19ECHO Adding drivers to windows image 1
20dism /Mount-Wim /WimFile:install.wim /index:1 /MountDir:mount
21dism /Image:mount /Add-Driver /Driver:%PATH_TO_DRIVERS% /recurse
22dism /UnMount-Wim /MountDir:mount /commit
23
24ECHO Adding drivers to windows image 2
25dism /Mount-Wim /WimFile:install.wim /index:2 /MountDir:mount
26dism /Image:mount /Add-Driver /Driver:%PATH_TO_DRIVERS% /recurse
27dism /UnMount-Wim /MountDir:mount /commit
28
29rmdir mount
30ECHO Splitting install.wim into SWM files
31dism /Split-Image /ImageFile:install.wim /SWMFile:install.swm /FileSize:3500
32
33ECHO Deleting original install.wim
34del install.wim

Die originalen install.wim Dateien waren knapp unter 4 GB und wuchsen durch die Treiber Patches auf über 4 GB an, daher mussten die wim Dateien in swm Dateien aufgesplittet werden, damit sie auf einen FAT32 USB-Stick passen.

Installation von Windows 11 und Windows 10

Und siehe da, das aktualisierte Windows Setup konnte die USB Ports und somit Maus und Tastatur erkennen, womit die restliche Installation auf ARM64 genau so verlief wie auch unter x86/x64.

Etwas ins Schwitzen geriet ich beim ersten Start nach dem Setup, denn da verharrte der Bildschirm 10 Minuten lang mit dem Hinweis:

Getting ready

Doch nachdem die Treiber auch in install.wim wirkten, wurden sie alle korrekt im System registriert … es dauerte nur eben recht lange ohne weitere Hinweise.

(Und da dem dot 1 Mini-PC LEDs für Festplattenzugriffe fehlen, weiß man eben nicht, ob er eingefroren ist, oder im Hintergrund weiterarbeitet).

Nach einer erfolgreichen Installation von Windows 11 IOT wiederholte ich die Treiber-Integration in Windows 10 IOT und stellte fest, dass auch diese Installation perfekt ohne Probleme ablief.

Mission erfolgreich durchgeführt!

Fazit

Tatsächlich kommt es mir so vor, als wäre Windows 10 flüssiger im Betrieb auf dem Kleinrechner, als das originale Windows 11 oder mein Windows 11 IOT.

Allerdings funktioniert auf Windows 10 ARM64 das neue Visual Studio mit nativem ARM Support nicht. Daher ist am Ende Windows 11 vielleicht doch die bessere Wahl.

Ich bin jedenfalls glücklich, denn das Experiment hätte ja auch schief gehen können und “Software-Support” ist für diese Hardware vermutlich nicht zubekommen.

Es liegt also nur an der Verfügbarkeit von Treibern und an ein paar dism Zeilen, dass man sich eine Windows on ARM Installation selbst zusammenstellen kann.
Dass die Qualcomm Treiber im Windows-11 Standard-Setup fehlten verstört mich etwas, schließlich hat Microsoft exklusive Verträge mit der Chip-Schmiede.

Doch mit dem Wissen, wie ich die Treiber “konservieren” und “reintegrieren” konnte, kann ich nun weiter für mehr Einsatz von ARM Systemen werben. Besonders im Unternehmensbereich ist es wichtig, dass auch diese (heute noch exotische) Hardware genau so verwaltet werden kann, wie es mit x86 getan wird.

Nachtrag

Die Visual Studio 2022 Build-Tools (also Compiler ohne IDE) lassen sich auch unter Windows 10 ARM64 installieren, es handelt sich dabei jedoch um x86 Binaries für Cross-Compiling, und außerdem unterstützt Windows 10 nur x86, aber keine x64 Emulation.

Und noch etwas konnte ich bestätigen: Minecraft läuft einigermaßen vernünftig, auf dem 7-Watt-PC, wenn man optische Verschönerungen wie Wolken und durchsichtige Baumblätterblöcke deaktiviert.
Nur manchmal gehen ein paar Frames verloren. Zum Bauen reicht das, an Weltmeisterschaften würde ich aber so nicht teilnehmen ;)