首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核模块源代码的正确特性检查

问内核模块源代码的正确特性检查
EN

Stack Overflow用户
提问于 2016-06-22 12:33:31
回答 1查看 123关注 0票数 1

场景1:我试图用普通内核3.10 (实际上是Elrepo的kernel-lt )将IBM GPFS驱动程序安装到RHEL6上。由于以下原因,GPL部分无法编译:

  • 传递给功能的参数太多/太少
  • 结构x没有这样的成员。
  • 类型失配

他们的代码在库存的RHEL/Suse内核上编译得很好,这些内核比我的更早或更新,但是在这里失败了。

场景2: --我试图用股票内核在RHEL6上编译开放源码softiwarp驱动程序,但是失败时出现了与场景1相同的错误,但是它在普通内核上编译得很好。

这都是因为它们的特性检查头看起来如下所示:

代码语言:javascript
复制
#if LINUX_KERNEL_VERSION >= 2061300
#define FOO <newer variant>
#else
#define FOO <older variant>
#endif

但是RHEL和Suse有很多支持和补丁,所以他们的3.10.101与香草3.10.101不一样。

如何编写将检查功能而不是版本号的代码?在用户空间程序中,我将使用autoconf宏AC_CHECK_MEMBER/AC_CHECK_FUNC。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-22 13:14:38

如何编写将检查功能而不是版本号的代码?在用户空间程序中,我将使用autoconf宏AC_CHECK_MEMBER/AC_CHECK_FUNC。

标准的预处理器的能力比一些人想象的要小得多。它没有能力直接做你想做的事。Autoconf在这方面也没有神奇之处;它只是在配置时执行测试,通常只需检查编译器是否接受给定的代码,并主要通过定义预处理器宏来将结果与编译器进行通信。(您负责在条件测试中根据需要使用这些宏,与示例中的宏非常相似。)

但是,由于我们讨论的是Autoconf,只要它运行在与您构建的内核对应的内核头上,至少有一些Autoconf宏可以为您工作,并且您应该能够为其他人编写自定义的Autoconf测试。实际上,编译器在构建时可以检测到的任何问题,Autoconf也应该能够进行测试。

当然,还有一种选择,就是让模块构建器能够显式地指出所需的配置细节,这样的棘手问题就会出现。例如,调整特征选择宏以注意为生成器保留的符号以调整结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37968134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档