실시간 커널 헤더와 기본 헤더를 사용하여 사용자 공간 코드 컴파일

실시간 커널 헤더와 기본 헤더를 사용하여 사용자 공간 코드 컴파일

고객 요청에 따라 기본 커널과 함께 CentOS 5.6을 설치했습니다. 이 커널을 설치한 후 time.h 파일에는 #define CLOCK_MONOTONIC.

이제 실시간 커널은 우리 코드에서 사용하려는 커널 개발과 함께 설치됩니다 CLOCK_MONOTONIC_RAW. 커널 헤더의 일부로 존재하지만 코드를 컴파일할 때 표준 사용자 공간 포함에서 찾을 수 없습니다.

time.h내 질문은 라이브 커널을 사용하여 기본적으로 발견되는 것을 포함/교체하는 올바른 절차는 무엇입니까? 내 연구에 따르면 심볼릭 링크가 좋지 않은 것 같습니다. 그러면 이에 대해 어떻게 해야 합니까? 절차나 절차는 무엇입니까? CentOS 6.0 또는 5.7로의 업그레이드는 고객 요구 사항에 따른 옵션이 아닙니다.

답변1

헤더 파일 소스에는 주요 차이점이 있습니다.

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

커널과 헤더 패키지를 변경해도 아무런 효과가 없습니다 <time.h>. glibc를 변경해야만 이 작업을 수행할 수 있습니다.

<time.h>glibc의 include <bits/time.h>가 eg로 확인되고 /usr/include/x86_64-linux-gnu/bits/time.h정의된 것을 확인해야 합니다 CLOCK_MONOTONIC_RAW. 그렇지 않고 업그레이드할 수 없다면 다음과 같은 코드를 포함해야 합니다.

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

답변2

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

답변3

배포판에서 설치한 헤더는 다음과 같습니다.아니요커널의 버전은 클린/"사용자 공간" 버전입니다. 커널 소스에서 include/linux의 헤더 사본을 가져와서 /usr/include/linux의 헤더보다 우선적으로 사용되도록 설정해야 합니다(gcc에 대해 -I 플래그를 제거해야 함). 그리고 불이 없는지 확인하세요.

답변4

새 커널과 함께 제공되는 헤더를 기반으로 빌드하겠습니다. 먼저 어떤 헤더를 사용하고 있는지 알아보고 파일에 어떻게 정의되어 있는지 확인하세요 CLOCK_MONOTONIC_RAW. linux/time.h코드에서 이를 정의하여(검사처럼) 무슨 일이 일어나는지 확인할 수 있습니다.

관련 정보