Kann jemand erklären, was das Ziel "oldconfig" genau im Linux-Kernel-Makefile macht? Ich sehe, dass in einigen Build-Dokumentationen darauf verwiesen wird, habe aber nie erklärt, was es genau tut.
linux
makefile
linux-kernel
Fred Basset
quelle
quelle
Bevor Sie ausführen
make oldconfig
, müssen Sie eine Kernel-Konfigurationsdatei von einem älteren Kernel in das Stammverzeichnis des neuen Kernels kopieren.Eine Kopie der alten Kernel-Konfigurationsdatei auf einem laufenden System finden Sie unter
/boot/config-3.11.0
. Alternativ enthält der Kernel-Quellcode Konfigurationenlinux-3.11.0/arch/x86/configs/{i386_defconfig / x86_64_defconfig}
Wenn sich Ihre Kernelquelle befindet unter
/usr/src/linux
:quelle
Zusammenfassung
Wie von Ignacio erwähnt , aktualisiert es Ihre
.config
für Sie, nachdem Sie die Kernelquelle aktualisiert haben, zgit pull
. B. mit .Es wird versucht, Ihre vorhandenen Optionen beizubehalten.
Ein Skript dafür zu haben ist hilfreich, weil:
Möglicherweise wurden neue Optionen hinzugefügt oder alte entfernt
Das Kconfig-Konfigurationsformat des Kernels bietet folgende Optionen:
select
depends
Diese Optionsbeziehungen machen die manuelle Konfigurationsauflösung noch schwieriger.
Lassen Sie uns .config manuell ändern, um zu verstehen, wie Konfigurationen aufgelöst werden
Generieren Sie zunächst eine Standardkonfiguration mit:
Bearbeiten Sie nun die generierte
.config
Datei manuell, um ein Kernel-Update zu emulieren und auszuführen:um zu sehen, was passiert. Einige Schlussfolgerungen:
Zeilen vom Typ:
sind keine bloßen Kommentare, sondern zeigen tatsächlich an, dass der Parameter nicht gesetzt ist.
Zum Beispiel, wenn wir die Zeile entfernen:
und renn
make oldconfig
, es wird uns fragen:Wenn es vorbei ist, wird die
.config
Datei aktualisiert.Wenn Sie ein Zeichen der Zeile ändern, z. B. in
# CONFIG_DEBUG_INFO
, zählt es nicht.Zeilen vom Typ:
werden immer für die Negation einer Eigenschaft verwendet, obwohl:
wird auch als Negation verstanden.
Wenn Sie beispielsweise entfernen
# CONFIG_DEBUG_INFO is not set
und antworten:mit
N
, dann enthält die Ausgabedatei:und nicht:
Wenn wir die Zeile manuell ändern in:
und laufen
make oldconfig
, dann wird die Zeile geändert zu:ohne
oldconfig
uns zu fragen.Konfigurationen, deren Abhängigkeiten nicht erfüllt sind, werden auf dem nicht angezeigt
.config
. Alle anderen tun es.Zum Beispiel setzen Sie:
und rennen
make oldconfig
. Es wird nun fragen Sie uns:DEBUG_INFO_REDUCED
,DEBUG_INFO_SPLIT
usw. configs.Diese Eigenschaften wurden zuvor nicht angezeigt
defconfig
.Wenn wir uns ansehen,
lib/Kconfig.debug
wo sie definiert sind, sehen wir, dass sie abhängen vonDEBUG_INFO
:Als sie
DEBUG_INFO
abwesend waren, tauchten sie überhaupt nicht auf.Konfigurationen, die
selected
aktiviert sind, werden automatisch festgelegt, ohne den Benutzer zu fragen.Zum Beispiel, wenn
CONFIG_X86=y
und wir die Zeile entfernen:und laufen
make oldconfig
, wird die Linie neu erstellt, ohne uns zu fragen, im Gegensatz zuDEBUG_INFO
.Dies geschieht, weil
arch/x86/Kconfig
enthält:und Auswahl erzwingt, dass diese Option wahr ist. Siehe auch: /unix/117521/select-vs-depends-in-kernel-kconfig
Es werden Konfigurationen angefordert, deren Einschränkungen nicht erfüllt sind.
Zum Beispiel
defconfig
hatte gesetzt:Wenn wir bearbeiten:
und renn
make oldconfig
, es wird uns fragen:Dies liegt daran, dass
RCU_FANOUT
definiert istinit/Kconfig
als:Daher ist ohne
64BIT
, der Maximalwert32
, aber wir hatten auf64
gesetzt.config
, was es inkonsistent machen würde.Boni
make olddefconfig
Setzt jede Option auf ihren Standardwert, ohne interaktiv zu fragen. Es wird automatisch ausgeführt,make
um sicherzustellen, dass das.config
konsistent ist, falls Sie es manuell wie wir geändert haben. Siehe auch: /server/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-treemake alldefconfig
ist wiemake olddefconfig
, akzeptiert aber auch ein Konfigurationsfragment zum Zusammenführen. Dieses Ziel wird vommerge_config.sh
Skript verwendet: https://stackoverflow.com/a/39440863/895245Und wenn Sie die
.config
Änderung automatisieren möchten , ist das nicht allzu einfach: Wie können Sie Funktionen in einer .config-Datei des Linux-Kernels nicht interaktiv aktivieren?quelle
Aktualisiert eine alte Konfiguration mit neuen / geänderten / entfernten Optionen.
quelle
Von dieser Seite :
quelle
Es ist Folter. Anstatt eine generische conf-Datei einzuschließen, drücken Sie 9000 Mal die Eingabetaste, um eine zu generieren.
quelle
yes "" | make oldconfig