Bởi vì các chương trình đó được xây dựng để sử dụng những thứ được xác định trong các tiêu đề 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 */
....
Đối với mỗi công cụ cụ thể, bạn cần đọc nguồn của công cụ và tiêu đề hạt nhân có liên quan để tìm ra chính xác những gì.
Bạn có thể thấy một vài điều được bình luận để làm cho nó dễ dàng.
Ví dụ: mkfs_vfat
bao gồm linux/fd.h
để có được 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);
Bạn có thể có thể loại bỏ các lỗi liên quan #include
và theo dõi các lỗi biên dịch để dễ dàng hơn, bạn sẽ nhận được cảnh báo rằng một số điều không được xác định. Những thứ đó có thể đến từ các tiêu đề kernel.