Por que os cabeçalhos do kernel do Linux contêm referências a cabeçalhos inexistentes?

1

Estou tentando criar o IBCS (source here ) no Ubuntu 15.10 (Linux 4.2.35).

Este módulo é obviamente muito antigo, porque seu arquivo CONFIG.i386 fornece gcc uma opção -m486 , que não existe mais, mas mudar para -march=native parece funcionar bem.

O arquivo emulate.c contém #includes como:

#include <linux/config.h>
#include <linux/module.h>
#include <linux/version.h>
#include <asm/uaccess.h>

No meu sistema, apenas linux/version.h existe. O seguinte parece funcionar, no entanto:

#include "/usr/include/valgrind/config.h"
#include "/usr/include/sepol/module.h"
#include <linux/version.h>
#include </usr/src/linux-headers-4.2.0-35/include/linux/uaccess.h>

(YMMV, claro, se você não tiver sepol .)

Isso funciona, exceto pelo /usr/src/linux-headers-4.2.0-35/include/linux/uaccess.h , o topo do qual tem

#include <asm/uaccess.h>

O que não é encontrado.

Parece que não tenho uma pasta asm em /usr/include ou /usr/include/linux . Eu tenho um /usr/include/asm_generic , mas não tem uaccess.h .

Minhas perguntas são:

  1. Por que os cabeçalhos modernos do kernel contêm referências a arquivos (aparentemente) inexistentes, em vez de fornecê-los em si?

  2. Onde posso obter uma versão de asm/uaccess.h e os outros cabeçalhos necessários para a compilação?

por cat 21.03.2016 / 15:37

1 resposta

2

O iBCS é obsoleto, tem sido por um tempo longo . Muita coisa mudou no interior do Linux para que haja alguma chance de que isso ainda compile, mesmo em um kernel 4.x inicial. Hoje é linux-abi , mas isso está morto desde 2013. Talvez um dos módulos binfmt faça o trabalho hoje.

    
por 21.03.2016 / 19:43