Ich verwende cmake, um einen Linux-Treiber zu installieren. Um die Kernel-Version zu erhalten, verwende ich CMAKE_SYSTEM_VERSION
, was die Ausgabe von uname -r
ergeben sollte.CMAKE_SYSTEM_VERSION für neuen Kernel nicht aktualisiert
Allerdings, nachdem ich einen neuen Kernel installiert habe, habe ich versucht, den Treiber mit cmake neu zu installieren, nur um festzustellen, dass es zu /lib/modules/<previous kernel>/...
statt zu dem Verzeichnis für den aktuellen Kernel installiert wurde. uname- r
gibt das korrekte Ergebnis.
Ich verwende die folgende Zeile in meinem CMakeLists.txt:
install(PROGRAMS myDevice.ko DESTINATION "/lib/modules/${CMAKE_SYSTEM_VERSION}/kernel/drivers/myDevice" COMPONENT driver)
ich nicht CMAKE_SYSTEM_VERSION im CMakeCache.txt finden konnte, und erneut ausführen nur cmake ..
auch nicht den Trick zu tun haben. Ich musste den gesamten Build-Ordner neu erstellen.
Ich würde gerne wissen, ob es einen besseren Weg gibt, da der Build-Ordner auch Anwendungen enthält, die nicht neu aufgebaut werden sollten, nur weil es einen neuen Kernel gibt.
Was ist Ihre CMake-Version? Ich denke, dass es sein Verhalten geändert hat, sehen Sie sich die neueste Dokumentation von CMAKE_SYSTEM_VERSION an: https://cmake.org/cmake/help/v3.6/variable/CMAKE_SYSTEM_VERSION.html – usr1234567
@ usr1234567 Die Version ist 3.5.2. Ich habe die Variable nicht explizit gesetzt, also sollte sie 'CMAKE_HOST_SYSTEM_VERSION' werden, was 'uname -r' sein sollte. Und ich finde 'CMAKE_HOST_SYSTEM_VERSION' in CMakeCache.txt auch nicht, also sollte es immer noch die aktuelle Kernelversion darstellen, oder? – ted
@ usr1234567 Ja sollte es: die Dokumentation (auf die Sie zeigen) besagt, dass 'CMAKE_SYSTEM_VERSION' standardmäßig auf [' CMAKE_HOST_SYSTEM_VERSION'] gesetzt ist (https://cmake.org/cmake/help/v3.5/variable/CMAKE_HOST_SYSTEM_VERSION.html# Variable: CMAKE_HOST_SYSTEM_VERSION), die 'uname -r' ist. – ted