¿Alguien puede explicar qué hace exactamente el "oldconfig" de destino en el archivo makefile del kernel de Linux? Veo que se hace referencia en alguna documentación de compilación pero nunca expliqué qué hace exactamente.
linux
makefile
linux-kernel
Fred Basset
fuente
fuente

Antes de ejecutar
make oldconfig, debe copiar un archivo de configuración del kernel de un kernel anterior al directorio raíz del nuevo kernel.Puede encontrar una copia del antiguo archivo de configuración del kernel en un sistema en ejecución en
/boot/config-3.11.0. Alternativamente, el código fuente del kernel tiene configuraciones enlinux-3.11.0/arch/x86/configs/{i386_defconfig / x86_64_defconfig}Si la fuente de su kernel se encuentra en
/usr/src/linux:fuente
Resumen
Como lo mencionó Ignacio , actualiza su
.configpor usted después de actualizar la fuente del kernel, por ejemplo, congit pull.Intenta mantener sus opciones existentes.
Tener un guión para eso es útil porque:
Es posible que se hayan agregado nuevas opciones o que se hayan eliminado las antiguas.
El formato de configuración Kconfig del kernel tiene opciones que:
selectdependsEsas relaciones de opciones hacen que la resolución de configuración manual sea aún más difícil.
Modifiquemos .config manualmente para comprender cómo resuelve las configuraciones
Primero genere una configuración predeterminada con:
Ahora edite el
.configarchivo generado manualmente para emular una actualización del kernel y ejecute:para ver que pasa. Algunas conclusiones:
Líneas de tipo:
no son meros comentarios, sino que en realidad indican que el parámetro no está configurado.
Por ejemplo, si eliminamos la línea:
y corre
make oldconfig, nos preguntará:Cuando termine, el
.configarchivo se actualizará.Si cambia cualquier carácter de la línea, por ejemplo
# CONFIG_DEBUG_INFO, a , no cuenta.Líneas de tipo:
siempre se utilizan para la negación de una propiedad, aunque:
también se entiende como la negación.
Por ejemplo, si elimina
# CONFIG_DEBUG_INFO is not sety responde:con
N, entonces el archivo de salida contiene:y no:
Además, si modificamos manualmente la línea para:
y ejecutar
make oldconfig, luego la línea se modifica a:sin
oldconfigpreguntarnos.Las configuraciones cuyas dependencias no se cumplen no aparecen en el
.config. Todos los demás lo hacen.Por ejemplo, configure:
y corre
make oldconfig. Será ahora nos piden:DEBUG_INFO_REDUCED,DEBUG_INFO_SPLIT, etc. configuraciones.Esas propiedades no aparecieron
defconfigantes.Si miramos debajo de
lib/Kconfig.debugdonde se definen, vemos que dependen deDEBUG_INFO:Entonces, cuando
DEBUG_INFOestaba fuera, no aparecieron en absoluto.Las configuraciones que están
selectedactivadas se establecen automáticamente sin preguntar al usuario.Por ejemplo, si
CONFIG_X86=yy eliminamos la línea:y corre
make oldconfig, la línea se recrea sin preguntarnos, a diferencia deDEBUG_INFO.Esto sucede porque
arch/x86/Kconfigcontiene:y seleccionar fuerza a que esa opción sea verdadera. Consulte también: /unix/117521/select-vs-depends-in-kernel-kconfig
Se solicitan configuraciones cuyas restricciones no se cumplan.
Por ejemplo,
defconfighabía establecido:Si editamos:
y corre
make oldconfig, nos preguntará:Esto se debe a que
RCU_FANOUTse define eninit/Kconfigcomo:Por lo tanto, sin
64BIT, el valor máximo es32, pero habíamos64establecido en.config, lo que lo haría inconsistente.Bonificaciones
make olddefconfigestablece cada opción en su valor predeterminado sin preguntar de forma interactiva. Se ejecuta automáticamentemakepara garantizar que.configsea coherente en caso de que lo haya modificado manualmente como lo hicimos nosotros. Consulte también: /server/116299/automatically-answer-defaults-when-doing-make-oldconfig-on-a-kernel-treemake alldefconfiges comomake olddefconfig, pero también acepta un fragmento de configuración para fusionar. Este destino es utilizado por elmerge_config.shscript: https://stackoverflow.com/a/39440863/895245Y si desea automatizar la
.configmodificación, eso no es demasiado simple: ¿Cómo se activan las características de forma no interactiva en un archivo .config del kernel de Linux?fuente
Actualiza una configuración antigua con opciones nuevas / modificadas / eliminadas.
fuente
De esta pagina :
fuente
Es una tortura. En lugar de incluir un archivo conf genérico, le hacen presionar retorno 9000 veces para generar uno.
fuente
yes "" | make oldconfig