linux内核版本 2.6.39,linux – 为什么这个内核模块在2.6.39上被标记为永久
加載此模塊時:
#include
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void) {
printk("<1> Hello world!\n");
return 0;
}
static void hello_exit(void) {
printk("<1> Bye,cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
該模塊在lsmod中被標記為[永久],不能卸載,在2.6.39-02063904-generic(從Ubuntu PPA).但它在默認的2.6.38內核上工作正常. (在Ubuntu 11.04 x86上).
2.6.39發生了什么變化?我的代碼需要改變什么?
當我遇到這個問題時,我試圖分離一個更復雜的問題.
編輯:
根據答案的建議,我編輯了添加__init和__exit(hello3.c)的代碼:
#include
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int __init hello_init(void) {
printk("<1> Hello world!\n");
return 0;
}
static void __exit hello_exit(void) {
printk("<1> Bye,cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
構建輸出:
make -C /lib/modules/2.6.39-02063904-generic/build M=/home/douglas/kernelmod modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.39-02063904-generic'
Building with KERNELRELEASE = 2.6.39-02063904-generic
CC [M] /home/douglas/kernelmod/hello3.o
Building modules,stage 2.
Building with KERNELRELEASE = 2.6.39-02063904-generic
MODPOST 8 modules
CC /home/douglas/kernelmod/hello3.mod.o
LD [M] /home/douglas/kernelmod/hello3.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.39-02063904-generic'
EDIT2:
hello3.mod.c:
#include
#include
#include
MODULE_INFO(vermagic,VERMAGIC_STRING);
struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,.init = init_module,#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,#endif
.arch = MODULE_ARCH_INIT,};
static const struct modversion_info ____versions[]
__used
__attribute__((section("__versions"))) = {
{ 0xbe4b3e92,"module_layout" },{ 0xb4390f9a,"mcount" },{ 0x5e3b3ab4,"printk" },};
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";
MODULE_INFO(srcversion,"D2A869459874C22AB265981");
也
# grep CONFIG_MODULE_UNLOAD /boot/config-2.6.39-02063904-generic
CONFIG_MODULE_UNLOAD=y
EDIT3:
更有趣的是,我自己編譯的香草內核不會發生這種情況
加載和卸載模塊正常.
EDIT4:
我在虛擬機上安裝了Oneiric beta 2內核,而3.0.0-11內核也沒有任何問題.所以它似乎局限于Ubuntu香草PPA內核.這不是很有趣的解決.
總結
以上是生活随笔為你收集整理的linux内核版本 2.6.39,linux – 为什么这个内核模块在2.6.39上被标记为永久的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 0.11进程运行轨迹的跟踪,
- 下一篇: linux查看vnc服务关闭,linux