Selon les exigences du client, j'ai installé CentOS 5.6 avec le noyau par défaut. Une fois ce noyau installé, le fichier time.h inclut le fichier #define CLOCK_MONOTONIC
.
Maintenant, un noyau en temps réel a été installé avec kernel-devel et notre code aimerait l'utiliser CLOCK_MONOTONIC_RAW
. Il existe en tant que partie des fichiers d'en-tête du noyau, mais lorsque je compile notre code, il ne le trouve pas dans les espaces utilisateur standard.
Ma question est, quelle est la procédure appropriée pour inclure / remplacer le time.h
trouvé par défaut avec le noyau en temps réel? D'après mes recherches, il semble que les liens symboliques soient mauvais, alors comment les gérer? Quelle est la procédure ou le processus? La mise à niveau vers CentOS 6.0 ou 5.7 n'est pas une option selon les exigences du client.
la source
Réponses:
Il y a une distinction clé à faire sur la provenance des fichiers d'en-tête:
<time.h>
est fourni par glibc (par exemple leglibc-headers
paquet)<linux/time.h>
est fourni par les en-têtes du noyau Linux.La modification du noyau et de ses packages d'en-tête n'affectera pas
<time.h>
. Seule la glibc changeante le fera.Vous devriez trouver que la glibc
<time.h>
inclut<bits/time.h>
qui se résout par exemple/usr/include/x86_64-linux-gnu/bits/time.h
et définitCLOCK_MONOTONIC_RAW
. Si ce n'est pas le cas et que vous ne pouvez pas le mettre à niveau, vous devrez alors inclure du code comme celui-ci:la source
Vous avez juste besoin de
#include <linux/time.h>
la source
make install_headers
. Si vous avez un package de noyau mis à jour, vous devez obtenir le package kernel_headers correspondant mis à jour.Les en-têtes que votre distribution installe ne sont pas ceux du noyau, ce sont des versions contrôlées / "userpaced". Vous devriez obtenir une copie des en-têtes dans include / linux dans les sources du noyau et les configurer de manière à ce qu'ils soient utilisés de préférence à ceux dans / usr / include / linux (vous devez supprimer l'indicateur -I pour gcc). Et vérifiez si rien ne se trompe.
la source
Je m'assurerais que je construis contre les en-têtes fournis avec le nouveau noyau.
CLOCK_MONOTONIC_RAW
doit être défini danslinux/time.h
. Recherchez d'abord les en-têtes que vous utilisez et vérifiez comment ils sont définis dans le fichier. Vous pouvez le définir dans votre code (uniquement à titre de vérification) pour voir ce qui se passe.la source