編譯核心模組之 Makefile
阿新 • • 發佈:2019-02-15
<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模組