【问题标题】:How to avoid 'invalid command' error when building Linux kernel on Fedora 28?在 Fedora 28 上构建 Linux 内核时如何避免“无效命令”错误?
【发布时间】:2020-01-30 04:53:18
【问题描述】:

我正在 Fedora 28 上构建 Linux 内核,但总是遇到相同的错误,例如:

CC      init/main.o  
init/main.o: warning: objtool: elf_begin: invalid command  
make[1]: *** [scripts/Makefile.build:277: init/main.o] Error 1  
make[1]: *** Deleting file 'init/main.o'  
make: *** [Makefile:1067: init] Error 2  
make: *** Waiting for unfinished jobs....

我试过从kernel.org下载的“linux-5.0.16.tar.gz”和“linux-5.0.21.tar.gz”

,并尝试按照Fedora wiki上的说明进行操作

但是没有办法避免这个“无效命令”错误。 “elfutils-libelf-devel”和“elfutils-libelf”已安装。在 fedora 的方式中,'fedpkg cone -a kernel' 是成功的,所以安装了所有的依赖。有谁知道缺少什么?

进一步的进展: 相同的过程适用于安装了 Fedora 30 的不同机器。 但是,将原机升级到 Fedora 30 后,错误依然存在。

【问题讨论】:

  • Fedora28.updates, kernel-5.0.16-100.fc28 源码包archives.fedoraproject.org/pub/archive/fedora/linux/updates/28/… → → 附带 16 个脚本,47 个补丁:(1. 可能包含针对您的问题的修复。).. . 2. 为什么不构建 Fedora 28 kernel-5.0.16-1xx.fc28 .rpm :编辑配置脚本,然后运行 ​​$ rpmbuild -bb kernel.spec
  • 我在 Fedora 30 上尝试了相同的步骤,它似乎有效。在带有内核的 Fedora 28 上:Linux 5.0.16-100.fc28.x86_64,问题仍然存在。
  • 请编辑您的问题以包含您所做的更改。并请解释构建特殊版本的原因。

标签: linux linux-kernel


【解决方案1】:

存在“无效命令”问题的机器在 /user/local 下安装了旧版本的 libelf.so。移除旧的 libelf 后,objtool 会链接到当前的 libelf 库,并且可以在编译 linux 内核的过程中运行。

linux源代码/tools/perf/util/symbols.h中有注释:

/*
* libelf 0.8.x 及更早版本不支持 ELF_C_READ_MMAP;
* 对于较新的版本,我们可以使用 mmap 来减少内存使用:
*/

这条评论让我寻找过时版本的 libelf。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-20
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多