2010-11-14 19 views

Odpowiedz

96

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.

+0

Dziękuję, bardzo pomocne. –

5

Uaktualnia starą konfigurację z nowymi/zmienionymi/usuniętymi opcjami.

18

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 
+2

Nie buduj jądra jako katalogu głównego! zobacz https://www.youtube.com/watch?v=fMeH7wqOwXA#t=15m44s – ted

2

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 .

13

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ę.

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:

  1. 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.

  2. 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.

  3. 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 na DEBUG_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.

  4. 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ństwie DEBUG_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

  5. 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 jako init/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ść jest 32, ale mieliśmy 64 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?

0

To tortura. Zamiast dołączać ogólny plik conf, sprawiają, że dostajesz 9000 razy, aby go wygenerować.

+3

Spróbuj: 'tak" "| make oldconfig' –