2008-12-08 17 views
7

एकाधिक .c फ़ाइलों के साथ कर्नेल मॉड्यूल को संकलित करने के लिए मेकफ़ाइल को व्यवस्थित करने के लिए कैसे करें?एकाधिक .c फ़ाइलों के साथ कर्नेल मॉड्यूल को संकलित करने के लिए मेकफ़ाइल को व्यवस्थित करने के लिए कैसे करें?

यहां मेरा वर्तमान मेकफ़ाइल है। यह ऑटो से KDevelop

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 [email protected] $(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 

उत्तर

4

जनरेट किया गया था मुझे लगता है कि ग्रहण करेंगे सिर्फ दूसरी पंक्ति चाल करना होगा में अधिक वस्तु फ़ाइलों लिस्टिंग।

3

$ (TARGET) के लिए निर्भरता .o कई ऑब्जेक्ट फ़ाइलें हो सकती हैं, एक आपके ड्राइवर में प्रत्येक स्रोत फ़ाइल के लिए। ओबीजेएस की शुरुआती घोषणा के बाद कई अन्य ड्राइवर + = ऑपरेटर का उपयोग करते हैं। उदाहरण के लिए,

OBJS = nlb-driver.o 
OBJS += file1.o 
OBJS += file2.o 
... 

लक्ष्य नियम तो विस्तार

$(TARGET).o: nlb-driver.o file1.o file2.o 
    $(LD) $(LD_RFLAG) -r -o [email protected] $(OBJS) 

यह अच्छा है अगर वहाँ आराम से एक लाइन पर फिट की तुलना में अधिक स्रोत फ़ाइलें हैं होगा। लेकिन अगर फ़ाइलों की केवल एक छोटी संख्या रहे हैं, आप भी सभी वस्तुओं एक पंक्ति

OBJS = nlb-driver.o file1.o file2.o 
1

मेरे मामले में परियोजना 6 फ़ाइलों के होते हैं पर परिभाषित कर सकते हैं:

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

monter_main.c मेरे मॉड्यूल की मुख्य फ़ाइल है।

याद रखें कि आपके पास जिस मॉड्यूल को बनाने का प्रयास कर रहे हैं, उसी मॉडल के साथ फ़ाइल नहीं होनी चाहिए (उदा। monter.c और monter.ko) जब तक कि आपको उस फ़ाइल में सभी कोड नहीं मिलते।

यहाँ मेरी Makefiles हैं:

  • 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 
    
+0

डब्ल्यू हाय में दो अलग-अलग फाइलें हैं 'मेकफ़ाइल' और 'कबिल्ड'? –

संबंधित मुद्दे