[블로그 통합으로 이전해 온 자료] - 2008. 4. 24. 01:41
ifneq ($(KERNELRELEASE),)
xxx-objs := main.o utils.o proc.o
obj-m := xxx.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
defualt:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module.symvers
- 단일 파일로 module을 만들 때는 xxx-objs 없이 obj-m 하나만 존재하면 된다.
- 여러개의 파일로 module을 만들 때는 obj-m에 최종적으로 생성할 module의 파일명 *.ko 가 *.o 형태로 입력되고 xxx-objs 에 obj-m에서 입력한 이름을 xxx 대신 입력하고 필요한 오브젝트 파일들을 나열해주면 된다. 여기에 나열되는 오브젝트 파일에는 obj-m 에 들어간 파일 이름이 존재해서는 안된다.
- 다른 타겟의 module을 만들 때는 kernel 소스의 Makefile에 ARCH 와 CROSS_COMPILE 이 미리 정의되어 있어야 하고 KERNELDIR 이 이 소스의 디렉토리가 되어야 한다.
'실습 > 리눅스 커널' 카테고리의 다른 글
커널 타이머, 태스크릿, 작업큐 (0) | 2021.02.08 |
---|---|
드라이버 코드의 실행 지연 (0) | 2021.02.08 |
커널에서 Blocking I/O (0) | 2021.02.08 |
커널에서 condition race 제거 (0) | 2021.02.08 |
Kernel Module - template (0) | 2021.02.08 |