¿Por qué las aplicaciones del espacio de usuario necesitan encabezados del kernel?

¿Por qué las aplicaciones del espacio de usuario necesitan encabezados del kernel?

Estoy creando together-box e iptables para un dispositivo integrado y una de las dependencias para ellos son los encabezados del kernel.

Busqué en todo el sistema de archivos archivos *.ko y no encontré ninguno. Entonces llegué a la conclusión de que las aplicaciones no crean ningún controlador cargable (módulos del kernel).

¿Cuáles son otros casos en los que una aplicación de espacio de usuario requiere encabezados del kernel?

Respuesta1

Porque esos programas están construidos para usar cosas definidas en los encabezados del kernel:

busybox-1.22.1]$ egrep -RHn '^#include <linux'
modutils/modutils-24.c:194:#include <linux/elf-em.h>
include/fix_u32.h:17:#include <linux/types.h>
libbb/loop.c:11:#include <linux/version.h>
console-tools/openvt.c:23:#include <linux/vt.h>
console-tools/kbd_mode.c:23:#include <linux/kd.h>
console-tools/showkey.c:19:#include <linux/kd.h>
util-linux/blockdev.c:36:#include <linux/fs.h>
util-linux/mkfs_ext2.c:50:#include <linux/fs.h>
util-linux/mkfs_vfat.c:28:#include <linux/hdreg.h> /* HDIO_GETGEO */
util-linux/mkfs_vfat.c:29:#include <linux/fd.h>    /* FDGETPRM */
....

Para cada herramienta específica, necesitarás leer el código fuente de la herramienta y el encabezado del kernel correspondiente para saber exactamente qué.

Puedes ver que se comentan algunas cosas para que sea más fácil.

Por ejemplo, mkfs_vfatincluye linux/fd.hpara obtener FDGETPRM:

$ egrep -RHn FDGETPRM util-linux/mkfs_vfat.c
util-linux/mkfs_vfat.c:29:#include <linux/fd.h>    /* FDGETPRM */
util-linux/mkfs_vfat.c:351:         int not_floppy = ioctl(dev, FDGETPRM, &param);

Probablemente podrías eliminar lo relevante #includey estar atento a los errores del compilador para hacerlo más fácil; recibirás advertencias de que algunas cosas no están definidas. Es probable que esas cosas provengan de los encabezados del kernel.

información relacionada