[英]Compiling out-of-tree kernel module against any kernel source tree on the filesystem
[英]Linux kernel: build a out-of-tree module that matches the source tree version
我需要構建一個Linux內核模塊,該模塊必須與我的源代碼樹的版本匹配。
當我從源代碼樹內部構建模塊時,模塊的版本號就是我的源代碼樹之一。 但是,當我使用以下makefile從源代碼樹外部構建它時,它使用當前正在運行的內核版本。 而且我不知道如何使用內核的源代碼樹來實現。
ifneq ($(KERNELRELEASE),)
obj-m := chardriver.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
我猜問題出在$(shell uname -r)(因為它顯然返回正在運行的內核的版本,而不是源代碼的版本)
有誰知道如何從樹外指定版本?
您需要提供要用來構建模塊的內核的內核源樹路徑。 make -C
將內核目錄路徑作為參數。 路徑/lib/modules/$(shell uname -r)/build
將使用您當前正在運行的內核。 目錄/lib/modules/$(shell uname -r)/build
由已經構建的內核模塊組成,您可以使用這些內核模塊(鏈接)來構建自己的可加載內核模塊。 為了與當前運行Makefile的內核以外的內核交叉編譯模塊,應如下所示:
obj-m += chardriver.o
all:
make -C /Path/to/Kernel/Source/Tree/ M=$(PWD)
clean:
rm -fr *.o *.order *.mod.c *.mod.o *.ko Module.symvers
使用命令行傳遞內核版本或路徑(例如:make KERNELDIR = / path / to / dir /),如果沒有傳遞任何內容,請使用默認運行的內核(或僅運行make
來拾取默認運行的內核), makefile應該看起來像這樣
ifeq ($(KERNELDIR),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
endif
obj-m += chardriver.o
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.