2012-03-21 25 views
6

Mientras leía algo sobre las llamadas al sistema, busqué syscalls.h para encontrar el archivo de encabezado en LXR. Los resultados de la búsqueda me desconcertaron. Hay una docena de archivos syscalls.h procedentes de directorios en arch/_arch_name_/include/asm. Están bien, son definiciones específicas de arquitectura o algo más necesario. La pregunta es por qué tenemos dos encabezados syscalls.h diferentes en include/linux y include/asm-generic?Organización de los encabezados kernel de Linux

Además, quiero saber qué son los encabezados include/linux y para qué son los encabezados include/asm-generic. ¿Cómo se diferencian entre ellos? ¿Cuál es la lógica detrás de tener dos carpetas de encabezado separadas? ¿Cómo se relacionan entre sí?

Gracias

+1

¿Miraste dentro de cada uno de estos archivos? –

+1

En /include/linux/syscalls.h, hay varias declaraciones de llamadas al sistema. En /include/asm-generic/syscalls.h, todas las llamadas al sistema se declaran con las correspondientes definiciones de macro. Pero esto se aplica solo a syscalls.h, sin embargo, me gustaría entender una idea general. – dirtybit

Respuesta

6

He hecho esta pregunta en Kernel Newbies ML. Me dio la siguiente respuesta que hace las cosas claras:

Cihangir Akturk escribió:

yo sepa, las cabeceras se encuentran en/include/asm-generic es para architechture independiente (probablemente compartido a través de arquitecturas) código. Lo más probable es que no necesite incluir estos encabezados directamente, en su lugar incluimos estos encabezados indirectamente a través de los encabezados que dependen de la arquitectura.

El directorio OTOH,/include/linux es para archivos de encabezado genéricos que definen las interfaces entre los componentes del kernel. En la mayoría de las situaciones, usted encontrará todas las funcionalidades del kernel que necesita en estos encabezados.

respeta, chngr.

1

Las cabeceras en directorios arch/_arch_name_/include/asm son dependientes de la arquitectura específica, como para x86, arquitecturas ARM. Entonces, la lógica interna es específica de la plataforma y depende en gran medida del hardware subyacente. Solo incluirá la arquitectura de su plataforma.

Encabezados en include/linux son comunes y plataforma independiente. Son lógicas comunes y se compartirán arquitecturas cruzadas.

+0

La otra pregunta es ¿cuál es la razón de tener include/asm-generic además de incluir/linux headers? ¿Cuál es la relación entre ellos? – dirtybit

+0

Mi opinión es 'include/asm-generic' que proporciona una interfaz común y uniforme para acceder a la estructura de datos relacionada con el hardware. 'include/asm-generic' permite a los desarrolladores controlar el hardware subyacente mucho más fácilmente y no es necesario extraer los detalles de las especificaciones de hardware. Por ejemplo, 'include/asm-generic/rtc.h' proporciona una interfaz uniforme para recuperar información de rtc, pero su implementación incluye código dependiente de la arquitectura, como' CMOS_WRITE' y 'CMOS_READ'. – Wayne

Cuestiones relacionadas