나는 임베디드 장치를 위한 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
하고 컴파일러 오류를 감시하여 더 쉽게 만들 수 있으며, 무언가가 정의되지 않았다는 경고 메시지가 표시됩니다. 이 내용은 아마도 커널 헤더에서 나온 것 같습니다.