Pourquoi les applications d'espace user ont-elles besoin d'en-têtes de kernel?

Je suis en train de build des boîtiers busy et iptables pour un périphérique embarqué et l'une des dependencies pour eux sont les en-têtes du kernel.

J'ai cherché dans tout le système de files pour les files * .ko et n'en ai trouvé aucun. J'ai donc conclu que les applications ne créaient aucun pilote chargeable (modules du kernel).

Quels sont les autres cas où une application d'espace user requirejs des en-têtes de kernel?

Parce que ces programmes sont conçus pour utiliser les éléments définis dans les en-têtes du 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 */ .... 

Pour chaque outil spécifique, vous devez lire la source de l'outil et l'en-tête correspondant du kernel pour savoir exactement quoi.

Vous pouvez voir quelques choses sont commentées pour le rendre facile.

Par exemple, mkfs_vfat inclut linux/fd.h pour get 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); 

Vous pouvez probablement supprimer le #include pertinent et searchr les erreurs du compilateur pour le rendre plus facile, vous obtiendrez des avertissements que certaines choses ne sont pas définies. Ces choses proviennent probablement des en-têtes du kernel.