Kernel

建構核心模組時 obj-m 列表中的彙編文件

  • May 18, 2017

我正在嘗試將 kexec 建構為一個模組,但我遇到了一個奇怪的問題。我的 obj-m 是:

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

當我執行makefile時,它抱怨說“沒有規則可以製作目標relocate_kernel.c,relocate_kernel.o需要”

我應該如何告訴它包含程序集文件?我查看了核心 Makefile,雖然我對它們不是很好,但似乎確實存在 .S > .o 的規則。我錯了嗎?

與往常一樣,RTFM。回答這個問題並留下來幫助可能遇到這個問題的其他人。根據 Linux 文件項目,我使用 obj-m 錯誤:

有時在幾個源文件之間劃分核心模組是有意義的。這是此類核心模組的範例。

$$ Source files … $$ 最後,生成文件:

範例 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= $ (殘疾人) 清潔

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 編譯為模組的人,我仍然沒有找到所有的依賴項,但這是一個開始。)

引用自:https://unix.stackexchange.com/questions/75229