#535 kbdneo2 Treiber unter Windows Instruktionen Fehlen + Bug in Windows Driver Development Kit

Closed
opened 5 months ago by steffen23 · 3 comments

Der kbdneo2 Treiber lässt sich nicht mit dem aktuellen Windows DDK unter VS 2019 kompilieren. Dies hat mehrere Gründe, die Dokumentation ist veraltet, und das DDK hat einen Bug. Temporäre Lösung unten.

Problem 1: Bug im Windows DDK

Meine Schritte (nach Anleitung unter https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk):

  1. Installation Windows SDK, 10.0.19041.0

  2. MSVC Build Tools 14.26

  3. MSVC v142 VS 2019 C++ x64/x86 Spectre-mitigated libs (v14.26)

  4. Installation WDK für das DDK, version 2004

  5. DDK Beispiele von https://github.com/Microsoft/Windows-driver-samples 325b87c May 22, 2020

  6. Neo layout von https://github.com/neo-layout/neo-layout a46a54d Apr 25, 2020

  7. DDK Beispiel kbdus kompiliert einwandfrei, lässt sich aber trotz Registrierungseintrag nicht laden (ACCESS_VIOLATION).

Es gibt keine direkte Fehlermeldung, aber die Language Toolbar verschwindet, und das Fenster der Systemsteuerung verschwindet manchmal, wenn das defekte Tastaturlayout ausgewählt wird.

Ich habe SystemSettings.exe und den Microsoft Keyboard Layout Creator debugged (MKLC ist ein schnellerer Test für das Problem. MKLC wurde explizit nicht zur Erzeugung des Layouts verwendet, nur zum debuggen: “Load Existing Keyboard” triggered das Problem, und man muss nicht immer in die Systemsteuerung, um ein neues Tastaturlayout hinzuzufügen). Der Fehler tritt in kbdus!KbdLayerDescriptor+0x56f auf, aber das hilft nichts.

Ich vermute, dass es dieser Bug ist: https://github.com/microsoft/Windows-driver-samples/issues/433

Die selbst kompilierten DLLs sind alle um die 90kB, die SystemDLLs unter 10kB. Irgendetwas wird hier mit gelinkt, das nicht in die DLL gehört.
Die existierende Neo DLL von github im Ordner Treiber/64bit_Windows/System32/kbdneo32.dll, 31kB, geht einwandfrei.

Problem 2: Anleitung aus kbdneo2 ist nicht mehr aktuell für Visual Studio 2019

Die Anleitung in der Datei 1st_README.txt im Ordner https://github.com/neo-layout/neo-layout/tree/master/windows/kbdneo2/Quelldateien ist schwer zu verstehen:

Zum kompilieren des Treibers die ‘Checked Build Environment’ starten und zum Ordner mit den Quelldateien wechseln und den Befehl »Build« ausführen.cd src\input\layout\all_kbds\kbdneo2 build

Das scheint auf einem alten DDK aufzubauen. Es gibt keine vcxproj Datei für Visual Studio.

Versuchsweise habe ich kbdus.vcxproj für kbdneo2 angepasst. Kompilieren geht, laden nicht. Keine ACCESS_VIOLATION. Vermutlich das gleiche DDK Problem, da die Linkereinstellungen in den Beispieldateien nicht korrekt sind.

Es wäre schön, ein .sln und .vcxproj mit den korrekten Compilerflags zu haben, so daß kbdneo2 ohne weitere Probleme direkt mit Visual Studio gebaut werden kann. Ich habe die Optionen aus make.bat verwendet, es hat nicht funktioniert, aber falls sich jemand mit der Microsoft Toolchain auskennt, ist es vermutlich sehr schnell erledigt.
Alternativ geht es vermutlich auch unter mingw64.

