【问题标题】:Kernel module is removed successfully although warning message 'not found"尽管警告消息“未找到”,但内核模块已成功删除
【发布时间】:2017-09-09 07:57:36
【问题描述】:

昨天我在我的嵌入式 Linux 系统中安装了一个非常简单的内核模块。 “你好.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 module not found”?

以下是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");

【问题讨论】:

    标签: c linux unix kernel kernel-module


    【解决方案1】:

    在我看来,您需要添加一些东西 __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");
    

    【讨论】:

    • 您是否尝试过将名称 init_modulecleanup_module 更改为不同的名称?我现在收到redefinition 错误。没有它,它可以在 arm 上基于 buildroot 的干净环境运行。
    • 另外,您使用的是基于rmmodbusybox 吗?也许尝试使用 gnu rmmod (不知道我应该如何称呼它)。有时我在替换 busybox 时遇到了一些问题,通常只需用更重的标准工具替换 buildroot 中的它们即可解决问题。
    • 你说得对,我用的是busybox的rmmod。但是我的嵌入式系统使用了busybox的rmmod。我不能使用另一个 rmmod(当然,我已经改名了)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2021-12-14
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多