Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

464
Vistas
Archivo fuente del módulo Kernel después del preprocesamiento

Vamos a haber escrito el siguiente archivo fuente del módulo más simple:

 #include <linux/init.h> #include <linux/module.h> static int __init md_init(void){ printk("Hello kernel"); return 0; } static void __exit md_exit(void){ printk("Goodbye kernel"); } module_init(md_init); module_exit(md_exit);

¿Cómo puedo ver esta fuente después del preprocesamiento? Quiero saber cómo se implementan las macros __init y __exit y cuál es module_init(md_init) y module_exit(md_exit) ? ¿Cómo funciona?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si tiene su controlador en el kernel, puede obtenerlo haciendo:

hacer ruta-al-módulo/srcfile.i

Como ejemplo, creé un directorio de prueba en drivers/staging/, puse su archivo allí, creé un Kconfig y Makefile simples, actualicé Kconfig y Makefile en staging, luego ejecuté

hacer controladores/puesta en escena/prueba/prueba.i

Si tiene la fuente fuera del árbol del kernel, pero tiene configurados Kconfig y Makefile, entonces:

make -C /ruta/al/kernel/src M=/ruta/al/controlador srcfile.i

El resultado fue de macros de inicio y salida:

 static int __attribute__ ((__section__(".init.text"))) __attribute__((__cold__)) __attribute__((no_instrument_function)) md_init(void) { printk("Hello kernel"); return 0; } static void __attribute__ ((__section__(".exit.text"))) __attribute__((__used__)) __attribute__((__cold__)) __attribute__((no_instrument_function)) md_exit(void) { printk("Goodbye kernel"); }
over 4 years ago · Santiago Trujillo Denunciar

0

Si solo planea obtener la salida preprocesada del módulo del kernel, no use Makefile, porque Makefiles (sub-make) intentará producir un archivo de objeto con la capacidad de insertarse en el kernel. Lo que contradice con gcc -E , que simplemente se detiene después del preprocesamiento. Entonces, simplemente haga lo siguiente usando gcc :

 gcc -E new.c -I$TREE/include -I$TREE/arch/x86/include -I$TREE/include/uapi

-E es para obtener la salida preprocesada, $TREE es la ubicación de su árbol de kernel y si usa otro arco, cambie x86. Y sabemos que, gcc toma el parámetro include dir con -I , así que pase todo el kernel include dir a través de -I . ¡Espero que esto ayude!

over 4 years ago · Santiago Trujillo Denunciar

0

,Para ver los archivos intermedios. es decir, los archivos .i y .s después del preprocesamiento del compilador, cambie el Makefile y agregue EXTRA_CFLAGS='-save-temps'

Makefile:

make -C /usr/lib/modules/$(shell uname -r)/build M=$(shell pwd) módulos EXTRA_CFLAGS=' -save-temps '

después de esto, una vez que ejecute 'make', puede ver your_module_filename.i en

ls /usr/lib/modules/$(uname -r)/build/{nombre_de_tu_módulo.i}

y la fuente con los cambios del preprocesador estará disponible casi al final del archivo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda