如何安排Makefile来编译具有多个.c文件的内核模块?

2024-03-01

如何安排Makefile来编译具有多个.c文件的内核模块?

这是我当前的 Makefile。它是由自动生成的KDevelop http://www.kdevelop.org/

TARGET = nlb-driver
OBJS = nlb-driver.o
MDIR = drivers/misc

EXTRA_CFLAGS = -DEXPORT_SYMTAB
CURRENT = $(shell uname -r)
KDIR = /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m += $(TARGET).o

default:
    make -C $(KDIR) M=$(PWD) modules

$(TARGET).o: $(OBJS)
    $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

ifneq (,$(findstring 2.4.,$(CURRENT)))
install:
    su -c "cp -v $(TARGET).o $(DEST) && /sbin/depmod -a"
else
install:
    su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"
endif

clean:
    -rm -f *.o *.ko .*.cmd .*.flags *.mod.c
    make -C $(KDIR) M=$(PWD) clean

-include $(KDIR)/Rules.make

就我而言,该项目由 6 个文件组成:

  • monter_main.c, monter_main.h
  • monter_cdev.c, monter_cdev.h
  • monter_pci.c, monter_pci.h

monter_main.c是我的模块的主文件。

请记住,您不应拥有与您尝试构建的模块同名的文件(例如monter.c and monter.ko)除非您在该文件中包含了所有代码。

这是我的 Makefile:

  • Makefile

    KDIR ?= /lib/modules/`uname -r`/build
    
    default:
        $(MAKE) -C $(KDIR) M=$$PWD
    
    install:
        $(MAKE) -C $(KDIR) M=$$PWD modules_install
    
    clean:
        $(MAKE) -C $(KDIR) M=$$PWD clean
    
  • Kbuild

    obj-m := monter.o
    monter-objs := monter_main.o monter_cdev.o monter_pci.o
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何安排Makefile来编译具有多个.c文件的内核模块? 的相关文章

随机推荐