我正在嘗試編譯來自The Linux Kernel Module Programming Guide的最簡單的內核模塊。hello.c:
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
Makefile:
obj-m = hello.o
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
輸出make:
make -C /lib/modules/5.14.0/build M=/home/parallels/dev/demo modules
make[1]: Entering directory '/home/parallels/linux-5.14'
CC [M] /home/parallels/dev/demo/hello.o
MODPOST /home/parallels/dev/demo/Module.symvers
ERROR: modpost: missing MODULE_LICENSE() in /home/parallels/dev/demo/hello.o
make[2]: *** [scripts/Makefile.modpost:150: /home/parallels/dev/demo/Module.symvers] Error 1
make[2]: *** Deleting file '/home/parallels/dev/demo/Module.symvers'
make[1]: *** [Makefile:1766: modules] Error 2
make[1]: Leaving directory '/home/parallels/linux-5.14'
make: *** [Makefile:4: all] Error 2
這一切都是在我從源代碼編譯 linux 內核并運行make modules_install. 我不太明白輸出的第二行:make[1]: Entering directory '/home/parallels/linux-5.14',這是我下載和編譯 linux 內核的目錄,我看不出它與我正在嘗試編譯的這個模塊有什么關系。
我看到其他人詢問此missing MODULE_LICENSE()錯誤,但他們通常詢問更復雜的模塊,而答案似乎與這個非常簡單的模塊無關。一些答案與更改源代碼檔案或.o檔案的名稱有關,但嘗試任何一種方式都只會產生關于no rule to make target更改名稱的錯誤。
此外,這一切都在我從源代碼編譯的運行 linux 內核 5.14.0 的 Kali linux 的 vm 上。
uj5u.com熱心網友回復:
您需要添加對MODULE_LICENSE源檔案的呼叫(hello.c在您的情況下)。這就是錯誤訊息所說的內容。例如
MODULE_LICENSE("GPL");
大多數模塊還呼叫MODULE_AUTHOR:
MODULE_AUTHOR("your-name");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/496586.html
