尽管警告消息“未找到”,但内核模块已成功删除

时间:2017-04-13 09:13:41

标签: c linux unix kernel kernel-module

昨天我在嵌入式Linux系统中安装了一个非常简单的内核模块。 “hello.ko”。 当我将此模块安装到我们的系统时,通常是:

#insmod hello.ko
    Initing kernel module
#
#lsmod
hello 638 0 - Live 0xf628f000

但是当我删除这个内核模块时,可以正常删除但是rmmod通知'hello.ko'找不到

# rmmod hello
Cleaning kernel module
rmmod: module 'hello' not found
#lsmod <------------------- already be removed
#
# uname -a
# Linux SWITCH 2.6.32 #8 Thu Jun 23 20:34:48 KST 2016 ppc GNU/Linux

这很奇怪。任何人都可以解释为什么'hello.ko'被删除但是找不到日志'rmmod模块'?

以下是hello.ko的源代码

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/config.h>
#include <linux/version.h>
#include <linux/types.h>
#include <linux/string.h>
int init_module(void)
{
    printk (KERN_EMERG "Initing kernel module\n");
    return 0;
}
void cleanup_module(void)
{
    printk (KERN_EMERG "Cleaning kernel module\n");
}

MODULE_DESCRIPTION ("Kernel function replacement module");
MODULE_AUTHOR ("DASAN Networks Inc.");
MODULE_LICENSE ("GPL");

1 个答案:

答案 0 :(得分:0)

您需要在我看来__init__exit宏以及module_initmodule_exit宏中添加一些内容,请尝试:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/version.h>
#include <linux/types.h>
#include <linux/string.h>
static int __init init_example(void)
{
    printk (KERN_EMERG "Initing kernel module\n");
    return 0;
}
static void __exit cleanup_example(void)
{
    printk (KERN_EMERG "Cleaning kernel module\n");
}

module_init(init_example);
module_exit(cleanup_example);
MODULE_DESCRIPTION ("Kernel function replacement module");
MODULE_AUTHOR ("DASAN Networks Inc.");
MODULE_LICENSE ("GPL");