Czy ktoś może wyjaśnić, co dokładnie robi docelowy "oldconfig" w pliku makefile jądra Linuksa? Widzę, że jest to odniesienie w niektórych dokumentach kompilacji, ale nigdy nie wyjaśniłem, co dokładnie robi.
linux
makefile
linux-kernel
fred basset
źródło
źródło
Przed uruchomieniem
make oldconfig
musisz skopiować plik konfiguracyjny jądra ze starszego jądra do katalogu głównego nowego jądra.Możesz znaleźć kopię starego pliku konfiguracyjnego jądra w działającym systemie pod adresem
/boot/config-3.11.0
. Alternatywnie, kod źródłowy jądra ma konfiguracje w plikachlinux-3.11.0/arch/x86/configs/{i386_defconfig / x86_64_defconfig}
Jeśli źródło twojego jądra znajduje się pod adresem
/usr/src/linux
:źródło
Podsumowanie
Jak wspomniał Ignacio , aktualizuje
.config
za Ciebie po zaktualizowaniu źródła jądra, npgit pull
. Z.Stara się zachować istniejące opcje.
Posiadanie odpowiedniego skryptu jest pomocne, ponieważ:
mogły zostać dodane nowe opcje lub usunięte
format konfiguracyjny Kconfig jądra ma opcje, które:
select
depends
Te relacje opcji sprawiają, że ręczne rozwiązywanie konfiguracji jest jeszcze trudniejsze.
Zmodyfikujmy ręcznie plik .config, aby zrozumieć, jak rozwiązuje on konfiguracje
Najpierw wygeneruj domyślną konfigurację za pomocą:
Teraz
.config
ręcznie edytuj wygenerowany plik, aby emulować aktualizację jądra i uruchom:zobaczyć, co się stanie. Kilka wniosków:
Linie typu:
nie są zwykłymi komentarzami, ale faktycznie wskazują, że parametr nie jest ustawiony.
Na przykład, jeśli usuniemy wiersz:
i biegnij
make oldconfig
, zapyta nas:Po zakończeniu
.config
plik zostanie zaktualizowany.Jeśli zmienisz dowolny znak w linii, np. Na
# CONFIG_DEBUG_INFO
, to się nie liczy.Linie typu:
są zawsze używane do zaprzeczenia własności, chociaż:
jest również rozumiana jako negacja.
Na przykład, jeśli usuniesz
# CONFIG_DEBUG_INFO is not set
i odpowiesz:z
N
, plik wyjściowy zawiera:i nie:
Ponadto, jeśli ręcznie zmodyfikujemy linię, aby:
i uruchom
make oldconfig
, a następnie linia zostanie zmodyfikowana do:bez
oldconfig
pytania nas.Konfiguracje, których zależności nie są spełnione, nie pojawiają się w
.config
. Wszyscy inni to robią.Na przykład ustaw:
i biegnij
make oldconfig
. Będzie ona teraz zwrócić się do nas na:DEBUG_INFO_REDUCED
,DEBUG_INFO_SPLIT
itp configs.Te właściwości nie pojawiły się
defconfig
wcześniej.Jeśli spojrzymy poniżej,
lib/Kconfig.debug
gdzie są zdefiniowane, zobaczymy, że zależą one odDEBUG_INFO
:Więc kiedy
DEBUG_INFO
był wyłączony, w ogóle się nie pojawili.Konfiguracje, które są
selected
włączone, są ustawiane automatycznie bez pytania użytkownika.Na przykład, jeśli
CONFIG_X86=y
i usuniemy wiersz:i uruchom
make oldconfig
, linia zostanie odtworzona bez pytania nas, w przeciwieństwie doDEBUG_INFO
.Dzieje się tak, ponieważ
arch/x86/Kconfig
zawiera:i wybierz wymusza, aby ta opcja była prawdziwa. Zobacz też: /unix/117521/select-vs-depends-in-kernel-kconfig
Konfiguracje, których ograniczenia nie są spełnione, są proszone o podanie.
Na przykład
defconfig
ustawiliśmy:Jeśli edytujemy:
i biegnij
make oldconfig
, zapyta nas:Dzieje się tak, ponieważ
RCU_FANOUT
jest zdefiniowanyinit/Kconfig
jako:Dlatego bez
64BIT
wartości maksymalna to32
, ale64
ustawiliśmy na.config
, co spowodowałoby, że byłaby niespójna.Bonusy
make olddefconfig
ustawia każdą opcję na ich wartość domyślną bez pytania interaktywnego. Uruchamia się automatycznie,make
aby zapewnić.config
spójność w przypadku ręcznej modyfikacji, tak jak my. Zobacz też: /server/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-treemake alldefconfig
jest podobnymake olddefconfig
, ale akceptuje również fragment konfiguracji do scalenia. Ten cel jest używany przezmerge_config.sh
skrypt: https://stackoverflow.com/a/39440863/895245A jeśli chcesz zautomatyzować
.config
modyfikację, nie jest to zbyt proste: jak nieinteraktywnie włączyć funkcje w pliku .config jądra Linuksa?źródło
Aktualizuje starą konfigurację o nowe / zmienione / usunięte opcje.
źródło
Z tej strony :
źródło
To tortura. Zamiast dołączać ogólny plik konfiguracyjny, powodują one, że trafisz powrót 9000 razy, aby go wygenerować.
źródło
yes "" | make oldconfig