try*_*tch 2 kernel make kernel-modules assembly
我正在尝试将 kexec 构建为一个模块,但遇到了一个奇怪的问题。我的 obj-m 是:
obj-m += kexec.o machine_kexec.o relocate_kernel.o
当我运行 makefile 时,它抱怨说“没有规则可以制作 relocate_kernel.o 需要的目标 relocate_kernel.c”
我应该如何告诉它包含程序集文件?我查看了内核 Makefile,虽然我对它们不是很好,但似乎确实存在 .S > .o 的规则。我错了吗?
一如既往,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) 模块
清洁:使 -C /lib/modules/$(shell uname -r)/build M=$(PWD) 清洁
所以,我的 Makefile 应该是这样写的:
obj-m += kexecmod.o kexecmod-objs := kexec.o machine_kexec.o relocate_kernel.o
其中将 relocate_kernel.S 编译成 relocate_kernel.o
(对于试图将 kexec 编译为模块的任何人来说,我仍然没有找到所有的依赖项,但这是一个开始。)
归档时间: |
|
查看次数: |
4233 次 |
最近记录: |