系统未建立
分类: LINUX
2016-12-06 20:09:05
记录2种驱动开发编译方式
1)在linux的drivers目录添加新的驱动目录,仿造其他已有目录构造Kconfig和Makefile
2)在linux目录之外独立添加新的驱动目录,采用以下模板:
ifeq ($(obj),)
obj= .
endif
DEPTH= .
CURDIR=$(shell pwd)
epon_reg-objs = eponreg.o switch_kernel.o eponmm.o
obj-m += epon_reg.o
ifeq ($(CONFIG_ARCH_FEROCEON),y)
include $(TOPDIR)/$(MACHINE)/config/mvRules.mk
endif
all:
$(MAKE) -C $(LINUX_KERNEL_PATH) CROSS_COMPILE=$(CROSS_COMPILER_KERNEL_PREFIX) SUBDIRS=$(shell pwd) modules
----------------------------------------------------------------------------------------
主要是all的编译语句,编译时会先切换到linux目录执行linux下 的Makefile,通过参数SUBDIRS和modules来表明以模块方式编译SUBDIRS目录,
linux下的scripts/Makefile.modpost被“linux下 的Makefile”引用,其中会include当前要编译模块的Makefile
# Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \
$(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile)
endif
这是linux内核提供的独立模块编译方式