Forum: PC-Programmierung Wor-Flasher: Windows 10 mit Hardwarezugriff am Raspberry Pi


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Angehängte Dateien:

Lesenswert?

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


:
Beitrag #6843856 wurde von einem Moderator gelöscht.
von Hildegard (Gast)


Lesenswert?

Wer schon Windows auf dem RPi laufen lässt hat vermutlich öfters Pech 
beim Nachdenken.

von Sebastian E. (der_andere_sebastian)


Lesenswert?

Warum so unsachliche Kritik? Daß die Leute immer meckern, aber zu faul 
oder unfähig sind, es besser zu machen, ist enttäuschend.

von Dieter (Gast)


Lesenswert?

Das ist ein interessanter Artikel, auch wenn Vieles erst mal nur 
thematisch angerissen wurde. Mehr Infos wuerde auch ein sehr langer 
Artikel werden. Die Kritiker bei soviel Knete nicht mal einen Buchstaben 
antippen versuchen.

Beitrag #6844029 wurde von einem Moderator gelöscht.
von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Hildegard schrieb:
> Wer schon Windows auf dem RPi laufen lässt hat vermutlich öfters Pech
> beim Nachdenken.

Kindchen,
nicht ganz.

Es macht schon Sinn. Zum Beispiel, wenn du eine 
ressourcen-anforderungsarme App hast, die aber tief im MS-Ökosystem 
sitzt. Die kannst du mit einem RPi schon jetzt sehr preiswert 
mobilisieren...denke zum Beispiel an ein "Smart TV" artiges 
Anzeigesystem für Sonderpreise in einem Cafe oder so.

Und ja, Far Cry 6 oder Visual Studio 2022 wollen wir natürlich nicht am 
RPi ausführen.

lg
th


P.S. Falls du die Hilda bist. Meine Handynummer hat sich 
geändert...und das Appartment in Ticha gibt es nicht mehr. Aber: per 
e-mail bin ich nach wie vor zu haben, und Martell lagert immer hier.

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Sebastian E. schrieb:
> Warum so unsachliche Kritik? Daß die Leute immer meckern, aber zu faul
> oder unfähig sind, es besser zu machen, ist enttäuschend.

Hallo Sebastian,
danke dir. Ich schulde dir ein Getränk!

Tam

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Dieter schrieb:
> Das ist ein interessanter Artikel, auch wenn Vieles erst mal nur
> thematisch angerissen wurde. Mehr Infos wuerde auch ein sehr langer
> Artikel werden. Die Kritiker bei soviel Knete nicht mal einen Buchstaben
> antippen versuchen.

Danke dir!

von Klaus W. (mfgkw)


Lesenswert?

Tam H. schrieb:
> danke dir. Ich schulde dir ein Getränk!

Martell?

Wenn ich mir das Quelltextfragment ansehe, steht das was von einem Timer 
mit 50ms.
Das ganze soll einen GPIO 140ms hochziehen.
Heißt das, es gehen 90ms durch Overhead veloren?

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Klaus W. schrieb:
> Tam H. schrieb:
>> danke dir. Ich schulde dir ein Getränk!
>
> Martell?

Immer gern

>
> Wenn ich mir das Quelltextfragment ansehe, steht das was von einem Timer
> mit 50ms.
> Das ganze soll einen GPIO 140ms hochziehen.
> Heißt das, es gehen 90ms durch Overhead veloren?

Ja! War auch geschockt, ist aber so.

von Klaus W. (mfgkw)


Lesenswert?

Gut, dann kommt man pro Sekunde auf über 10 GPIO-Pegeländerungen.
Respekt! :-)

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Klaus W. schrieb:
> Gut, dann kommt man pro Sekunde auf über 10 GPIO-Pegeländerungen.
> Respekt! :-)

Ich weiss. Ich weiss.

Irgendwann muss ich das Tutorial zu Softwarekoppelung machen...

Tam

von Teo D. (teoderix)


Lesenswert?

Da bekommt doch der Spruch "Mit Kanonen auf Spatzen schießen", doch 
völlig neue Dimensionen.
Läuft das auf SD-Karten oder killt mir da das Swap selbige?!

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

Teo D. schrieb:
> Da bekommt doch der Spruch "Mit Kanonen auf Spatzen schießen", doch
> völlig neue Dimensionen.
> Läuft das auf SD-Karten oder killt mir da das Swap selbige?!

Rennt AFAIK nur auf USB-Stick oder USB-HDD

von Pete K. (pete77)


Lesenswert?

