2013-01-16 4 views
2

helloworld 모듈을 만들려고합니다. 나는 아래와 같이 makefile을 써야한다.Linux 커널 모듈 프로그래밍 Makefile

ifneq ($(KERNELRELEASE),) 
obj-m := hello.o 
else 
KDIR := /path/to/kernel/sources 
all: 
    make -C $(KDIR) M= 'pwd' modules 
endif 

이 메이크 파일이 두 번 실행됩니다. 한 번만 호출하여 두 번 실행하는 방법은 무엇입니까?

여기서 obj-m 값은 언제 사용됩니까? 영어

all: 
    make -C $(KDIR) M= 'pwd' modules 

: "디렉토리 $(KDIR)에 가서 메이크업을 실행 (대상 modules입니다)"

+0

필자는 파일 내용 형식을 정리하기 위해 편집을 완료했습니다 (피어 리뷰를 기다리고 있습니다). 확인하기 전에 호출하기 전에 원본 파일 (탭 (공백 제외) 포함)처럼 보이는지 확인하십시오. – altendky

답변

4

이 메이크는 하나의 규칙이있다. 이 makefile을 사용하여 만들기를 호출

그래서, 그것은를 발동 다른 메이크 파일을 사용 할 때.

더 간단한 것으로 시작해야합니다. 당신이하려는 일을 우리가 말해 준다면 우리는 도울 수 있습니다.

+0

감사합니다. 나는 그 생각을 가지고있다. 그러나 두 번째로는 다른 메이크 파일 (최상위 메이크 파일)을 호출합니다. 그러면이 makefile의 obj-m은 언제 실행됩니까? – Gomathi

+0

@Gomathi : 그림과 같이 * $ (KERNELRELEASE) 중 하나가 비어있는 경우 obj-m이 설정되거나 언급되지 않거나 $ (KERNELRELEASE)가 비어 있지 않습니다. 어떤 경우에는 obj-m이 설정되지만 사용되지 않습니다 (규칙이 없기 때문에 Make가 불평하고 종료합니다). – Beta

+0

설명 주셔서 감사합니다! – Gomathi

0

이 파일 에 하나의 규칙이 있지만 아마도 KERNELRELEASE이 비어있는 것으로 보입니다. KERNELRELEASE하지 비어있는 경우 obj-m은이 경우 Makefile 정말 중 하나 ... 내가 obj-m이 (KERNELRELEASE을 정의 한 후)이 Makefile을 포함하여 커널에 의해 사용됩니다 같은데요 아무것도하지 않습니다 정의됩니다 동적으로로드 된 모듈이 아닌 커널에 실제로 빌드하는 경우에 해당합니다.

관련 문제