我正在尝试通过遵循https://www.tldp.org/LDP/lkmpg/2.6/lkmpg.pdf并阅读 GNU make 手册来学习 linux 内核模块构建和 kbuild。
这是 Linux 内核模块编程指南中第一个示例 Hello-1 的 Makefile:
obj-m += hello-1.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
AFAIK,obj-m
应该由 kbuild 阅读。但是根据 GNU Make 手册,我知道obj-m
不应该导出。
除非通过显式请求,否则仅当变量最初在环境中定义或在命令行中设置,并且其名称仅包含字母、数字和下划线时,才会导出变量。某些 shell 无法处理由字母、数字和下划线以外的字符组成的环境变量名称。
https://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html
obj-m
最初既不是在环境中定义的,也不是在命令行中设置的。所以我希望它不应该导出到 target 的配方all
。kbuild如何访问obj-m
?