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
../