Rmano ‚s Antwort hat mich leicht an , aber die wirkliche Magie einfacher , indem man das entdeckt wird Q=
Option in Ihrem make
Kommandozeile 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 -x
ausfü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 insmod
es erfolgreich. anscheinend spielte die Warnung, Module.symvers
nicht anwesend zu sein, keine Rolle. Alles, was Linux benutzte, um festzustellen, ob das Modul funktionieren würde, war diese localversion-Zeichenfolge.
domainname
Feld wird vomdomainname
Befehl mithilfe dessetdomainname
Systemaufrufs festgelegt. In ähnlicher Weise wird dasnodename
Feld durch denhostname
Befehl unter Verwendung dessethostname
Systemaufrufs festgelegt. (Der Wertnodename
/hostname
kann in gespeichert werden/etc/nodename
.)