Linux 커널 외부 모듈 구축 프로세스에 대한 몇 가지 질문

Linux 커널 외부 모듈 구축 프로세스에 대한 몇 가지 질문

외부 모듈 구축을 위한 Linux 커널 문서 페이지(https://www.kernel.org/doc/Documentation/kbuild/modules.txt) 이렇게 말합니다.

=== 2. 외부 모듈 구축 방법

외부 모듈을 빌드하려면 빌드에 사용되는 구성 및 헤더 파일을 포함하는 사전 빌드된 커널이 있어야 합니다. 또한 커널은 모듈이 활성화된 상태로 구축되어야 합니다. distro 커널을 사용하는 경우 distro는 실행 중인 커널에 대한 패키지를 제공합니다.

또 다른 방법은 "make" 타겟 "modules_prepare"를 사용하는 것입니다. 이렇게 하면 커널에 필요한 정보가 포함됩니다. 이 타겟은 외부 모듈을 구축하기 위해 커널 소스 트리를 준비하는 간단한 방법으로만 존재합니다.

내 질문은 다음과 같습니다.

  1. 외부 모듈을 구축하려면미리 빌드된 커널이 있어야 합니다.빌드에 사용되는 구성 및 헤더 파일이 포함된 사용 가능한 파일

"사전 빌드된 커널"이란 컴파일된 바이너리 이미지(일반적으로 vmlinux/vmlinuz라는 이름)를 의미합니까? 왜 바이너리 이미지가 필요한가요? 구성 파일, 헤더 파일, 컴파일러만으로 충분하지 않나요?

  1. 외부 모듈을 빌드하려면 사전 빌드된 커널을 사용할 수 있어야 합니다.구성 및 헤더 파일이 포함되어 있습니다.빌드에 사용됩니다.

사전 빌드된 커널이 바이너리 이미지를 의미한다면 "구성 및 헤더 파일 포함"은 무엇을 의미합니까? 소스 트리에 "구성 및 헤더 파일을 포함"해야 한다는 점은 이해할 수 있지만 바이너리의 경우 이러한 파일은 빌드 지침에만 사용되는 것입니다. 그렇다면 "포함"이란 무엇을 의미합니까? "사전 빌드된 커널"은 커널의 전체 소스 트리를 빌드한다는 의미입니까?

  1. 또한 커널은 다음과 같아야 합니다.모듈 구축 활성화.

여기서 "모듈 만들기" 단계를 언급하고 있는 건가요, 아니면 뭔가 다른 건가요?

  1. 배포 커널을 사용하는 경우패키지가 있을 거예요실행 중인 커널의 경우 배포판에서 제공됩니다.

나는 그들이 여기에서 커널 빌드 프로세스 중에 사용되는 헤더와 구성 파일을 제공하는 kernel-devel 패키지를 언급하고 있다고 생각합니다. 그렇죠?

  1. 또 다른 방법은 "make" 타겟 "modules_prepare"를 사용하는 것입니다. 이렇게 하면 커널에 필요한 정보가 포함됩니다.

무슨 뜻이에요? 이것은 소스 디렉토리에서 "make module_prepare"를 수행하면 커널 바이너리를 빌드하지 않고도 외부 모듈을 빌드할 수 있다는 의미입니까?

답변1

광고 1. 및 2. 커널 이미지는 vmlinux라고 합니다. 그렇습니다. 하지만 외부 모듈을 빌드할 때 실제로 필요한 것은 아닙니다. 이것은구성 및 헤더 파일이 커널에서 필요한 것을 얻으십시오.

광고 3. 내부 또는 외부 모듈을 빌드하려면 해당 커널에서 로드 가능한 모듈을 지원해야 하며, 물론 이에 대한 모듈을 빌드하려면 커널을 __modulesenabled_로 구성해야 합니다.

커널은 .config커널 소스 트리에서 파일을 생성하거나 $KBUILD_OUTPUT트리 외부 빌드를 위한 경로를 생성하는 데 도움이 되는 구성 프로그램 중 하나로 구성됩니다.

ad 4. 그러한 패키지를 어디서 찾을 수 있는지, 이름이 어떻게 지정되는지는 배포판에 따라 다르지만 일반적으로 kernel-devel.나는 수년 동안 내 자신의 커널 트리를 사용해 왔기 때문에 실제로는 모릅니다.

광고 5. 예, 실제로 외부 모듈을 컴파일하는 데 커널 바이너리가 필요하지 않지만 아래 설명을 표시하지 않았습니다.

참고: "modules_prepare"는 CONFIG_MODVERSIONS가 설정된 경우에도 Module.symvers를 빌드하지 않습니다. 따라서 모듈 버전 관리가 작동하려면 전체 커널 빌드를 수행해야 합니다.

대부분의 커널은 CONFIG_MODVERSIONS를 사용한다고 생각합니다. 파일 .config에서 이를 볼 수 있습니다.

$ grep MODVERSIONS .config
CONFIG_MODVERSIONS=y

즉, 빌드한 모듈은 빌드한 커널 버전 및 구성에서만 작동합니다.

따라서 해당 커널 및 커널 버전에 대한 모듈을 빌드할 수 있지만 해당 커널 및 커널 버전 없이는 실행할 수 없습니다.

이것이 배포 커널을 빌드하는 커널 구성 및 헤더 파일을 설치하는 경우 전체 커널 소스 트리 없이 배포 커널용 외부 모듈을 빌드할 수 있는 이유입니다.

실제로는 대부분 실행 중인 시스템의 커널용 외부 모듈을 빌드하려고 합니다. 커널 소스 트리에서 직접 커널을 빌드하는 경우 해당 커널과 일치하는 커널 구성 및 헤더 파일이 이미 있을 것입니다.

distro 커널을 실행 중인 경우 distro에서 이 파일을 설치해야 합니다.

관련 정보