5

我是 Linux 内核模块编程的新手,许多关于该主题的入门指南都包含有关如何构建将在 Linux 的许多版本和 CPU 平台上运行的内核模块的少量信息。我见过的大多数指南都简单地陈述了诸如“Linux 不能确保版本之间的任何ABI/API 兼容性”之类的内容。但是,其他操作系统确实为主要版本提供了这些保证,并且指南主要针对 2.7(现在有点旧)。

我想知道现在是否有任何 ABI/API 兼容性,或者是否有任何标准方法来处理版本控制,而不是将我的代码的内核相关位隔离到具有大量预处理器指令的文件中。(另外,在第二种情况下我应该使用任何标准的预处理器符号吗?)

4

2 回答 2

9

内核没有稳定的 ABI,而且很可能永远不会,因为它会让 Linux 很烂。没有一个的原因几乎都记录在该链接中。

处理这个问题的最好方法是让你的驱动程序在上游合并,由其他内核开发人员维护。

至于跨平台,只要您只使用 API 中提供的标准、独立于平台的函数,Linux 内核几乎是免费的。

于 2013-06-17T04:37:14.470 回答
4

Linux,唐氏回答很好;它回答了你的问题。但是,有linux compat项目。请参阅backports wiki。基本上,有一些库为较新的 Linux ABI 提供shim功能,您可以使用这些库来链接您的代码。Eugene注释的KERNEL_VERSION宏在compat.h中进行检查,并包含适当的 compat-2.6.38.h等,其中每个版本都有宏和/或库函数以提供前向API。

这让 Linux Wifi 小组可以为最前沿的内核编写代码同时仍然可以在较旧的内核版本上进行编译。

我想这回答了这个问题,

是否有任何标准方法来处理版本控制?

compat库不是灵丹妙药,但至少它已经存在并且正在开发中。

开源 - 有许多突变。他们都有不同的计划。

于 2013-06-17T22:36:36.703 回答