Ich möchte beim Booten einen benutzerdefinierten Parameter an den Kernel übergeben, was mein neuer Code verwenden wird. Dieser Parameter ist eine Zahl.
Ich weiß, wie man dem Kernel-Modul über die Kernel-Befehlszeile, d. h. module_param()
, einen Wert übergibt. Jetzt möchte ich Wert von U-Boot übergeben.
Gibt es eine Möglichkeit, dies während oder nach dem Booten zu tun?
Ändern Sie Ihre Board-Datei in include / config / board_xxx.h von U-Boot, ändern Sie $ bootargs ähnlich der letzten in diesem Beispiel gesetzten Variable:
%Vor%control ist der Name des integrierten Treibermoduls, das ich nicht insmodieren kann, weil ich es brauche, um vollständig zur Linux-Eingabeaufforderung zu booten.
cmd1 ist die globale Variable, die ich in dem Modul definiert habe, in dem ich verwendet habe:
%Vor%Also, Ihre $ bootargs var muss einfach mit etwas wie zB angehängt werden:
<your_mod_name>.<your_mod_parameter_var_name>=<an_appropriate_value>
Wenn Sie wissen, wie Sie einen Wert an ein Kernelmodul übergeben, wissen Sie genug:)
insmod my_module param=value
Wenn Ihr Modul im Kernel integriert ist, können Sie Ihren Parameter zu den Kernel-Parametern hinzufügen
vmlinux ... my_module.param=value ...
Hier eine Referenz: kernel-parameters.txt
Linux-Quelldokumentation
Ich bevorzuge es aus dem Mund des Pferdes v4.12 / Dokumentation / admin-guide / kernel-parameter.rst :
%Vor%Einfacher Weg, es auszuprobieren
%Vor%dann in der Befehlszeile:
%Vor%und wenn der Kernel bootet, siehst du:
%Vor% welches von init
von dummy-irq.c
gedruckt wird.
Codepfad
Ich habe es noch nicht geschafft, dem vollständigen Codepfad zu folgen, aber ich denke, dass .
in Ссылка :
wird im module_param
-Makro-Wasserfall erweitert, wobei ein Schritt einen Kommentar von Linus enthält, der angibt, wie klar dieser Code ist:
Die QEMU GDB watch
Rückverfolgung, die für dummy-irq.c:irq
endet, ist:
Tags und Links linux linux-device-driver linux-kernel