linux内核模块开发编译

680阅读 0评论2016-12-06 wzzushx
分类:LINUX

记录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内核提供的独立模块编译方式

上一篇:linux中attribute使用详解[转]
下一篇:库-libuv 和 libev的对比