2017-03-17 3 views
1

하나의 Makefile을 실행하여 여러 개의 커널 모듈을 만들고 싶습니다.다른 하위 디렉토리에 여러 개의 커널 모듈 만들기/빌드

I이 디렉토리와 파일 다음

  • 최상위 디렉토리 :
    • subdir0 :
      • module0.c
      • 메이크
    • 디렉토리 subdir1 :
      • module1.c
      • 메이크
    • subdir2 :
      • module2.c
      • 메이크
    • 메이크 (I이를 실행하려는)

최상위 디렉토리의 Makefile 만 실행하고 모든 하위 디렉토리 Makefile을 실행해야합니다. 각각의 서브 디렉토리에 대해 하나의 커널 모듈을 얻고 싶습니다.

이것은 현재 설정이지만 작동하지 않습니다. 하위 디렉토리 내부에서 make를 실행하면 올바른 * .ko 파일이 작성됩니다. 그러나 최상위 Makefile을 실행하면 Module.symvers 및 modules.order가 생성되고 모든 Makefile이 실행되는 것처럼 보이지만 하위 디렉토리에는 아무 것도 생성되지 않습니다.

내 최고 수준의 메이크 파일은 다음과 같은 내용이 있습니다

obj-m += module0.o 

all: 
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean: 
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

누군가가 나를 도울 수 있다면 내가 기쁠 :

TARGETS := all clean 
SUBDIRS := subdir0 subdir1 subdir2 

.PHONY: $(TARGETS) $(SUBDIRS) 

$(TARGETS): $(SUBDIRS) 

$(SUBDIRS): 
    $(MAKE) -C [email protected] $(MAKECMDGOALS) 

내 하위 디렉토리 메이크는 다음과 같은 코드가 있습니다.

감사합니다, 미샤 @ 0andriy으로

+1

toplevel * Makefile *과 유사하지만'obj-y + = subdir0 /'등을 사용하십시오. – 0andriy

+0

고마워요.) – p0kR

+1

@ 0andriy 그게 바로 제가 원했던 것입니다. 정말 고마워요. 답변으로 작성했다면 받아 들였습니다. :) – p0kR

답변

0

내가 하위 디렉토리 메이크 유사한 Makefile을 사용했다 고 말했다. obj-m 항목을 추가하는 대신 모든 하위 디렉토리를 obj-y에 추가했습니다.