Rmano ‚s Antwort hat mich leicht an , aber die wirkliche Magie einfacher , indem man das entdeckt wird Q=Option in Ihrem makeKommandozeile im Kernel - Quellverzeichnis. es können Sie die Details sehen, von denen ein Anruf an ein Skript ist: echo "4.4.19$(/bin/sh ./scripts/setlocalversion .)". Wenn Sie dasselbe Snippet ausführen, erhalten Sie die Versionsnummer des Kernels 4.4.19-00010-ge5dddbf. Wenn Sie sich das Skript ansehen, ermittelt es die Nummer aus dem Versionsverwaltungssystem, und wenn Sie es mit bash -xausführen, wird der genaue Prozess angezeigt:
+++ git rev-parse --verify --short HEAD
++ head=e5dddbf
+++ git describe --exact-match
++ '[' -z '' ']'
++ false
+++ git describe
++ atag=release/A530_os_1.0.0-10-ge5dddbf
++ echo release/A530_os_1.0.0-10-ge5dddbf
++ awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}'
++ git config --get svn-remote.svn.url
++ git diff-index --name-only HEAD
++ grep -qv '^scripts/package'
++ return
+ res=-00010-ge5dddbf
+ echo -00010-ge5dddbf
-00010-ge5dddbf
Das zeigt mir, dass ich, wenn ich ein Kernelmodul für meinen laufenden Kernel erstellen möchte, die Version mit dem falschen Tag und das falsche Commit habe. Ich muss das beheben und mindestens die DTBs ( make dtbs) erstellen, um die generierten Dateien mit der richtigen Versionsnummer zu erstellen.
stellt sich heraus, auch das war nicht genug. Ich musste eine ersetzen scripts/setlocalversion, die einfach tut:
#!/bin/sh
echo -0710GC0F-44F-01QA
Erstellen Sie dann die automatisch generierten Dateien neu:
make Q= ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs
dann konnte ich Derek Molloys Beispieltreiber bauen und konnte insmodes erfolgreich. anscheinend spielte die Warnung, Module.symversnicht anwesend zu sein, keine Rolle. Alles, was Linux benutzte, um festzustellen, ob das Modul funktionieren würde, war diese localversion-Zeichenfolge.
domainnameFeld wird vomdomainnameBefehl mithilfe dessetdomainnameSystemaufrufs festgelegt. In ähnlicher Weise wird dasnodenameFeld durch denhostnameBefehl unter Verwendung dessethostnameSystemaufrufs festgelegt. (Der Wertnodename/hostnamekann in gespeichert werden/etc/nodename.)