簡體   English   中英

Linux內核:構建與源樹版本匹配的樹外模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM