【问题标题】:Problems building driver on Linux kernel 5.8.x在 Linux 内核 5.8.x 上构建驱动程序的问题
【发布时间】:2020-08-14 13:29:47
【问题描述】:

我正在使用基于 v5.7.x 内核而非最新 v5.8.x 版本的 Linux 驱动程序。

总而言之,大多数驱动程序是预先构建的,内核接口是在目标上构建的。这涉及到make -f Kbuild 命令。

在检查了所有相关的内核接口文件是否有任何影响我们的更改后,通常驱动程序会像往常一样在新内核上构建。但是,这次我们得到以下错误:

make[2]: *** [scripts/Makefile.modpost:111: /path/to/source/Module.symvers] Error 1
make[1]: *** [Makefile:1669: modules] Error 2
make[1]: Leaving directory '/usr/src/kernels/5.8.0-1.el8.elrepo.x86_64'
make: *** [Kbuild:26: default] Error 2

这是来自 CentOS 8.1,但在 Ubuntu 20.04 上出现了同样的错误。

我不是这方面的专家,因此解释这些错误有点困难。我尝试使用 KBUILD_VERBOSE 标志进行构建,但它并没有真正提供任何有用的信息,除了在此之前构建成功。

在以前的内核中,Module.symvers 文件将被创建但为空。在 5.8 上,这个文件根本没有创建,大概是由于这个错误。因此,不会创建 .ko 文件。

最后,如果我们放入源文件而不是预构建的 .o 文件,构建确实会成功。这些 .o 文件是使用非常旧版本的 GCC (4.4.7) 构建的,但我们也尝试使用与目标机器相同的版本 (8.3.1) 构建。

我会很感激有关检查事项的建议。让我知道是否有任何其他细节会有所帮助。

编辑:

我在 Makefile.modpost 上手动运行 make 并得到以下输出:

sudo make -f ./scripts/Makefile.modpost
WARNING: Symbol version dump "vmlinux.symvers" is missing.
         Modules may not have dependencies or modversions.
make -f /scripts/Makefile.modfinal
make[1]: Entering directory '/usr/src/linux-headers-5.8.0-050800-generic'
make[1]: /scripts/Makefile.modfinal: No such file or directory
make[1]: *** No rule to make target '/scripts/Makefile.modfinal'. Stop.
make[1]: Leaving directory '/usr/src/linux-headers-5.8.0-050800-generic'
make: *** [scripts/Makefile.modpost:117: __modpost] Error 2

【问题讨论】:

  • 你的消息里真的有/patch/to/source/吗?!
  • Makefile.modpost 根据您的内核配置构建 modpost 并运行它。 modpost 失败,应该将问题记录到 stderr。
  • 谢谢@stark。我在模块构建期间看到的唯一错误是我上面帖子中的错误。但是,我确实尝试手动构建 Makefile.modpost 并使用输出更新了我的帖子。
  • 我的 5.8 副本有 /scripts/Makefile.modfinal
  • $srctree 调用时需要定义。

标签: linux linux-kernel driver linux-device-driver kbuild


【解决方案1】:

我正在回答我自己的问题,以防它帮助其他人解决这个问题。尽管过去从未出现过问题,但我们总是收到警告,即我们的 .o_shipped 文件不存在相应的 .o.cmd 文件。这在内核 5.8 以后似乎很重要,我的解决方法是在 Kbuild 文件中添加一个触摸命令(即“touch .driver.o.cmd”)。这不会删除警告,但它允许驱动程序正常构建。

【讨论】:

  • 虽然我不必添加cmd 文件,但我必须指定一个虚拟文件make modulesymfile=src/Module.symvers
猜你喜欢
  • 2012-04-18
  • 2014-03-01
  • 2012-04-20
  • 2014-02-05
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多