首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux内核5.8.x上构建驱动程序时遇到的问题

在Linux内核5.8.x上构建驱动程序时遇到的问题
EN

Stack Overflow用户
提问于 2020-08-14 13:29:47
回答 1查看 4.8K关注 0票数 3

我正在使用一个Linux驱动程序,它构建在v5.7.x内核上,而不是构建在最新的5.8.x版本上。

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

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

代码语言:javascript
复制
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

这来自Ubuntu8.1,但在Ubuntu20.04上也出现了同样的错误。

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

在以前的内核中,将创建Module.symvers文件,但该文件为空。在5.8中,完全没有创建此文件,可能是由于此错误。因此,没有创建.ko文件。

最后,如果我们删除源文件而不是预构建的.o文件,构建就会成功。这些.o文件是用一个非常旧的GCC版本(4.4.7)构建的,但是我们也尝试用一个更新的版本(8.3.1)构建,与目标机器的版本相同。

我希望你能给我一些建议来检查一下。如果其他细节有帮助,请告诉我。

编辑:

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

回答已采纳

发布于 2020-08-20 09:01:00

我正在回答我自己的问题,以防它帮助其他人解决这个问题。尽管这在过去从来不是一个问题,但我们一直有一个警告:对应的.o.cmd文件不存在于我们的.o_shipped文件中。这在内核5.8中似乎很重要,我的修复方法是在Kbuild文件中添加一个touch命令(即"touch .driver.o.cmd")。这不会删除警告,但它允许驱动程序正常构建。

票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63413757

复制
相关文章

相似问题

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