我正在阅读有关 linux 内核开发的信息,但我只是阅读了一些我不理解的文本。以下是关于模块的 __init 和 __exit 宏的段落:
这演示了内核 2.2 及更高版本的一个特性。注意 init 和 cleanup 函数定义的变化。__init 宏会导致 init 函数被丢弃并在 init 函数完成后释放其内存以用于内置驱动程序,但不是可加载模块。如果您考虑一下何时调用 init 函数,这很有意义。
还有一个 __initdata,其工作方式与 __init 类似,但用于初始化变量而不是函数。
__exit 宏在模块内置到内核时会导致函数的省略,并且与 __exit 一样,对可加载模块没有影响。同样,如果您考虑清理功能何时运行
我明白了;__init
一旦内置驱动程序的 init 函数完成,宏会导致 init 函数被丢弃并释放其内存。但是为什么?不适用于可加载模块?我无法理解它。
我知道这是一件愚蠢的事情,但我想了一段时间,无法完全理解。为什么使用内置驱动程序而不是可加载模块?__init
两者都需要分配的变量,地址等,对吗?