重建/更新内核模块

时间:2011-02-28 15:09:34

标签: c linux kernel-module rebuild

嘿那里, 以下问题: 我在工作中使用了一个相当奇怪的Linux发行版(Centos 5),它似乎有一个较旧的内核(或者内核中至少有一些差异),你不能简单地更新它。 我需要安装的程序需要一个函数crypto_destro_tfm(以及更多的问题,但这是此时唯一的错误),它包含在linux / crypto / api.c文件中 - 所以我假设它在内核模块crypto_api中。问题是:在我的发行版上,我甚至没有加密/ api.c,即使我有一个模块crypto_api.ko,似乎这个函数不在那里。

我的计划如下:从较新的Linux发行版中获取crypto_api,然后编译它并将模块加载到我的centos中。

现在我希望你们中的一些人可以告诉我需要做些什么来重建和替换该模块。当然,我确实拥有来自较新内核的所有源文件。 (只是提醒你:我不能简单地重新编译并使用更新的内核,b / c centos以这种方式糟透了) 谢谢

FWIW:这是确切的错误

警告:“crypto_destroy_tfm”[/home/Chris/digsig-patched/digsig_verif.ko]未定义!

2 个答案:

答案 0 :(得分:0)

很有可能在较旧的内核中向后移植API更改会导致一连串的问题。假设您将版本2.6.Y的crypto api反向移植到本地版本2.6.X

现在您遇到以下情况:

  • 模块crypto api export 2.6.Y函数
  • 您的外部模块可能对此情况感到满意
  • 依赖于加密API版本2.6.X的所有其他模块都会抱怨。

但是等等,我可以将最近的内核代码反向移植到所有抱怨的模块中,这里我们去...哎呀,但是我们有前一种情况,但现在每个后向模块都可能触发类似的情况。

如果你不能更新CentOS内核,因为CentOS内核有很多自定义代码你害怕在使用“vanilla”内核时松动,那么你可能会发现“降级”更容易“你的外部模块:

  • 查看当前的加密API(例如使用lxr.linux.no)
  • 查看此API的内核版本
  • 尝试查看如何通过调用旧API来替换新API,以提供类似的功能。
  • 修改外部模块以使用旧API而不是新API。

在任何情况下,你可能无法用香草替换你的内核,但你至少应该能够重建它,然后修补它并重建它等等......如果你做不到这个简单的任务,那么我认为向后移动任何东西都不会成功。

答案 1 :(得分:0)

尝试从较新版本的CentOS下载SRC RPM,该版本具有该模块并在CentOS 5上重新编译RPM:

rpmbuild --rebuild kernel-X.XX-X.src.rpm

我没有CentOS的副本可供比较,因此您需要阅读rpm / rpmbuild上的手册页,但我发现重新编译整个包,其中包含内核及其所有模块比试图从一个较新的内核移植一个模块。当我需要更新的软件包时,我偶尔会在Debian / Ubuntu上这样做。