
我正在為嵌入式設備建立 busy-box 和 iptables,它們的依賴項之一是核心標頭。
我在整個文件系統中搜尋了 *.ko 文件,但沒有找到。所以我得出結論,這些應用程式沒有創建任何可載入驅動程式(核心模組)。
用戶空間應用程式需要內核頭檔的其他情況是什麼?
答案1
因為這些程式是為了使用內核頭檔中定義的內容而建構的:
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 */
....
對於每個特定的工具,您需要閱讀該工具的原始程式碼和相關的核心頭檔才能弄清楚到底是什麼。
您可以看到一些註釋,以使其變得容易。
例如,mkfs_vfat
包括linux/fd.h
獲取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);
您可能可以刪除相關內容#include
並觀察編譯器錯誤以使其更容易,您會收到一些警告,指出某些內容未定義。這些東西可能來自內核頭。