Por que os aplicativos de espaço do usuário precisam de cabeçalhos de kernel?

10

Estou construindo o busy-box e o iptables para um dispositivo embarcado e uma das dependências para eles são os cabeçalhos do kernel.

Eu procurei em todo o sistema de arquivos por arquivos * .ko e não encontrei nenhum. Então eu concluí que os aplicativos não estão criando nenhum driver carregável (módulos do kernel).

Quais são os outros casos para um aplicativo de espaço do usuário exigir cabeçalhos de kernel?

    
por TheMeaningfulEngineer 07.10.2014 / 08:56

1 resposta

8

Porque esses programas são criados para usar coisas definidas nos cabeçalhos do 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 */
....

Para cada ferramenta específica, você precisaria ler a origem da ferramenta e o cabeçalho do kernel relevante para descobrir exatamente o quê.

Você pode ver algumas coisas que são comentadas para facilitar.

Por exemplo, mkfs_vfat inclui linux/fd.h para obter 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);

Você provavelmente poderia remover o #include relevante e aguardar erros do compilador para facilitar, você receberá avisos de que algumas coisas não estão definidas. Essas coisas provavelmente vêm dos cabeçalhos do kernel.

    
por 07.10.2014 / 10:06