Warum benötigen User-Space-Apps Kernel-Header?

Warum benötigen User-Space-Apps Kernel-Header?

Ich erstelle Busy-Box und Iptables für ein eingebettetes Gerät und eine der Abhängigkeiten hierfür sind die Kernel-Header.

Ich habe das gesamte Dateisystem nach *.ko-Dateien durchsucht und keine gefunden. Daraus schließe ich, dass die Apps keine ladbaren Treiber (Kernelmodule) erstellen.

In welchen anderen Fällen sind für eine Userspace-Anwendung Kernel-Header erforderlich?

Antwort1

Weil diese Programme so erstellt werden, dass sie Dinge verwenden, die in den Kernel-Headern definiert sind:

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 */
....

Für jedes spezifische Tool müssen Sie den Quellcode des Tools und den relevanten Kernel-Header lesen, um genau herauszufinden, was es ist.

Sie sehen, dass einige Dinge zur Vereinfachung kommentiert sind.

Zum Beispiel mkfs_vfatbeinhaltet linux/fd.hdas Abrufen von 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);

Sie könnten wahrscheinlich das Relevante entfernen #includeund auf Compilerfehler achten, um es einfacher zu machen. Sie erhalten Warnungen, dass einige Dinge nicht definiert sind. Diese Dinge stammen wahrscheinlich aus den Kernel-Headern.

verwandte Informationen