首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为不同的linux版本构建内核模块

为不同的linux版本构建内核模块
EN

Stack Overflow用户
提问于 2012-06-02 11:15:29
回答 3查看 23K关注 0票数 8

我刚开始编写内核模块,所以遇到了一些非技术问题.

因为对于为特定内核版本(比如3.0.0- 10,10是补丁号)创建内核模块,需要相同的版本内核头,所以直接安装内核标头并在那里开始开发。但是补丁内核版本的内核头是不可用的。因为我有一个来宾内核vmlinuz-3.0.0-10运行在机器上,在下载内核头时,它说找不到。

  • 的其他方法是获取特定内核的源代码,但问题还是相同的,因为修补的内核是不可用的(不需要获取linux-kernel-3.0.0-10甚至Linux-内核-3.0.0和10补丁的源代码)。在某些情况下,获得运行内核的源代码是可能的,但possible.
  • another并不总是构建运行中的内核以外的内核,并将生成的内核放在机器中。但是它需要构建内核的模块,这是一个耗时和空间消耗的过程。

因此,询问这个问题的目的是知道内核驱动程序开发人员的首选项是什么。还有其他选择吗?

是否可以在一个版本中编译内核模块,而在另一个版本中运行(尽管会出现错误,但是有什么解决办法吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-02 22:04:28

因此,构建一个新内核并不是一个很好的选择,因为它需要:

构建kernel

  • building模块和firmware

  • building标头的
  • 在适当的位置(如果您的机器与您要开发模块的机器不相同)移动所有这些东西

因此,如果您有运行系统的内核头,那么您不需要下载任何内核版本的源代码,并且在使模块使用

代码语言:javascript
复制
make -C /lib/modules/kernel-headers-x.y.z/build M=`pwd` modules

你的模块就准备好了。

如果有更好的答案,我会毫不犹豫地接受其中任何一个。

票数 8
EN

Stack Overflow用户

发布于 2014-08-08 19:54:38

我知道很久没问这个问题了。我是内核开发方面的新手。我也遇到过同样的错误。但是现在我能够在构建它的不同内核中加载我的模块。以下是解决办法:

  1. 下载与您正在运行的映像相关的内核开发。它的版本应该与possible.
  2. Check一样接近,您在模块中使用的函数与kernel-devel.
  3. change中的头文件映射为UTS_RELEASE值的UTS_RELEASE/generated/utsRelase.h文件。将其更改为运行在HW上的内核映像的版本。
  4. 使用此内核树编译模块。
  5. 现在可以将模块插入内核.

中。

注:这可能会导致一些不想要的事件发生,如上述沙巴兹。但如果你这么做只是为了实验,我认为去做是好的。:)

票数 3
EN

Stack Overflow用户

发布于 2012-06-02 11:27:46

有一种方法可以在一个内核上构建一个模块并将其插入到另一个内核中。它是通过关闭一个特定的配置。我没有告诉你这是什么配置,因为这是绝对危险的。原因是内核之间可能会发生更改,这可能会导致模块的行为不同,通常会导致完全冻结。

您应该做的是根据已经构建的内核(或者至少是配置好的内核)构建模块。如果您有一个修补的内核,那么最好的方法就是构建这个内核并用它引导您的操作系统。

我知道这很费时。我已经做了很多次了,我知道它会有多无聊,但一旦你做对了,它会让你的生活更轻松。内核编译大约需要2个小时左右,但是如果您有一个多核CPU,则可以并行化它。此外,你也可以让它在你离开办公室之前编译(如果在家里,在睡觉之前),让它在晚上工作。

总之,我强烈建议您构建自己感兴趣的内核。

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

https://stackoverflow.com/questions/10861872

复制
相关文章

相似问题

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