2011-09-20 17 views
7

Cuando construya un Kernel Driver fuera de árbol, ejecute como este en el directorio de controladores, donde KERNELDIR es la ruta al origen del kernel, o a los encabezados.Exporte correctamente los Encabezados de Linux, Módulos

make -C $(KERNELDIR) M=$(PWD) modules 

al intentar construir las cabeceras de mí mismo usando:

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR) 

i encontrar la exportación no aptos para construir módulos contra (sin un árbol de fuentes del núcleo completo) Varios archivos y carpetas parece que faltan, como un Makefile, scripts, etc. include/generated/autoconf.h o include/config/auto.conf

Debian hace las cosas de una forma utilizable, como se describe en rules.real, a pesar de que hace algo más que se describe en Documentation/make/headers_install.txt, que ver ms no ser la forma "estándar".

En resumen: ¿cómo exporto correctamente los encabezados de Linux, por lo que puedo construir módulos externos en su contra?

+0

He tenido problemas con 'autoconf.h'. Si mal no recuerdo, simplemente lo copié de una carpeta cercana donde había construido mi kernel – Shahbaz

Respuesta

2

Creo que el objetivo del archivo core de headers_install está destinado a la producción de encabezado Linux para la producción de la biblioteca C y la cadena de herramientas y no para permitir construir fuera de los módulos kernel sans código fuente kernel configurado completo .

De hecho, supongo que no se admite la creación de módulos de núcleo de árbol sin el código fuente completo del kernel, y de hecho es un "hack" creado por las distribuciones.

5

headers_install está destinado a exportar un conjunto de archivos de encabezado adecuados para usar desde el punto de vista del espacio del usuario. Es la API expuesta del kernel del espacio de usuario. Digamos que creas una nueva y maravillosa ioctl, con una estructura de datos completa. Este es el tipo de información que desea conocer en el espacio de usuario, de modo que el programa de espacio de usuario puede usar su nuevo y maravilloso ioctl.

Pero todo lo que no es visible desde el espacio de usuario, que es "privado" para el kernel, o en otras palabras, la API interna, no está expuesto al espacio de usuario.

Por lo tanto, para construir un módulo fuera de árbol, necesita ya sea un árbol de fuente configurado completo o los encabezados del kernel empaquetados por su distribución. Busque el paquete linux-headers o linux-kernel-headers en Ubuntu/Debian por ejemplo.

Cuestiones relacionadas