커널 바이너리와 커널 모듈 빌드 소스는 어디에 있나요?

커널 바이너리와 커널 모듈 빌드 소스는 어디에 있나요?

Linux에서 커널 모듈 개발 환경을 설정하려고 합니다. 홈 폴더에 커널을 구축했으며 적절한 포함을 위해 소스와 바이너리를 올바른 위치에 배치하고 싶습니다.

커널 모듈 빌드의 예는 다음과 같습니다.

#include <linux/init.h>
#include <linux/module.h>

링커가 이러한 헤더를 찾는 절대 경로는 무엇입니까?

답변1

이것이 제가 보통 문제를 다루는 방식입니다. 저는 Fedora 19를 사용하고 있지만 locate서비스를 제공하는 모든 배포판에서 작동합니다 .

$ locate "linux/init.h" | grep include
/usr/src/kernels/3.13.6-100.fc19.x86_64.debug/include/linux/init.h
/usr/src/kernels/3.13.7-100.fc19.x86_64.debug/include/linux/init.h
/usr/src/kernels/3.13.9-100.fc19.x86_64/include/linux/init.h
/usr/src/kernels/3.13.9-100.fc19.x86_64.debug/include/linux/init.h

경로는 다양하지만 핵심은 locate포함된 항목("linux/init.h")을 찾고 해당 결과를 키워드로 필터링하는 것입니다 include.

RPM(Redhat) 또는 APT(Debian/Ubuntu)를 사용하여 이러한 위치를 검색하는 배포판별 방법도 있습니다.

걸프 협력 협의회

그러나 C/C++ 파일의 경로는 상대적이라는 점에 유의하십시오.

#include <linux/init.h>

이렇게 하면 컴파일러를 호출할 때 gcc사용하려는 포함 파일의 위치를 ​​재정의할 수 있습니다. 이는 스위치를 통해 제어됩니다 -I <dir>.

man gcc에서 발췌

   -I dir
        Add the directory dir to the list of directories to be searched for 
        header files.  Directories named by -I are searched before the 
        standard system include directories.  If the directory dir is a
        standard system include directory, the option is ignored to ensure 
        that the default search order for system directories and the special 
        treatment of system headers are not defeated .  If dir
        begins with "=", then the "=" will be replaced by the sysroot 
        prefix; see --sysroot and -isysroot.

외부 모듈

자체 커널 모듈 개발을 Linux 커널과 함께 제공되는 "빌드 환경"에 통합하는 방법을 설명하는 기사가 있습니다. 기사 제목은 다음과 같습니다.드라이버 포팅: 외부 모듈 컴파일. 이 기사에서는 커널 makefile의 구성도 소개합니다.file.txt 생성.

커널 초보자를 위한 다음 기사도 있습니다.커널 헤더 파일kernelnewbies.org 웹사이트에서 검색함.

노트:커널은 커널과 함께 제공되는 문서의 일부로 여기에 설명된 KBuild 시스템을 사용합니다.

인용하다

답변2

대답은 일반적으로 배포판별로 다릅니다. 이를 수행하는 특정 메커니즘이 있을 수 있기 때문입니다. 데비안의 경우데비안 리눅스 커널 매뉴얼. 우분투는 기본적으로 데비안이므로 이 모든 것이 적용되어야 합니다. 내가 올바르게 이해했다면 커널 설치에 대해 묻는 것입니다. 한 가지 접근 방식, 좋은 접근 방식은 커널 및 커널 헤더용 바이너리 패키지를 빌드하고 설치하는 것입니다. 이 매뉴얼에서는 그 방법을 보여줍니다. 당신은 또한 볼 수 있습니다"Debian Wheezy 커널을 오프라인으로 업그레이드하는 방법은 무엇입니까?"에 대한 나의 대답. 이 답변에는 약간의 정리가 필요합니다.

기존 Debian/Ubuntu 커널 및 커널 헤더 바이너리 패키지를 사용하는 것이 완벽하게 합리적이며 컴파일이 필요하지 않습니다.

답변3

커널에는 deb-pkg목표가 있습니다. 데비안에서는 생성된 두 패키지(in)를 모두 make deb-pkg사용하는 것이 나에게 매력적으로 작용합니다. 우분투에서도 동일하게 작동한다고 생각합니다. 이는 빌드 및 설치 시 올바른 위치에 자동으로 나타납니다.sudo dpkg -i../

관련 정보