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