Der kbdneo2 Treiber lässt sich nicht mit dem aktuellen Windows DDK unter VS 2019 kompilieren. Dies hat mehrere Gründe, die Dokumentation ist veraltet, und das DDK hat einen Bug. Temporäre Lösung unten. ## Problem 1: Bug im Windows DDK Meine Schritte (nach Anleitung unter https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk): 1. Installation Windows SDK, 10.0.19041.0 2. MSVC Build Tools 14.26 3. MSVC v142 VS 2019 C++ x64/x86 Spectre-mitigated libs (v14.26) 4. Installation WDK für das DDK, version 2004 5. DDK Beispiele von https://github.com/Microsoft/Windows-driver-samples 325b87c May 22, 2020 6. Neo layout von https://github.com/neo-layout/neo-layout a46a54d Apr 25, 2020 7. DDK Beispiel kbdus kompiliert einwandfrei, lässt sich aber trotz Registrierungseintrag nicht laden (ACCESS_VIOLATION). Es gibt keine direkte Fehlermeldung, aber die Language Toolbar verschwindet, und das Fenster der Systemsteuerung verschwindet manchmal, wenn das defekte Tastaturlayout ausgewählt wird. Ich habe SystemSettings.exe und den Microsoft Keyboard Layout Creator debugged (MKLC ist ein schnellerer Test für das Problem. MKLC wurde explizit nicht zur Erzeugung des Layouts verwendet, nur zum debuggen: “Load Existing Keyboard” triggered das Problem, und man muss nicht immer in die Systemsteuerung, um ein neues Tastaturlayout hinzuzufügen). Der Fehler tritt in kbdus!KbdLayerDescriptor+0x56f auf, aber das hilft nichts. Ich vermute, dass es dieser Bug ist: https://github.com/microsoft/Windows-driver-samples/issues/433 Die selbst kompilierten DLLs sind alle um die 90kB, die SystemDLLs unter 10kB. Irgendetwas wird hier mit gelinkt, das nicht in die DLL gehört. Die existierende Neo DLL von github im Ordner Treiber/64bit_Windows/System32/kbdneo32.dll, 31kB, geht einwandfrei. ## Problem 2: Anleitung aus kbdneo2 ist nicht mehr aktuell für Visual Studio 2019 Die Anleitung in der Datei 1st_README.txt im Ordner https://github.com/neo-layout/neo-layout/tree/master/windows/kbdneo2/Quelldateien ist schwer zu verstehen: > Zum kompilieren des Treibers die 'Checked Build Environment' starten und zum Ordner mit den Quelldateien wechseln und den Befehl »Build« ausführen.cd src\input\layout\all_kbds\kbdneo2 build Das scheint auf einem alten DDK aufzubauen. Es gibt keine vcxproj Datei für Visual Studio. Versuchsweise habe ich kbdus.vcxproj für kbdneo2 angepasst. Kompilieren geht, laden nicht. Keine ACCESS_VIOLATION. Vermutlich das gleiche DDK Problem, da die Linkereinstellungen in den Beispieldateien nicht korrekt sind. Es wäre schön, ein .sln und .vcxproj mit den korrekten Compilerflags zu haben, so daß kbdneo2 ohne weitere Probleme direkt mit Visual Studio gebaut werden kann. Ich habe die Optionen aus make.bat verwendet, es hat nicht funktioniert, aber falls sich jemand mit der Microsoft Toolchain auskennt, ist es vermutlich sehr schnell erledigt. Alternativ geht es vermutlich auch unter mingw64.
qwertfisch was assigned by hrnz 5 months ago
hrnz added the
Treiber/Windows/kbdneo
label 5 months ago
qwertfisch commented 5 months ago
Owner

Vor gut einer Woche habe ich angefangen, den kbdneo-Treiber unter Windows 10 zu kompilieren. Der im Repo vorhandene läuft zwar (relativ problemlos), aber ich wollte schauen, ob es Inkompatibilitäten gibt und man das Ganze nicht vielleicht mit der aktuellen Toolchain bauen sollte.

Dabei bin ich auf dieselben Probleme gestoßen (Bauanleitung von kbdneo ist veraltet, und das DDK-Beispiel funktioniert nicht). Nach viel Rumprobieren habe ich es geschafft, mit dem aktuellen Visual Studio 2019, dem Windows SDK und WDK das US-Layout und letztlich auch kbdneo zu kompilieren, wobei sich eine deutlich kleinere Dateigröße ergab. Sie liegt immer noch leicht über der ursprünglichen Version aus dem Repo, aber zeigt ansonsten keine Auffälligkeiten.

