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


11

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

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

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


이 모듈을 기본 CentOS 커널에 삽입 할 계획입니까?
bahamat

답변:


1

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

  • <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

0

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


답변 주셔서 감사합니다. linux / time.h 위치를 확인했는데 "RAW"에 대한 참조가 없습니다. 업데이트 된 실시간 커널을 실행하고 있지만 "RAW"에 대한 참조가있는 새 커널 헤더를 사용자 공간 헤더 파일로 전송하는 방법을 이해하면됩니다. 이해가 되나요? 아니면 접근이 올바른가요? 도와 주셔서 감사합니다.
cabanaboy

@cabanaboy, 어디에서 파일을 찾았는지 확실하지 않지만 linux / time.h는 CLOCK_MONOTONIC_RAW를 정의해야합니다. 또한 실시간 커널을 실행 중인지 여부는 중요하지 않습니다. 헤더는 동일합니다.
psusi

3
@cabanaboy, 잠깐만 ... 추가 된 2.6.28 이전의 커널과 함께 제공되었던 오래된 OS를 실행 중입니다. 새 커널을 어떻게 설치 했습니까? 소스에서 직접 작성한 경우 make install_headers. 업데이트 된 커널 패키지가있는 경우 해당 업데이트 된 kernel_headers 패키지를 가져와야합니다.
psusi

0

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


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.