Und woher weiss ich beim Programmieren, dass ich für 140ms nur 50ms in 
den Timer eingeben muss? Ist das irgendwo beschrieben, oder muss man 
diese Dinge alle im Oszi nachprüfen?
Dann ist Windows auf einem Raspi wohl das "tote Pferd", was da gerade 
geritten wird.

von Klaus W. (mfgkw)


Lesenswert?

Na, sowas schwieriges braucht echt Zeit - daher der Name.

von Teo D. (teoderix)


Lesenswert?

Pete K. schrieb:
> Und woher weiss ich beim Programmieren, dass ich für 140ms nur 50ms in
> den Timer eingeben muss? Ist das irgendwo beschrieben, oder muss man
> diese Dinge alle im Oszi nachprüfen?

Ich glaub das nützt nix. Das is wohl eher als 140ms-Jitter anzusehen.

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
hier ein Oszillogramm affichiert.

Habe einige Dutzend Wellenformen aquiriert und Compute gemacht. Nein, 
Timingstabilität ist des RPi nicht.

von Sheeva P. (sheevaplug)


Lesenswert?

Tam H. schrieb:
> Hildegard schrieb:
>> Wer schon Windows auf dem RPi laufen lässt hat vermutlich öfters Pech
>> beim Nachdenken.
>
> Es macht schon Sinn. Zum Beispiel, wenn du eine
> ressourcen-anforderungsarme App hast, die aber tief im MS-Ökosystem
> sitzt. Die kannst du mit einem RPi schon jetzt sehr preiswert
> mobilisieren...denke zum Beispiel an ein "Smart TV" artiges
> Anzeigesystem für Sonderpreise in einem Cafe oder so.

Hm, Tam, ich weiß ja nicht... ich lese Deine Worte und oberflächlich 
erschließt sich mir auch ihr Sinn, aber irgendetwas in mir... sträubt 
sich, aus Gründen.

Einerseits schreiben wir das Jahr 2021, und ich sehe heutzutage 
irgendwie keinen echten Benefit mehr in plattformabhängigen 
Applikationen. Das gilt insbesondere dann, wenn ihre Anforderungen an 
die Ressourcen überschaubar sind und man als Entwickler eben nicht das 
letzte Quäntchen Performance aus einer gegebenen Hardware heraus 
quetschen muß. Das kann der Entwickler aber auch schon unter Linux tun, 
das in vielen Bereichen bislang eh immer noch schneller ist als ein 
Windows-System (ohne es jetzt für Win11 gemessen zu haben), und um hier 
einen echten Vorteil zu erlangen, müßte Windows -- hier insbesondere auf 
dem RasPi -- Dinge können, die Linux nicht kann. Davon sehe ich aber 
nichts mit Ausnahme der Tatsache, daß Windows eben Windows ist und Linux 
nicht.

Andererseits ist auch so ein Linux-System sehr angenehm zu 
programmieren, und die von Dir genannten Beispiele sind zweifellos schon 
tausendfach unter Linux auf dem RasPi realisiert worden -- unter anderem 
auch schon mehrfach von mir selbst. Und: unter Linux funktioniert die 
Hardware komplett, inklusive Grafikbeschleunigung, was gerade bei 
Anzeigesystemen sicherlich kein Nachteil ist. Ich bin auch jetzt 
(besonders um diese Uhrzeit) zu faul, um den Gerätepark auszupacken und 
Oszillos zu kopieren, aber unter Linux kann ich die Hardware-PWM des 
RasPi benutzen -- na gut, wenn ich auf Audio verzichte.

Obendrein ist es ja nicht selten so, daß sich während oder nach dem 
Projekt die Anforderungen an eine Software ändern. Du bist Entwickler 
wie ich, und Du wirst das selbst schon erlebt haben, wie ich. Und wenn 
das passiert, und die Forderung nach höherer Performance im Raum 
steht... dann schauen RasPi-Entwickler, die auf Windows gesetzt haben, 
womöglich in die Röhre, während Linux-Entwickler dann ja immer noch die 
Möglichkeit haben, auf eine leistungsfähigere Hardware zu setzen und 
ihre Implementierung (fast immer) 1:1 zu übernehmen.

Insofern mögen diese Beispiele nicht sehr geschickt gewählt sein, 
geschenkt. Aus meiner Sicht sieht das mal wieder wie ein Versuch 
Microsofts aus, in einen Markt einzudringen, der bereits boomt. Für 
besonders MS-affine Entwickler ist das auch sicherlich auch eine nette 
Spielerei, aber mehr sehe ich da leider (noch) nicht. Aber mittelfristig 
darauf setzen? Wozu? Was wäre der reale Benefit?

Dieser Beitrag kann nur von angemeldeten Benutzern beantwortet werden. Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.