系统相关
首页 > 系统相关> > linux-内核模块中的obj-m变量

linux-内核模块中的obj-m变量

作者:互联网

在内核模块中,存在makefile obj-m变量.考虑以下:

CUR = $(shell uname -r) 
DIR = /lib/modules/$(CUR)/build 
PWD = $(shell pwd) 
obj-m   := m1.o m2.o 
default: 
        $(MAKE) -C $(DIR) SUBDIRS=$(PWD) modules 

在此Makefile中,默认目标包含一个调用内核子make的配方. obj-m变量不会导出到环境,因此sub-make无法使用它.但是,如果我们删除obj-m变量初始化,则此make不会编译m1和m2内核模块.因此,问题是:

在这种情况下,为什么内核子生成依赖于未导出的obj-m变量?

解决方法:

没有任何make变量导出到环境.

SUBDIRS被定义为make变量.
内核makefile在SUBDIRS中查找Makefile,对其进行读取,并使用其中定义的所有obj- *.

(根据documentation,您应该使用M而不是SUBDIRS.)

标签:makefile,linux-kernel,linux
来源: https://codeday.me/bug/20191122/2058208.html