¿Hay alguna forma eficiente (tal vez abusando del preprocesador gcc?) Para obtener un conjunto de fuentes del kernel despojado donde todo el código no necesario de acuerdo con .config se omite?Strip fuentes del kernel de Linux según .config
Respuesta
Bien, tengo algunos pasos para llegar a una solución.
En primer lugar, uno puede obtener los comandos del compilador utilizados por
make KBUILD_VERBOSE=1 | tee build.log
grep '^ gcc' build.log
Por ahora, sólo se selecciono una línea de comando gcc para dar nuevos pasos. Por ejemplo, la acumulación de kernel/kmod.c, que parece:
gcc <LIST OF MANY OPTIONS> -c -o kernel/kmod.o kernel/kmod.c
ahora quitar la opción -c
, -o ...
y añadir -E
, inhabilitando así la compilación y escribir la salida del preprocesador de la pantalla. Además agrego -fdirectives-only
para evitar la expansión de macro y -undef
para eliminar las definiciones de macro definidas por GNU. -nostdinc
para eliminar los encabezados c estándar ya ha sido agregado por el archivo MAKE MAKE.
Ahora incluye todavía están incluidos y, por tanto, ampliado en la salida del preprocesador. Por lo tanto, canalizo el archivo de entrada a través de grep eliminándolos: grep -v '#include' kernel/kmod.c
. Ahora solo queda una inclusión: autoconf.h está incluida en la línea de comandos de Makefile. Esto es genial ya que realmente define las macros utilizadas por #ifdef CONFIG_...
para seleccionar el código del kernel activo.
Lo único que queda es filtrar los comentarios del preprocesador y los #define
restantes de autoconf.h mediante grep -v '^#'
.
El conjunto de tubo se parece a:
grep -v '#include' kernel/kmod.c | gcc -E -fdirectives-only -undef <ORIGINAL KERNEL BUILD GCC OPTIONS WITHOUT -c AND -o ...> - |grep -v '^#'
y el resultado es una versión filtrada de kernel/kmod.c que contiene el código que realmente se construye en kmod.o.
Aún quedan preguntas: ¿Cómo hacer eso para todo el árbol fuente? ¿Hay archivos que realmente se compilan pero que nunca se usaron y se eliminaron de los enlaces?
Compila todo y usa atime para descubrir qué archivos no se usaron. Puede que no sea muy preciso, pero probablemente valga la pena intentarlo.
- 1. desarrollo del kernel de Linux
- 2. Programación del kernel de Linux
- 3. módulo del kernel Linux compilar
- 4. ¿Impresiones de depuración del kernel de Linux?
- 5. Símbolo exportado del kernel de Linux
- 6. Ubicación del Módulo Kernel de Linux
- 7. ¿Cómo elimino los símbolos locales del módulo del kernel de Linux sin romperlo?
- 8. Programación del controlador del dispositivo del kernel de Linux
- 9. Deshabilitar de forma recurrente las dependencias de CONFIG en las compilaciones de kernel de Linux
- 10. Linux Kernel coding style
- 11. Linux kernel aio funcionalidad
- 12. Android Strip Audio del video
- 13. Linux glib necesita pkg-config y pkg-config necesita glib?
- 14. kernel stack for linux process
- 15. Linux Kernel Invalidating TLB Entries
- 16. ¿La lista de hilos del kernel de Linux es segura?
- 17. Cómo construir el mismo kernel Linux dos fuentes y obtener la misma suma de comprobación
- 18. ¿Cómo sabe Linux Kernel dónde buscar el firmware del controlador?
- 19. Cómo comenzar con el desarrollo del kernel de Linux
- 20. Nuevo en el desarrollo del kernel/controlador de Linux
- 21. ¿Cómo detener los hilos del kernel de Linux en rmmod?
- 22. ¿Cómo funciona copy_from_user del kernel de Linux internamente?
- 23. ¿Lees la versión del kernel de Linux usando C?
- 24. Depurar etapa previa a la descompresión del kernel de Linux
- 25. stdlib.h alternativa en kernel Linux?
- 26. No se puede escribir en la memoria kernel a través del módulo kernel de Linux (Ubuntu)
- 27. ¿Cómo configuro el kernel de Linux dentro de Buildroot?
- 28. técnicas de depuración actual Linux Kernel
- 29. compilando kernel de Linux con no-gcc
- 30. Cómo codificar un módulo kernel de Linux?
Esto no funcionará, ya que se evalúan muchas sentencias #ifdef ... dentro de los archivos fuente, por lo que los archivos no utilizados y los archivos casi no utilizados se compilan también. – dronus
@dronus: Esa es la única manera simple en que puedo pensar (La siguiente es, básicamente, escribir o modificar un preprocesador C). Debería eliminar cosas como módulos y archivos no utilizados. ¿Realmente necesitas que sea más preciso? ¿Qué estás intentando lograr? –
Bueno, me gustaría obtener una descripción general sobre cómo funciona el kernel, pero es casi imposible leer cientos de MB de código. Así que me gusta construir un kernel mínimo y leer el código real usado. – dronus