针对错误的内核头文件编译 Linux 内核模块,会发生什么?

Compiling Linux kernel module against the wrong kernel headers, what happens?

我正在编写一些脚本,我们必须构建我们在工作中制作的小型 Linux OS。我在脚本中发现了一个错误。我们正在针对错误的内核头文件集构建内核模块。

有趣的是内核模块构建得很好,所以脚本只是将它复制到 /lib/modules/ 下与我们 打算 [=19= 的内核相对应的位置] 构建的对象,而不是我们 实际上 构建的对象。然后脚本 运行 depmod.

在这种情况下(这显然是错误的),预期的行为应该是什么?

使用错误的内核头文件集构建的模块可以加载到内核中,但其功能有问题(未定义的行为)。

您的模块使用的结构可能与预期内核使用的结构不同。

如果你很幸运并且你的模块既不使用直接访问(包括通过宏和 static inline 函数访问)更改的字段也不为该结构分配内存(在堆栈或堆上),你的模块将按预期运行。否则会出问题