【问题标题】:Will the Kernel module load when there is no initialization function?没有初始化函数时会加载Kernel模块吗?
【发布时间】:2021-01-07 19:57:14
【问题描述】:

我是第一次编写驱动程序代码。我检查了许多资源,其中指出内核模块的初始化函数是 init_module() 或使用 MODULE_INIT() 宏指定的任何其他函数。而这个初始化函数是在内核模块加载时调用的。

但我找不到任何有关当可加载内核模块中不存在初始化函数并尝试加载时会发生什么的信息。

如果内核模块是in-tree并且没有初始化函数会是什么情况??

---提前谢谢..

【问题讨论】:

    标签: linux-kernel linux-device-driver kernel-module


    【解决方案1】:

    在例程do_init_module 中,它测试是否提供了一个init 例程。如果没有,它只是跳过呼叫。见https://elixir.bootlin.com/linux/v3.10.108/source/kernel/module.c#L3092

    if (mod->init != NULL)
        ret = do_one_initcall(mod->init);
    

    【讨论】:

    • 是模块没有加载还是无法加载??
    • 没有。它加载了模块,就好像init 成功了。
    • 不过,没有理由不进行 init 调用。通常,您会希望记录您的模块已加载,然后返回成功。
    • @stark:“通常,您会希望记录您的模块已加载,然后返回成功。” - 通常在init 函数中,您希望注册您的模块为其提供驱动程序的所有真实设备和/或伪设备(如文件系统)。记录您的模块已加载是最后一件麻烦的事情。如果没有init函数,一个模块只能为其他模块提供一些函数,这些函数可以稍后加载。
    • @stark,有很多模块是,它们没有定义->init()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多