실시간 커널 헤더를 사용하여 사용자 공간 코드와 기본 헤더 컴파일 요구 사항에 따라 기본 커널과 함께 CentOS

고객 요구 사항에 따라 기본 커널과 함께 CentOS 5.6을 설치했습니다. 이 커널을 설치하면 time.h 파일에 #define CLOCK_MONOTONIC.

이제 실시간 커널이 kernel-devel과 함께 설치되었으며 코드에서 사용하고 싶습니다 CLOCK_MONOTONIC_RAW. 커널 헤더 파일의 일부로 존재하지만 코드를 컴파일 할 때 표준 사용자 공간 포함에서 찾을 수 없습니다.

내 질문은, time.h실시간 커널로 기본적으로 찾은 것을 포함 / 교체하는 올바른 절차는 무엇 입니까? 내 연구에서 심볼릭 링크가 나쁜 것처럼 보이므로 어떻게 처리해야합니까? 절차 또는 프로세스는 무엇입니까? CentOS 6.0 또는 5.7로 업그레이드하는 것은 고객 요구 사항에 따른 옵션이 아닙니다.



답변

헤더 파일의 출처는 다음과 같습니다.

  • <time.h>glibc (예 : glibc-headers패키지)에서 제공
  • <linux/time.h> Linux 커널 헤더에 의해 제공됩니다.

커널과 헤더 패키지를 변경해도 영향을 미치지 않습니다 <time.h>. glibc 만 변경하면됩니다.

당신은 glibc의 <time.h>include <bits/time.h>가 eg /usr/include/x86_64-linux-gnu/bits/time.h와 define 으로 해결됨을 발견해야 한다 CLOCK_MONOTONIC_RAW. 그렇지 않은 경우 업그레이드 할 수없는 경우 다음과 같은 코드를 포함해야합니다.

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif

답변

당신은 단지 필요 #include <linux/time.h>


답변

배포판이 설치하는 헤더 는 커널 의 헤더가 아니며 , sanitzed / “userspaced”버전입니다. 커널 소스에서 include / linux에있는 헤더 사본을 가져 와서 / usr / include / linux에있는 헤더에 우선하여 사용되도록 설정해야합니다 (gcc의 경우 -I 플래그가 필요). 그리고 잘못된 것이 없는지 확인하십시오.


답변

새 커널과 함께 제공되는 헤더를 작성하고 있는지 확인합니다. CLOCK_MONOTONIC_RAW에 정의되어야합니다 linux/time.h. 먼저 어떤 헤더를 사용하고 있는지 확인하고 파일에서 헤더가 어떻게 정의되어 있는지 확인하십시오. 코드에서 확인으로 만 정의하여 어떤 일이 발생하는지 확인할 수 있습니다.