为什么Image文件是PE可执行文件

为什么Image文件是PE可执行文件

我一直在尝试使用最新的源代码 linux-6.0-rc5 在我自己的机器上编译 Linux 内核。一切都很顺利,但有件事困扰着我。当我拿到Imagearch/riscv/boot 下的文件并使用file命令查看它时,我发现它看起来像:

Image: MS-DOS executable PE32+ executable (EFI application) RISC-V 64-bit (stripped to external PDB), for MS Windows

但在我看来,它应该是data类型的,因为objcopy -O binary -S应该包含所有其他信息。

我已经file整理了vmlinux文件并得到

vmlinux: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, BuildID[sha1]=432bf8175b2c7de8404f27f5f395fdb20479f263, with debug_info, not stripped

当我重试一个具有相同类型的新构建的 C 程序时,使用objcopy已完成的操作vmlinux,我得到了正确的data类型。

手动objcopy编译vmlinux得到的结果与PE可执行文件相同,因此系统不可能make进行额外的更改。

vmlinux用to get完成的事情Image

riscv64-linux-gnu-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/linux/boot/Image

正如我们可以看到的--just-print选项make

我想知道我是否误解了该行的含义objcopy或命令的结果file

答案1

这是因为启动映像是 UEFI 可执行文件,其格式为便携式可执行文件(又名 Windows exe)。

相关内容