1. 程式人生 > >編譯核心模組之 Makefile

編譯核心模組之 Makefile

<pre name="code" class="html"><pre name="code" class="html">#makefile for kernel module 

MODNAME = hello #你要編譯的模組名 #如果已經定義KERNELRELEASE,則說明是從核心構造系統呼叫的,#因此科利用其內建語句ifneq ($(KERNELRELEASE),)<span id="transmark"></span> obj-m := $(MODNAME).o#否則,是直接從命令列呼叫的#這時要呼叫核心構造系統else KERNELDIR ?= /lib/modules/$(shell uname -r)/build
endifpwd := $(shell pwd)default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
    @rm -rf *.o *.ko *.mod.* .$(MODNAME).* .tmp* module* Module*



#另一種方法,其實都是一個道理
#makefile for kernel module                                                                                        
MODNAME = chardevicedriver
PLATFORM=PC
ifeq ($(PLATFORM),PC)
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
else
    KERNELDIR ?= /usr/src/$(shell uname -r) #如果說是交叉編譯,可以改成自己的核心路徑,把PLATFORM那行註釋掉就可以了
endif
 
obj-m := $(MODNAME).o
 
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
 
clean:
    @rm -rf *.o *.ko *.mod.* .$(MODNAME).* .tmp* module* Module*



就是用這個makefile呼叫核心目錄中Makefile編譯你寫的helloworld模組