Nicht hinbekommen habe ich bisher den Debug-Build – der ist mir letztlich aber auch egal. Für die 64- und 32-Bit-Varianten kann man das Projekt im Release-Modus jeweils einmal bauen.

Vorschlag zum weiteren Vorgehen

Ich würde demnächst ein neues Projekt ins Repo hochladen, welches eine Visual Studio 2019-Solution für kbdneo sowie zwei weitere Varianten mitbringt, basierend auf dem alten Treiber sowie dem WDK-Beispiel. Damit lässt sich kbdneo für Windows 10 kompilieren – meine Tests zeigen (noch?) keine Fehler, aber Ergänzungen und Verbesserungen sind dann gerne willkommen.

Bin nicht vollständig zufrieden, was die Nachvollziehbarkeit angeht, denn dafür braucht man nicht nur Windows 10, sondern mit Visual Studio, SDK und WDK weitere 10GB an Zeug. Alternativ kann man das Standalone-WDK herunterladen, was aber ebenfalls 12GB beträgt.

Lösung mit MSKLC

@steffen23: Vielen Dank auch für die detailreiche Beschreibung zur temporären Lösung mit dem MSKLC. Eventuell wäre es besser, dazu ein eigenes Issue anzulegen (im Sinne von: Verbesserung / Info), um hier nicht zwei Sachen parallel zu besprechen.

Vor gut einer Woche habe ich angefangen, den kbdneo-Treiber unter Windows 10 zu kompilieren. Der im Repo vorhandene läuft zwar (relativ problemlos), aber ich wollte schauen, ob es Inkompatibilitäten gibt und man das Ganze nicht vielleicht mit der aktuellen Toolchain bauen sollte. Dabei bin ich auf dieselben Probleme gestoßen (Bauanleitung von kbdneo ist veraltet, und das DDK-Beispiel funktioniert nicht). Nach viel Rumprobieren habe ich es geschafft, mit dem aktuellen Visual Studio 2019, dem Windows SDK und WDK das US-Layout und letztlich auch kbdneo zu kompilieren, wobei sich eine deutlich kleinere Dateigröße ergab. Sie liegt immer noch leicht über der ursprünglichen Version aus dem Repo, aber zeigt ansonsten keine Auffälligkeiten. Nicht hinbekommen habe ich bisher den Debug-Build – der ist mir letztlich aber auch egal. Für die 64- und 32-Bit-Varianten kann man das Projekt im Release-Modus jeweils einmal bauen. ## Vorschlag zum weiteren Vorgehen Ich würde demnächst ein neues Projekt ins Repo hochladen, welches eine Visual Studio 2019-Solution für kbdneo sowie zwei weitere Varianten mitbringt, basierend auf dem alten Treiber sowie dem WDK-Beispiel. Damit lässt sich kbdneo für Windows 10 kompilieren – meine Tests zeigen (noch?) keine Fehler, aber Ergänzungen und Verbesserungen sind dann gerne willkommen. Bin nicht vollständig zufrieden, was die Nachvollziehbarkeit angeht, denn dafür braucht man nicht nur Windows 10, sondern mit Visual Studio, SDK und WDK weitere 10GB an Zeug. Alternativ kann man das Standalone-WDK herunterladen, was aber ebenfalls 12GB beträgt. ## Lösung mit MSKLC @steffen23: Vielen Dank auch für die detailreiche Beschreibung zur temporären Lösung mit dem MSKLC. Eventuell wäre es besser, dazu ein eigenes Issue anzulegen (im Sinne von: Verbesserung / Info), um hier nicht zwei Sachen parallel zu besprechen.
steffen23 commented 5 months ago
Poster

@qwertfisch

