Organização dos cabeçalhos do kernel do Linux

8

Enquanto eu fazia algumas leituras nas chamadas do sistema, fiz uma pesquisa por "syscalls.h" para encontrar o arquivo de cabeçalho no LXR. Os resultados da pesquisa me intrigaram. Há uma dúzia de arquivos "syscalls.h" vindos de diretórios em "arch / _arch_name_ / include / asm". Tudo bem, são definições específicas de arquitetura ou algo mais necessário. A questão é por que temos dois cabeçalhos "syscalls.h" diferentes em / include / linux e / include / asm-generic?

Além disso, quero descobrir quais são os cabeçalhos / include / linux e quais são os cabeçalhos genéricos / as / asm-generic. Como eles diferenciam um do outro? Qual é a lógica por trás de ter duas pastas de cabeçalho separadas? Como eles se relacionam entre si?

Obrigado

    
por dirtybit 19.03.2012 / 08:39

2 respostas

1

O software tem que ser portátil. Se você compilar suas fontes C / C ++, então você não precisa saber se está executando i386 / x86_64 / arm / mips ou o que nunca. Os cabeçalhos estão ligados de tal maneira que o software compila.

Todos os outros arquivos de cabeçalho existem porque foram implementados muitos padrões diferentes, existem portas do BSD e assim por diante. Tantos deles são historicamente baseados. De onde cada um vem e por que eles estão lá tem muitas razões diferentes e com certeza vai explodir respostas.

E uma resposta para o asm-generic: stackoverflow

    
por 15.01.2014 / 04:37
1

Os cabeçalhos sob asm/generic são principalmente usados como medidas temporárias, versões portáteis em C até que uma versão específica da arquitetura seja gravada. Você também verá que, em alguns casos, /usr/include/foobar.h inclui uma série de cabeçalhos de "implementação interna" e, finalmente, recorre a uma parte que vem do kernel, geralmente chamada de "o mesmo". Os exemplos são math.h e (mais dependente do Linux) syscall.h .

    
por 18.03.2014 / 20:21