Kernel
建構核心模組時 obj-m 列表中的彙編文件
我正在嘗試將 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= $ (殘疾人) 清潔
所以,我的 Makefile 應該是這樣的:
obj-m += kexecmod.o kexecmod-objs := kexec.o machine_kexec.o relocate_kernel.o
將 relocate_kernel.S 編譯成 relocate_kernel.o
(對於任何試圖將 kexec 編譯為模組的人,我仍然沒有找到所有的依賴項,但這是一個開始。)