Czy ktoś może wyjaśnić, co cel "oldconfig" robi dokładnie w pliku make jądra Linuksa? Widzę, że w niektórych dokumentach kompiluje się, ale nigdy nie wyjaśnił, co dokładnie robi.Co robi "make oldconfig" dokładnie w pliku make jądra Linuksa?
Odpowiedz
Odczytuje istniejący plik .config
i monituje użytkownika o opcje w bieżącym źródle jądra, których nie ma w pliku. Jest to przydatne przy tworzeniu istniejącej konfiguracji i przenoszeniu jej do nowego jądra.
Uaktualnia starą konfigurację z nowymi/zmienionymi/usuniętymi opcjami.
Zanim uruchomisz "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 uruchomionym systemie pod numerem /boot/config-3.11.0
. Alternatywnie, kod źródłowy jądra ma configs w linux-3.11.0/arch/x86/configs/{i386_defconfig/x86_64_defconfig}
Jeśli źródła jądra znajduje się w katalogu/usr/src/linux
cd /usr/src/linux
cp /boot/config-3.9.6-gentoo .config
make oldconfig
Nie buduj jądra jako katalogu głównego! zobacz https://www.youtube.com/watch?v=fMeH7wqOwXA#t=15m44s – ted
Od tego page:
Bądź oldconfig bierze .config i uruchamia go zgodnie z regułami plików Kconfig i tworzy .config, który jest zgodny z regułami Kconfig . Jeśli brakuje wartości CONFIG, make oldconfig poprosi o nie.
Jeśli .config jest już zgodny z regułami znalezionymi w Kconfig, , to make oldconfig zasadniczo nie jest opcją.
Jeśli uruchomisz make oldconfig, a następnie uruchom make oldconfig po raz drugi, po raz drugi nie spowoduje żadnych dodatkowych zmian, które zostaną wykonane .
Podsumowanie
Jak wspomniano by Ignacio, to zaktualizuje .config
dla Ciebie po aktualizacji źródła jądra, np z git pull
.
Próbuje zachować istniejące opcje.
Posiadanie skrypt, który jest pomocny, ponieważ:
nowe opcje mogły zostać dodane lub stare usunięte
kernela KConfig Format konfiguracja posiada opcje:
- sugerują się nawzajem poprzez
select
- zależą od innego przez
depends
Te relacje opcji powodują jeszcze trudniejszą ręczną konfigurację.
- sugerują się nawzajem poprzez
Zmodyfikujmy .config ręcznie, aby zrozumieć w jaki sposób rozwiązuje konfiguracje
najpierw wygenerować domyślną konfigurację z:
make defconfig
teraz edytować wygenerowany .config
plik ręcznie, aby emulować aktualizacji jądra i uruchom:
make oldconfig
, aby zobaczyć, co się stanie. Niektóre wnioski:
linie typu:
# CONFIG_XXX is not set
nie są tylko komentarze, ale w rzeczywistości oznacza, że parametr nie jest ustawiony.
Na przykład, jeśli usuwamy wiersz:
# CONFIG_DEBUG_INFO is not set
i uruchomić
make oldconfig
, zapyta nas:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
Kiedy to się skończy, plik
.config
zostaną zaktualizowane.Jeśli zmienisz dowolny znak linii, np. do
# CONFIG_DEBUG_INFO
, to się nie liczy.Linie typu:
# CONFIG_XXX is not set
stosowane są zawsze negację właściwości, chociaż:
CONFIG_XXX=n
jest również rozumiane jako negacji.
Na przykład, jeśli usuniesz
# CONFIG_DEBUG_INFO is not set
i odpowiedzieć:Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW)
z
N
, plik wyjściowy zawiera:# CONFIG_DEBUG_INFO is not set
a nie:
CONFIG_DEBUG_INFO=n
Ponadto, jeśli ręcznie modyfikujemy linię na:
CONFIG_DEBUG_INFO=n
i uruchomić
make oldconfig
, wówczas linia zostanie zmodyfikowany tak, aby:# CONFIG_DEBUG_INFO is not set
bez
oldconfig
prosząc nas.Konfigi, których zależności nie są spełnione, nie pojawiają się na
.config
. Wszyscy inni to robią.Na przykład, ustaw:
CONFIG_DEBUG_INFO=y
i uruchomić
make oldconfig
. Teraz poprosi nas o:DEBUG_INFO_REDUCED
,DEBUG_INFO_SPLIT
itd. Configs.Właściwości te nie były wcześniej wyświetlane w modelu
defconfig
.Jeśli spojrzymy pod
lib/Kconfig.debug
gdzie są zdefiniowane, widzimy, że zależy im naDEBUG_INFO
:config DEBUG_INFO_REDUCED bool "Reduce debugging information" depends on DEBUG_INFO
Więc kiedy
DEBUG_INFO
był wyłączony, ale nie pojawiają się w ogóle.Konwersje, które są
selected
po włączeniu konfiguracji, są ustawiane automatycznie bez pytania użytkownika.Na przykład, jeśli
CONFIG_X86=y
i usuwamy wiersz:CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
i uruchomić
make oldconfig
, linia zostanie odtworzone, nie pytając nas, w przeciwieństwieDEBUG_INFO
.Dzieje się tak dlatego
arch/x86/Kconfig
zawiera:config X86 def_bool y [...] select ARCH_MIGHT_HAVE_PC_PARPORT
i wybierz opcję siły, które by mogło być prawdziwe. Zobacz także: https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig
Konfigi, których ograniczenia nie są spełnione, są wymagane.
Na przykład
defconfig
zaszło:CONFIG_64BIT=y CONFIG_RCU_FANOUT=64
gdybyśmy edit:
CONFIG_64BIT=n
i uruchomić
make oldconfig
, zapyta nas:Tree-based hierarchical RCU fanout value (RCU_FANOUT) [32] (NEW)
To dlatego
RCU_FANOUT
jest zdefiniowane jakoinit/Kconfig
jako:config RCU_FANOUT int "Tree-based hierarchical RCU fanout value" range 2 64 if 64BIT range 2 32 if !64BIT
Dlatego bez
64BIT
, maksymalna wartość jest32
, ale mieliśmy64
zestaw na.config
, która stałaby się niespójna.
Bonusy
make olddefconfig
zestawy każda opcja do ich wartości domyślnych, nie pytając interaktywnie. Automatycznie uruchamia się na make
, aby upewnić się, że .config
jest spójny, jeśli zmienisz go ręcznie tak jak my.Zobacz także: https://serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree
make alldefconfig
jest jak make olddefconfig
, ale akceptuje również fragment konfiguracji do scalenia. Cel ten jest używany przez skrypt merge_config.sh
: https://stackoverflow.com/a/39440863/895245
A jeśli chcesz zautomatyzować modyfikacji .config
, że nie jest zbyt prosta: How do you non-interactively turn on features in a Linux kernel .config file?
To tortura. Zamiast dołączać ogólny plik conf, sprawiają, że dostajesz 9000 razy, aby go wygenerować.
Spróbuj: 'tak" "| make oldconfig' –
- 1. Niepowodzenie kompilacji jądra Linuksa
- 2. jak wykonać "make" make file
- 3. dlaczego "make" przed "make install"
- 4. Programowanie jądra Linuksa: makefile
- 5. łupania zmienna w pliku make
- 6. Zależy od samego pliku make
- 7. Implementacja `make check` lub` make test`
- 8. Co dokładnie robi fillMode?
- 9. Odczytaj zmienną środowiskową w pliku make
- 10. Co dokładnie robi System.Diagnostics.Process UseShellExecute?
- 11. Python: make eval safe
- 12. make: reguła reguły reguły
- 13. Uruchamianie make w każdym podkatalogu
- 14. Co dokładnie robi plik runtime.Gosched?
- 15. co dokładnie robi metoda Activity.finish()?
- 16. Co dokładnie robi removeOnCompletion = NO?
- 17. Co dokładnie robi -XX: -TieredCompilation?
- 18. Co dokładnie robi funkcja offsetLeftAndRight()?
- 19. Co dokładnie robi program org.apache.commons.lang.builder.CompareToBuilder?
- 20. Co dokładnie robi funkcja .select()?
- 21. Zmień timer jądra Linuksa
- 22. Co dokładnie robi "blokada Mutex"?
- 23. Co dokładnie robi "setup.py clean"?
- 24. Co dokładnie robi dyrektywa użytkowa?
- 25. Jaka jest różnica między "make" i "make all"?
- 26. GNU make -j opcja
- 27. Linux configure/make, --prefix?
- 28. Funkcjonalność jądra linuksa
- 29. Jaka jest różnica między `make: console` i` make: command`?
- 30. Różnica między szczegółami „make install” i „make altinstall”
Dziękuję, bardzo pomocne. –