Mit dem DDK gefällt es mir auch nicht. Die Installation ist umständlich, und es hat mich fast einen Tag gekostet, da das DDK anfangs Visual Studio nicht erkannt hat. So wie ich es sehe ist der größte Teil des DDKs völlig unnötig. Der MKLC hat nur 3MB Header + einige DLLs. Zusammen mit dem Programm selbst unter 25MB. Ich weiss nicht, ob es legal wäre, diese Dateien direkt mit NEO zu bündeln. Ich vermute, daß wir eigentlich nur kbd.h brauchen.

Debug build ist glaube ich in diesem Fall nutzlos. Mir hat es jedenfalls nicht bei der Problemsuche geholfen.

Ich habe ein anderes Issue wie vorgeschlagen angelegt mit einer detaillierten Beschreibung des MKLC Prozesses. https://git.neo-layout.org/neo/neo-layout/issues/536

Dabei habe ich versucht, komplett ohne VS zu arbeiten. Einige fehlende Header habe ich aus mingw64 geborgt.
Es gibt eine Warnung vom Linker, aber sonst scheint es zu gehen.

@qwertfisch Mit dem DDK gefällt es mir auch nicht. Die Installation ist umständlich, und es hat mich fast einen Tag gekostet, da das DDK anfangs Visual Studio nicht erkannt hat. So wie ich es sehe ist der größte Teil des DDKs völlig unnötig. Der MKLC hat nur 3MB Header + einige DLLs. Zusammen mit dem Programm selbst unter 25MB. Ich weiss nicht, ob es legal wäre, diese Dateien direkt mit NEO zu bündeln. Ich vermute, daß wir eigentlich nur kbd.h brauchen. Debug build ist glaube ich in diesem Fall nutzlos. Mir hat es jedenfalls nicht bei der Problemsuche geholfen. Ich habe ein anderes Issue wie vorgeschlagen angelegt mit einer detaillierten Beschreibung des MKLC Prozesses. https://git.neo-layout.org/neo/neo-layout/issues/536 Dabei habe ich versucht, komplett ohne VS zu arbeiten. Einige fehlende Header habe ich aus mingw64 geborgt. Es gibt eine Warnung vom Linker, aber sonst scheint es zu gehen.
qwertfisch commented 5 months ago
Owner

Fürs Erste existiert nun ein Projekt für Visual Studio 2019, welches reproduzierbare und funktionierende Builds rauswirft, siehe Solution. Ich habe gleich mal die drei allgemein verwendeten Layoutvarianten integriert. Es gibt noch keine gemeinsam genutzten Dateien, das könnte man mindestens noch optimieren.

Die Preconditions / Requirements stehen in der README. So kann man es zumindest nachbauen und ggf. an eigene Zwecke anpassen.

Der bisherige Quellcode findet sich parallel dazu im Verzeichnis legacy_source, entsprechendes gilt für die Builds, die ja weiterhin unter Windows XP, Vista und 7 funktionieren.


Änderungen und Optimierungen bezüglich geringerer Anforderungen (z.B. kein komplettes VS und Windows Driver Kit) bitte in #536 weiter besprechen.

Fürs Erste existiert nun ein Projekt für Visual Studio 2019, welches reproduzierbare und funktionierende Builds rauswirft, siehe [Solution](https://git.neo-layout.org/neo/neo-layout/src/branch/master/windows/kbdneo2/source). Ich habe gleich mal die drei allgemein verwendeten Layoutvarianten integriert. Es gibt noch keine gemeinsam genutzten Dateien, das könnte man mindestens noch optimieren. Die Preconditions / Requirements stehen in der README. So kann man es zumindest nachbauen und ggf. an eigene Zwecke anpassen. Der bisherige Quellcode findet sich parallel dazu im Verzeichnis `legacy_source`, entsprechendes gilt für die Builds, die ja weiterhin unter Windows XP, Vista und 7 funktionieren. ---- Änderungen und Optimierungen bezüglich geringerer Anforderungen (z.B. kein komplettes VS und Windows Driver Kit) bitte in #536 weiter besprechen.
qwertfisch closed this issue 5 months ago
Sign in to join this conversation.
Loading…
There is no content yet.