
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_vfat
incluye linux/fd.h
para 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, ¶m);
Probablemente podrías eliminar lo relevante #include
y 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.