2010-11-14 16 views

Respuesta

96

Lee el archivo existente .config y solicita al usuario las opciones en el origen del kernel actual que no se encuentran en el archivo. Esto es útil al tomar una configuración existente y moverla a un kernel nuevo.

+0

Gracias, muy útil. –

5

Actualiza una configuración anterior con opciones nuevas/modificadas/eliminadas.

18

Antes de ejecutar 'make oldconfig' Debe copiar un archivo de configuración del núcleo de un kernel anterior en el directorio raíz del nuevo kernel.

Puede encontrar una copia del archivo de configuración del kernel anterior en un sistema en ejecución en /boot/config-3.11.0. Como alternativa, el código fuente del kernel tiene configuraciones en linux-3.11.0/arch/x86/configs/{i386_defconfig/x86_64_defconfig}

Si las fuentes del núcleo se encuentra en/usr/src/linux

cd /usr/src/linux 
cp /boot/config-3.9.6-gentoo .config 
make oldconfig 
+2

¡No construya el kernel como raíz! consulte https://www.youtube.com/watch?v=fMeH7wqOwXA#t=15m44s – ted

2

De esta page:

Hacer oldconfig toma el .config y lo ejecuta a través de las reglas de los archivos Kconfig y produce un .config que es consistente con las reglas de Kconfig. Si hay valores CONFIG que faltan, el make oldconfig los solicitará.

Si el .config ya es consistente con las reglas que se encuentran en Kconfig, , entonces hacer oldconfig es esencialmente una operación no operativa.

Si ejecutó make oldconfig y luego ejecuta make oldconfig como por segunda vez, la segunda vez no causará que se realicen cambios adicionales en .

13

Resumen

Como se ha mencionado by Ignacio, actualiza su .config para usted después de actualizar el código fuente del núcleo, por ejemplo, con git pull.

Trata de mantener sus opciones existentes.

Tener un guión para esto es útil porque:

  • nuevas opciones se pueden haber añadido, o los antiguos eliminado

  • formato de configuración KConfig del núcleo tiene opciones que:

    • implican uno a través de select
    • dependen de otro vía depends

    Estas relaciones de opción hacen que la resolución de configuración manual sea aún más difícil.

Vamos a modificar .config manualmente para entender cómo se resuelve configuraciones

Primeros generar una configuración por defecto con:

make defconfig 

Ahora editar el .config archivo generado manualmente para emular una actualización del kernel y ejecutar:

make oldconfig 

para ver qué pasa. Algunas conclusiones:

  1. líneas de texto:

    # CONFIG_XXX is not set 
    

    no son meros comentarios, pero en realidad indican que el parámetro no está establecido.

    Por ejemplo, si quitamos la línea:

    # CONFIG_DEBUG_INFO is not set 
    

    y ejecutar make oldconfig, nos preguntará:

    Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW) 
    

    Cuando se ha terminado, el archivo .config se actualizará.

    Si cambia cualquier carácter de la línea, p. a # CONFIG_DEBUG_INFO, no cuenta.

  2. Líneas de tipo:

    # CONFIG_XXX is not set 
    

    siempre se utilizan para la negación de una propiedad, aunque:

    CONFIG_XXX=n 
    

    también se entiende como la negación.

    Por ejemplo, si se quita # CONFIG_DEBUG_INFO is not set y contesta:

    Compile the kernel with debug info (DEBUG_INFO) [N/y/?] (NEW) 
    

    con N, entonces el archivo de salida contiene:

    # CONFIG_DEBUG_INFO is not set 
    

    y no:

    CONFIG_DEBUG_INFO=n 
    

    Además, si modificamos manualmente la línea a:

    CONFIG_DEBUG_INFO=n 
    

    y ejecutar make oldconfig, entonces la línea es modificado a:

    # CONFIG_DEBUG_INFO is not set 
    

    sin oldconfig pedirlo.

  3. Las configuraciones cuyas dependencias no se cumplen, no aparecen en el .config. Todos los demás lo hacen.

    Por ejemplo, establezca:

    CONFIG_DEBUG_INFO=y 
    

    y ejecutar make oldconfig. Ahora nos pedirá: DEBUG_INFO_REDUCED, DEBUG_INFO_SPLIT, etc. configs.

    Esas propiedades no aparecieron en el defconfig antes.

    Si miramos bajo lib/Kconfig.debug donde están definidos, vemos que dependen de DEBUG_INFO:

    config DEBUG_INFO_REDUCED 
        bool "Reduce debugging information" 
        depends on DEBUG_INFO 
    

    Así que cuando DEBUG_INFO estaba apagado, que no se presentaron en absoluto.

  4. Las configuraciones configuradas como selected se configuran automáticamente sin preguntar al usuario.

    Por ejemplo, si CONFIG_X86=y y eliminamos la línea:

    CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y 
    

    y correr make oldconfig, la línea se regenere sin pedirlo, a diferencia de DEBUG_INFO.

    Esto sucede porque arch/x86/Kconfig contiene:

    config X86 
        def_bool y 
        [...] 
        select ARCH_MIGHT_HAVE_PC_PARPORT 
    

    y seleccione esa opción fuerzas para ser verdad. Ver también: https://unix.stackexchange.com/questions/117521/select-vs-depends-in-kernel-kconfig

  5. Se solicitan las configuraciones cuyas restricciones no se cumplen.

    Por ejemplo, defconfig habían establecido:

    CONFIG_64BIT=y 
    CONFIG_RCU_FANOUT=64 
    

    Si edit:

    CONFIG_64BIT=n 
    

    y ejecutar make oldconfig, se nos pregunta:

    Tree-based hierarchical RCU fanout value (RCU_FANOUT) [32] (NEW) 
    

    Esto se debe a RCU_FANOUT es definido en init/Kconfig como:

    config RCU_FANOUT 
        int "Tree-based hierarchical RCU fanout value" 
        range 2 64 if 64BIT 
        range 2 32 if !64BIT 
    

    Por lo tanto, sin 64BIT, el valor máximo es 32, pero tuvimos 64 conjunto en el .config, lo que haría inconsistente.

bonos

make olddefconfig conjuntos de todas las opciones a su valor por defecto sin pedir interactiva. Se ejecuta automáticamente en make para garantizar que el .config sea coherente en caso de que lo haya modificado manualmente como lo hicimos nosotros.Vea también: https://serverfault.com/questions/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-tree

make alldefconfig es como make olddefconfig, pero también acepta un fragmento de configuración para combinar. Este objetivo es utilizado por el guión merge_config.sh: https://stackoverflow.com/a/39440863/895245

Y si desea automatizar la modificación .config, que no es demasiado simple: How do you non-interactively turn on features in a Linux kernel .config file?

0

Es una tortura. En lugar de incluir un archivo conf genérico, hacen que vuelvas 9000 veces para generar uno.

+3

Pruebe: 'yes" "| hacer oldconfig' –

Cuestiones relacionadas