作为我当前项目的一部分,我试图在 Redhat8 上编译一些专有设备驱动程序(最初使用供应商提供的调用 gcc 的 Makefile 为 Redhat6 内核版本 2.6.32-504.el6.x86_64 成功编译)。我使用的内核版本是4.18.0-240.15.1.el8_3.x86_64。
编译会导致<linux/printk.h>、<linux/kernel.h>等系统头文件出现一堆错误。
我不想在这篇文章中充斥具体的错误,而是我想要弄清楚的是为什么我在相同驱动程序代码的更新内核版本的内核头文件中看到编译错误,如上所述,可以使用较旧的内核版本成功编译该驱动程序代码?
任何想法将不胜感激。
TIA
答案1
Linux 内核内部没有稳定的 ABI 甚至 API,这意味着很少努力保持外部模块使用的接口的向后兼容性。
A很多在 2.6.32 和 4.18 之间发生了变化;要在 4.18 内核上构建兼容 2.6.32 的模块将需要大量的移植工作。