构建内核模块时 obj-m 列表中的汇编文件

构建内核模块时 obj-m 列表中的汇编文件

我正在尝试将 kexec 构建为模块,但遇到了一个奇怪的问题。我的 obj-m 是:

obj-m += kexec.o machine_kexec.o relocate_kernel.o

当我运行 makefile 时,它​​抱怨“没有规则来制作 relocate_kernel.o 所需的目标 relocate_kernel.c”

我应该如何告诉它包含程序集文件?我查看了内核 Makefile,虽然我不太擅长它们,但似乎确实存在 .S > .o 的规则。我这件事有错吗?

答案1

一如既往,RTFM。回答这个问题并留下来帮助其他可能遇到这个问题的人。根据 Linux 文档项目,我错误地使用了 obj-m:

有时,将内核模块划分为多个源文件是有意义的。这是此类内核模块的示例。

[源文件...]

最后是 makefile:

示例 2-10。生成文件

obj-m += hello-1.o obj-m += hello-2.o obj-m += hello-3.o obj-m += hello-4.o obj-m += hello-5.o obj-m += startstop.o startstop-objs := start.o stop.o

全部: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) 模块

干净: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Linux 内核模块编程指南:2.7。跨多个文件的模块

所以,我的 Makefile 应该是这样的:

obj-m += kexecmod.o
kexecmod-objs := kexec.o machine_kexec.o relocate_kernel.o

哪个将relocate_kernel.S编译成relocate_kernel.o

(对于任何试图将 kexec 编译为模块的人来说,我仍然没有找到所有依赖项,但这是一个开始。)

相关内容