¿Alguien puede explicar qué hace exactamente el objetivo "oldconfig" en el archivo makefile del kernel de Linux? Veo que se hace referencia en alguna documentación de compilación, pero nunca explicó exactamente lo que hace.¿Qué hace "make oldconfig" exactamente en el archivo makefile del kernel de Linux?
Respuesta
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.
Actualiza una configuración anterior con opciones nuevas/modificadas/eliminadas.
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
¡No construya el kernel como raíz! consulte https://www.youtube.com/watch?v=fMeH7wqOwXA#t=15m44s – ted
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 .
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.
- implican uno a través de
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:
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.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.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 deDEBUG_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.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 deDEBUG_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
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 eninit/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 es32
, pero tuvimos64
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?
Es una tortura. En lugar de incluir un archivo conf genérico, hacen que vuelvas 9000 veces para generar uno.
Pruebe: 'yes" "| hacer oldconfig' –
- 1. Makefile para el módulo kernel de Linux?
- 2. módulo del kernel Linux compilar
- 3. Obtener el nombre del archivo MAKE del archivo MAKE
- 4. ¿Qué hace un símbolo de porcentaje en un archivo MAKE?
- 5. ¿Qué hace "make check"?
- 6. Depende del archivo make
- 7. ¿Qué hace pg_escape_string exactamente?
- 8. BSD Make y GNU Make makefile compatible
- 9. CPU Cambia del modo de usuario al modo kernel: ¿qué es exactamente? ¿Cómo hace esta transición?
- 10. Nuevo en el desarrollo del kernel/controlador de Linux
- 11. ¿Qué hace exactamente org.apache.commons.lang.builder.CompareToBuilder?
- 12. ¿Qué hace fillMode exactamente?
- 13. desarrollo del kernel de Linux
- 14. ¿Qué hace exactamente Panel.IsItemsHost?
- 15. Referencia indefinida en el archivo MAKE de Linux
- 16. ¿Qué hace el doble símbolo "at" (@@) en un Makefile?
- 17. ¿Qué hace offsetLeftAndRight() exactamente?
- 18. Indicación de progreso make/makefile!
- 19. ¿Qué hace exactamente System.Diagnostics.Process UseShellExecute?
- 20. Programación del kernel de Linux
- 21. ¿Qué hace exactamente removedOnCompletion = NO?
- 22. ¿Qué hace AFX_MANAGE_STATE (AfxGetStaticModuleState()) exactamente
- 23. Registro de error del comando make en Linux
- 24. ¿Qué hace exactamente el comando "arreglar las propiedades del proyecto"?
- 25. ¿Qué hace exactamente -march = native?
- 26. ¿Qué significa m en el archivo de configuración del kernel?
- 27. ¿Qué hace exactamente el método .join()?
- 28. ¿Qué hace mvn instalar en maven exactamente?
- 29. Ruta de directorio común del archivo MAKE
- 30. ¿Qué hace exactamente android: layout_column?
Gracias, muy útil. –