Arch Linux에서 커널 모듈 컴파일

Arch Linux에서 커널 모듈 컴파일

저는 현재 linux-3.0-ARCH에서 Arch Linux를 실행하고 있으며 linux-2.6.22.14용으로 작성된 커널 모듈을 컴파일하고 싶습니다.

저는 미리 구성된 데비안에서만 커널 모듈을 컴파일했습니다. 따라서 내가 알아야 할 것은 커널 소스가 어디에 있는지 그리고 그에 따라 모듈의 Makefile을 편집하는 방법입니다.

하지만 지금 내 컴퓨터에서 이 작업을 시도하고 있으므로 2.6.22.14의 소스 코드를 다운로드하여 /root/에 넣었습니다. 이 파일을 가리키도록 모듈의 Makefile을 변경하고 "make"를 실행했습니다. 내가 지금 얻는 것은 다음과 같습니다.

Makefile:1443: *** mixed implicit and normal rules. Stop.

누군가가 이 커널 소스 코드를 컴파일해야 한다고 말한 적이 있습니다. 그렇다면 소스 코드 대신 여기에 삽입하여 컴파일된 버전을 얻는 더 쉬운 방법이 있습니까?

답변1

커널 헤더 패키지가 누락되었을 수 있습니다.pacman -S linux-headers

그러면 적절한 커널 헤더가 제공됩니다.

답변2

모듈은 3.0 부근의 Linux 커널에서 제대로 실행되지 않을 수 있습니다. 예를 들어 스케줄러는 2.6.23에서 크게 수정되었습니다. 모듈이 스케줄러 환경에 대해 몇 가지 가정을 할 수도 있고 그렇지 않을 수도 있지만 최신 시스템에서 작동한다는 보장은 없습니다.

구성 및 빌드되지 않은 커널 소스 트리에 대해서는 모듈을 빌드할 수 없습니다. 가장 간단한 방법은 /lib/modules/$(uname -r)/build/대부분의 배포판에서 제공하는 커널 패키지에서 제공하는 심볼릭 링크를 사용 하고 외부 모듈을 구축하는 데 충분한 헤더와 구성 자료를 제공하는 것입니다.

현재 커널에 대한 모듈을 빌드하려면 디렉터리를 모듈의 소스 디렉터리로 변경하고 다음 명령을 실행하세요.

make -C /lib/modules/`uname -r`/build M=$PWD

그러면 모듈을 올바르게 빌드하기 위해 kbuild 메커니즘이 호출됩니다. 자세한 내용은 Documentation/kbuild/modules.txt커널 소스 코드를 참조하세요.

답변3

2.6.22 커널이 너무 오래되어 3.0과 호환되지 않습니다.

관련 정보