Dass Microsoft ARM nicht ignorieren kann, folgt aus der Logik. Der erste Versuch mit „Windows 10 am Raspberry Pi“ wurde mit dem Raspberry Pi 3 eingestellt. Mit Wor-Flasher steht ein neues Programm in den Startlöchern, das die Ausführung von Windows 10 am Raspberry Pi ermöglicht. Wir testen, ob die „alterprobten“ APIs zum Hardware-Zugriff zur Verfügung stehen.
Worum geht es hier
Windows mag als Echtzeitbetriebssystem nicht besonders effizient sein. Außer Frage steht allerdings, dass das System sehr angenehm zu programmieren ist - kaum ein Unternehmen ist im Markt, das nicht auf die eine oder andere Art und Weise geistiges Eigentum für Plattform vorhält. Mit wor-flasher steht nun eine „neue“ Variante zur Verfügung, um Windows auf aktuellen Raspberry Pi-Prozessrechnern zur Ausführung zu bringen.
Eine Frage der Einrichtung.
Für die Arbeit mit Windows 10 und Windows 11 empfiehlt sich ausschließlich der Raspberry Pi 4 - in der Theorie ist Wor-Flasher zwar auch zur Unterstützung älterer Modelle bis zum Raspberry Pi zwei geeignet, deren Prozessoren sind für eine ernsthafte Nutzung des Systems zu schwach. Beim Raspberry Pi vier müssen Sie im ersten Schritt durch “sudo rpi-eeprom-update -a” sicherstellen, dass der Bootloader am aktuellen Stand ist - der Start vom USB-Stick funktioniert sonst nicht. Im nächsten Schritt benötigen Sie sowohl eine mindestens 32 GB große Micro SD-Karte, als auch einen mindestens 32 GB großen USB Stick - für die ernsthafte Nutzung empfiehlt der Autor 64 GB, weil bei einem 32 GB-Stick nach der Installation nur noch etwa 10 GB zur Verfügung stehen. Im nächsten Schritt erfolgt die eigentliche Installation über ein aus GitHub beziehbares Skript:
1 |
git clone https://github.com/Botspot/wor-flasher |
2 |
~/wor-flasher/install-wor-gui.sh |
Das in der Abbildung gezeigte Programm erlaubt dabei sowohl die Installation von Windows 10 als auch von Windows 11. Die „Paket-Daten“ bezieht Wor-Flasher dabei von Servern von Microsoft – per 10. Oct. 2021 kam es beim Herunterladen von Windows 11 reproduzierbar zu Problemen, die das Skript fälschlicherweise auf eine instabile Internetverbindung schiebt. Nach dem erfolgreichen Einrichten des Mediums entfernen sie die MicroSD-Karte, und starten den Raspberry Pi vom USB Stick aus neu. Wundern Sie sich nicht, wenn sie dabei gute 20 Minuten auf den Bildschirm mit den Himbeeren blicken, und auch der Rest der Installation viel Zeit in Anspruch nimmt. Der Raspberry Pi vier ist ob des Fehlens von 3D-Beschleunigung und der Nutzung eines USB-Stick als IO-Medium, nicht sonderlich performant. Nach getaner Arbeit können sie jedenfalls die Einstellungen abarbeiten und danach die Visual Studio Remote Tools installieren-der Autor empfiehlt die Nutzung der Version 2022, die unter auf der Preview-Seite zum Download bereitstehen.
Einrichtung des Hardwarezugriff
Die Programmierung des Raspberry Pi als Zielgerät mit Visual Studio erfolgt im allgemeinen so, wie sie es von Windows erwarten würden. Wichtig ist zweierlei - erstens sieht die korrekte Capabilities-Deklaration nun folgendermaßen aus:
1 |
<Capabilities> |
2 |
<Capability Name="internetClient" /> |
3 |
<iot:Capability Name="lowLevelDevices"/> |
4 |
<DeviceCapability Name="lowLevel"/> |
5 |
</Capabilities> |
6 |
</Package> |
Zum Zeitpunkt der Drucklegung ist der in Visual Studio 2022 enthaltene ManifestEditor nicht in der Lage, diese Deklaration automatisch einzufügen. Wichtig ist zweitens, dass sie den Debugger immer auf Keine Authentifizierung einstellen. Das Debugging scheitert dann zwar mit der in der Abbildung gezeigten Fehlermeldung - die Auswahl “anderer“ Kommunikationsverfahren führt allerdings nicht zu einem funktionsfähigen Programmier-Ablauf.
Zum Zeitpunkt der Drucklegung ist Visual Studio darauf beschränkt, Kompilaten auf den Raspberry Pi auszuliefern. Der Start muss von Hand aus dem Startmenü heraus erfolgen.
Hardware-Interaktion.
Im nächsten Schritt bietet es sich an, zu überprüfen, ob die von Microsoft einst als Teil von Windows 10 for IoT angebotenen Programmierschnittstellen nach wie vor funktionieren. Als erstes wollen wir dabei folgende Software zur Ausführung bringen, die einen GPIO-Port “belästigt“:
1 |
var gpio = GpioController.GetDefault(); |
2 |
if (gpio != null) { |
3 |
TxtOutput.Text = "GPIO-Port hoch! " + gpio.PinCount; |
4 |
var pin = gpio.OpenPin(5); |
5 |
TxtOutput.Text = TxtOutput.Text + "\n Habe Drive Mode: " + pin.IsDriveModeSupported(GpioPinDriveMode.Output); |
6 |
pin.SetDriveMode(GpioPinDriveMode.Output); |
7 |
pin.Write(GpioPinValue.High); |
8 |
var dispatcherTimer = new DispatcherTimer(); |
9 |
dispatcherTimer.Tick += DispatcherTimer_Tick; |
10 |
dispatcherTimer.Interval = new TimeSpan(0,0,0,0,50); //50ms |
11 |
dispatcherTimer.Start(); |
12 |
. . . . |
13 |
|
14 |
private void DispatcherTimer_Tick(object sender, object e) { |
15 |
myStatus = !myStatus; |
16 |
if(myStatus) pin.Write(GpioPinValue.High); |
17 |
else pin.Write(GpioPinValue.Low); |
18 |
}
|
Ergebnis der Programmausführung ist eine etwa 140ms dauernde Rechteckwelle. Im nächsten Schritt bietet es sich an, nach folgendem Schema zu überprüfen, ob I2C-und SPI-Geräte zur Verfügung stehen:
1 |
async void AsyncWorker() { |
2 |
string i2cDeviceSelector = I2cDevice.GetDeviceSelector(); |
3 |
// string i2cDeviceSelector = SpiDevice.GetDeviceSelector();
|
4 |
IReadOnlyList<DeviceInformation> devices = await DeviceInformation.FindAllAsync(i2cDeviceSelector); |
5 |
string victimList = ""; |
6 |
. . . |
Auch hier gilt, dass die Antwort in beiden Fällen“ ja“ lautet-sowohl das Gerät I2C1 als auch sein Kollege SPI1 stehen am zum Test verwendeten Raspberry Pi vier zur Verfügung.
Ausblick
Auch wenn die Grafikbeschleunigung unter Windows 10 bzw. Windows 11 am Raspberry Pi vier noch nicht funktioniert, ist offensichtlich, dass Ebenezer Uptons Prozessrechner schon jetzt eine „legitime“ Zielplattform ist. Primäres Problem in der praktischen Anwendung ist derzeit, dass Microsoft Windows 10 bzw. Windows 11 für Endkunden nur für X64- bzw. X86-Systeme lizenziert. Produktschlüssel für diesbezügliche Systeme funktionieren laut angelsächsischen Medienberichten unter ARM nicht - es dürfte allerdings nur eine Frage der Zeit sein, wann Microsoft diese Scharte aussetzt. Dass man in Redmond die „schon vorhandenen” APIs weiter unterstützt, ist nach Ansicht des Autors auf jeden Fall positiv anzumerken