2012-05-07 13 views
38

Estoy escribiendo el módulo de Linux simple mod.c. Cuando compilo el archivo mod.c, crea dos archivos de salida mod.o y mod.ko. Así que solo quiero saber, ¿Cuál es la diferencia entre el archivo mod.o y mod.ko?Diferencia entre el archivo .o y .ko

+1

Creo que .ko son 2.6 archivos de objetos kernel mientras que .o son 2.4. Obtenga más información al respecto aquí: http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html – smichak

Respuesta

34

La respuesta corta es que el archivo .ko .ko es su archivo objeto vinculado con algunas estructuras de datos generadas automáticamente por el kernel que necesita el kernel.

El archivo . O es el archivo objeto de su módulo, el resultado de compilar su archivo C. El sistema de compilación kernel crea automáticamente otro archivo C con algunas estructuras de datos que describen el módulo kernel (llamado your_module_kmod.c), compila este archivo C en otro archivo objeto y vincula el archivo objeto y el archivo objeto que creó para crear el . ko archivo.

El enlazador dinámico en el núcleo que está a cargo de los módulos del núcleo de carga, espera encontrar la estructura de datos del kernel puesto en el objeto kmod en el archivo .ko y no ser capaz de cargar el módulo del núcleo sin ellos.

12

Antes de Linux 2.6, un programa de espacio de usuario interpretaría el archivo ELF objeto (.o) y hacer todo el trabajo de vinculación con el núcleo en ejecución, generar una imagen binaria final. El programa pasaría esa imagen al y el núcleo haría poco más que pegarlo en la memoria . En Linux 2.6, el núcleo hace el enlace. Un programa de espacio de usuario pasa el contenido del archivo de objeto ELF directamente al núcleo . Para que esto funcione, la imagen del objeto ELF debe contener información adicional de . Para identificar este tipo particular de archivo de objeto ELF, nombramos el archivo con el sufijo ".ko" ("objeto kernel") en lugar de ".o" Para el ejemplo , el controlador de dispositivo serie que en Linux 2.4 vivía en el archivo serial.o en Linux 2.6 vive en el archivo serial.ko.

de http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html.

Cuestiones relacionadas