Přečte existující .config soubor, který byl použit pro staré jádro a vyzve uživatele k zadání voleb v aktuálním zdroji jádra, které v souboru nejsou nalezeny. To je užitečné, když vezmete existující konfiguraci a přesunete ji do nového jádra.
Než spustíte make oldconfig , musíte zkopírovat konfigurační soubor jádra ze staršího jádra do kořenového adresáře nového jádra.
Kopii starého konfiguračního souboru jádra na běžícím systému najdete na /boot/config-3.11.0 . Alternativně má zdrojový kód jádra konfigurace v linux-3.11.0/arch/x86/configs/{i386_defconfig / x86_64_defconfig}
Pokud je zdroj vašeho jádra umístěn na /usr/src/linux :
cd /usr/src/linux
cp /boot/config-3.9.6-gentoo .config
make oldconfig
Shrnutí
Jak zmínil Ignacio, aktualizuje váš .config pro vás po aktualizaci zdrojového kódu jádra, např. s git pull .
Snaží se zachovat vaše stávající možnosti.
Mít k tomu skript je užitečné, protože:
-
mohly být přidány nové možnosti nebo odstraněny staré
-
konfigurační formát Kconfig jádra má tyto možnosti:
- vzájemně naznačovat pomocí
select - závisí na jiném přes
depends
Tyto vztahy možností ještě více ztěžují ruční řešení konfigurace.
- vzájemně naznačovat pomocí
Pojďme upravit soubor .config ručně, abychom pochopili, jak řeší konfigurace
Nejprve vygenerujte výchozí konfiguraci pomocí:
make defconfig
Nyní upravte vygenerovaný .config soubor ručně emulovat aktualizaci jádra a spustit:
make oldconfig
vidět, co se stane. Některé závěry:
-
Řádky typu:
# CONFIG_XXX is not setnejsou pouhé komentáře, ale ve skutečnosti indikují, že parametr není nastaven.
Pokud například odstraníme řádek:
# CONFIG_DEBUG_INFO is not seta spusťte
make oldconfig, zeptá se nás:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)Když to skončí,
.configsoubor bude aktualizován.Pokud změníte jakýkoli znak řádku, např. na
# CONFIG_DEBUG_INFO, to se nepočítá. -
Řádky typu:
# CONFIG_XXX is not setse vždy používají pro negaci vlastnosti, ačkoli:
CONFIG_XXX=nje také chápán jako negace.
Pokud například odstraníte
# CONFIG_DEBUG_INFO is not seta odpovězte:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)s
N, pak výstupní soubor obsahuje:# CONFIG_DEBUG_INFO is not seta ne:
CONFIG_DEBUG_INFO=nTaké, pokud ručně upravíme řádek na:
CONFIG_DEBUG_INFO=na spusťte
make oldconfig, pak se řádek upraví na:# CONFIG_DEBUG_INFO is not setbez
oldconfigptáte se nás. -
Konfigurace, jejichž závislosti nejsou splněny, se na
.confignezobrazují . Všichni ostatní ano.Například nastavte:
CONFIG_DEBUG_INFO=ya spusťte
make oldconfig. Nyní se nás zeptá na:DEBUG_INFO_REDUCED,DEBUG_INFO_SPLIT, atd.Tyto vlastnosti se na
defconfigneobjevily dříve.Pokud se podíváme pod
lib/Kconfig.debugkde jsou definovány, vidíme, že závisí naDEBUG_INFO:config DEBUG_INFO_REDUCED bool "Reduce debugging information" depends on DEBUG_INFOTakže když
DEBUG_INFObyl vypnutý, vůbec se neobjevili. -
Konfigurace, které jsou
selectedpo zapnutí se konfigurace automaticky nastaví bez dotazu uživatele.Pokud například
CONFIG_X86=ya odstraníme řádek:CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=ya spusťte
make oldconfig, linka se na rozdíl odDEBUG_INFOznovu vytvoří bez dotazu .To se děje, protože
arch/x86/Kconfigobsahuje:config X86 def_bool y [...] select ARCH_MIGHT_HAVE_PC_PARPORTa vyberte, aby tato možnost byla pravdivá. Viz také:https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig
-
Jsou požadovány konfigurace, jejichž omezení nejsou splněna.
Například
defconfigměl nastaveno:CONFIG_64BIT=y CONFIG_RCU_FANOUT=64Pokud upravíme:
CONFIG_64BIT=na spusťte
make oldconfig, zeptá se nás:Tree-based hierarchical RCU fanout value (RCU_FANOUT) [32] (NEW)Důvodem je
RCU_FANOUTje definován nainit/Kconfigjako:config RCU_FANOUT int "Tree-based hierarchical RCU fanout value" range 2 64 if 64BIT range 2 32 if !64BITTedy bez
64BIT, maximální hodnota je32, ale měli jsme64nastavte na.config, což by jej činilo nekonzistentním.
Bonusy
make olddefconfig nastaví každou možnost na výchozí hodnotu bez interaktivního dotazování. Spustí se automaticky na make abyste zajistili, že .config je konzistentní v případě, že jste jej upravili ručně jako my. Viz také:https://serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree
make alldefconfig je jako make olddefconfig , ale také přijímá konfigurační fragment ke sloučení. Tento cíl používá merge_config.sh skript:https://stackoverflow.com/a/39440863/895245
A pokud chcete automatizovat .config modifikace, která není příliš jednoduchá:Jak neinteraktivně zapínáte funkce v souboru .config jádra Linuxu?
Aktualizuje starou konfiguraci s novými/změněnými/odebranými možnostmi.