Linux 커널에서 일부 "asm", "생성" 헤더 파일의 소스를 찾을 수 없습니까?

Linux 커널에서 일부 "asm", "생성" 헤더 파일의 소스를 찾을 수 없습니까?

그래서 저는 커널 공간에서 작동하는 모듈을 작성하고 있습니다. 내 코드는 올바르게 컴파일되고 정상적으로 작동합니다.

문제는 어디에서도 찾을 수 없는 일부 헤더 파일이 있다는 것입니다. 헤더 파일이 없을 때 왜 모든 것이 잘 작동하는지 이해가 되지 않습니다. 어딘가에 존재해야 합니다.

다음은 어디에서도 찾을 수 없는 일부 헤더 파일입니다(더 많은 것이 있지만 내 문제에는 이것만으로도 충분할 것입니다).

#include <asm/errno.h>
#include <asm/socket.h>  /* /include/linux/socket.h */
#include <stdarg.h>      /* /include/linux/kernel.h */
#include <asm/types.h>
#include <asm/mmiowb.h>  /* /include/linux/spinlock.h */
#include <asm/param.h>   /* /include/linux/jiffies.h */

일부 헤더 파일은 다른 아키텍처에서 찾을 수 있지만 x86이것이 문제를 해결한다고 생각하지 않습니다.

이 파일을 어디서 찾을 수 있는지 모르겠습니다.

#include <generated/timeconst.h>    /* /include/linux/jiffies.h */
#include <generated/bounds.h>
#include <generated/autoconf.h>     /* /include/linux/kconfig.h */
#include <generated/asm-offsets.h>

다음 디렉토리에서 이 파일을 찾고 있습니다.리눅스 커널 5.4.31:

/include
/include/uapi
/arch/x86/include
/arch/x86/include/uapi

위의 포함 경로에서 이 파일을 찾으려고 합니다. 그러나 컴파일 후 Linux 헤더 파일을 소스 코드에서 찾았기 때문에 어디서 어떻게 처리해야 하는지 잘 모르겠습니다.

답변1

빌드에서 사용되는 헤더 파일을 찾을 수 있습니다 /lib/modules/$(uname -r)/build/. 예를 들어 다음을 참조하세요.

find /lib/modules/$(uname -r)/build/ -name timeconst.h

이러한 파일은 모두 빌드 프로세스 중에 다양한 방식으로 생성 timeconst.h됩니다 kernel/time/timeconst.bc.

/lib/modules/$(uname -r)/build/실행 중인 커널에 해당하는 생성된 헤더(및 기타 파일)를 저장합니다. 이는 외부 모듈 빌드에 특별히 사용할 수 있도록 하는 것입니다. 새 커널을 빌드하는 경우 빌드 트리(커널 빌드 또는 트리 내 모듈 빌드 후)에서 생성된 파일을 찾을 수 있습니다.

관련 정보