도와주세요!!
제가 보는 디바이스 드라이버의 Makefile은 아래와 같습니다.
================ Makefile =============================
#
# kernel 2.6 driver Makefile
#
obj-m := dev_gpio.o
KDIR := /staff/kernel/s3c2440/linux-2.6.21
PWD := $(shell pwd)
APP = app_gpio
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
arm-linux-gcc -o $(APP) $(APP).c
clean :
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
rm -rf *.o
========================================================
디바이스 드라이버 소스를 보면 include 하는 부분이 있습니다.
================ 디바이스 드라이버 소스 include 부분 ===========
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <asm/ioctl.h>
========================================================
위의 include부분에서 ioctl.h는 어느 위치의 ioctl.h를 가져오는 것인가요?
제 생각엔 제가 arm 2440용을 만든다면 아래 그림처럼 linux폴더 밑에 include폴더의 asm-arm을 참조할 것이라고 생각은 하지만
#include <asm/ioctl.h>는 asm-arm이라고 지정을 하지 않고 단지 asm이라고만 지정했습니다.
#include <asm/ioctl.h>는 어떤 위치의 ioctl.h를 참조하는 것인가요?
리눅스는 .config 파일을 통해 필요한 소스코드를 포함할지를 결정합니다.
파일에 보시면 프로세서에 대한 정의 부분도 있을 겁니다.
(ex 프로세서가 arm으로 설정되어 있으면 arm쪽 해더파일들을 참조 합니다.)