
私は組み込みデバイス用に busy-box と iptables を構築していますが、それらの依存関係の 1 つはカーネル ヘッダーです。
ファイル システム全体で *.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
、コンパイラ エラーを監視すると、簡単になり、定義されていないものがあるという警告が表示されます。それらは、カーネル ヘッダーから来ている可能性があります。