Usando cabeçalhos de kernel em tempo real para compilar cabeçalhos de código do vs de código do usuário

11

De acordo com os requisitos do cliente, instalei o CentOS 5.6 com o kernel padrão. Com este kernel instalado, o arquivo time.h inclui o #define CLOCK_MONOTONIC .

Agora, um kernel em tempo real foi instalado junto com o kernel-devel e nosso código gostaria de usar CLOCK_MONOTONIC_RAW . Ele existe como parte dos arquivos de cabeçalho do kernel, mas quando eu compilo nosso código, ele não o encontra nos includes padrão do espaço do usuário.

Minha pergunta é, qual é o procedimento adequado para incluir / substituir o time.h encontrado por padrão com o kernel em tempo real? Da minha pesquisa, parece que os links simbólicos são ruins, então, como ele deve ser tratado? Qual é o procedimento ou processo? A atualização para o CentOS 6.0 ou 5.7 não é uma opção para os requisitos do cliente.

    
por cabanaboy 04.01.2012 / 22:46

4 respostas

1

Há uma distinção importante a ser feita sobre o local de origem dos arquivos de cabeçalho:

  • <time.h> é fornecido pela glibc (por exemplo, o pacote glibc-headers )
  • <linux/time.h> é fornecido pelos cabeçalhos do kernel do Linux.

A alteração do kernel e de seus pacotes de cabeçalho não afetará <time.h> . Apenas mudar a glibc fará isso.

Você deve descobrir que <time.h> da glibc inclui <bits/time.h> , que é resolvido como, por exemplo, /usr/include/x86_64-linux-gnu/bits/time.h e define CLOCK_MONOTONIC_RAW . Se não, e você não pode atualizá-lo, então você terá que recorrer a incluir código como este:

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif
    
por 09.06.2015 / 18:32
0

Você só precisa #include <linux/time.h>

    
por 05.01.2012 / 00:32
0

Os cabeçalhos que sua distribuição instala são não os do kernel, eles são versões sanitzed / "userspaced". Você teria que obter uma cópia dos cabeçalhos em include / linux nos fontes do kernel e configurá-los para que eles sejam usados em preferência aos que estão em / usr / include / linux (é necessário frobar o sinalizador -I do gcc). E verifique se nada falha.

    
por 09.02.2013 / 00:22
0

Eu me certificaria de estar construindo contra os cabeçalhos que vieram com o novo kernel. CLOCK_MONOTONIC_RAW deve ser definido em linux/time.h . Primeiro, descubra quais cabeçalhos você está usando e verifique como eles estão definidos no arquivo. Você pode defini-lo em seu código (apenas como um cheque) para ver o que acontece.

    
por 13.02.2014 / 19:07