提问人:Akarys 提问时间:5/19/2021 更新时间:5/19/2021 访问量:101
ld 检测格式不一致
Inconsistent format detection by ld
问:
我正在编写一个自定义引导加载程序(就像互联网上的许多人似乎实际上在做:D一样),为了它而没有任何库。
这是我的目标设置:
- 第一个扇区是用 asm(16 位模式的 Nasm i386)编写的,在代码中称为引导加载程序。它将使用 BIOS 加载下一个扇区并跳转到名为 的标签。
bootram_entry
- 任意数量的扇区(现在硬编码为一个)由 Rust 代码(自定义目标,使用 LLVM 目标 i386-unknown-none-code16)组成,并将负责设置基本服务并加载内核。它被称为 bootram,指的是 Linux 项目中的 initramfs。
- 这两个对象是使用各自的工具编译的,正如您在 Makefile(帖子底部的 GitHub 链接)中看到的那样。它们针对格式,因为从我能收集到的信息来看,当 x86_64 CPU 处于 16 位真实模式时,这似乎是应该使用的格式(如果我错了,请告诉我)。如所示,它们确实具有这种格式。
elf32-i386
objdump -f *.o
- 然后,使用链接器脚本 () 将这两个对象链接在一起,使用 MEMORY 部分来确保遵守0x7c00偏移量,并为引导加载程序提供对 的引用。它链接到相同的格式(),然后复制到二进制文件中,这样我就可以有一些调试符号。
boot.ld
bootram_entry
elf32-i386
objcopy
gdb
这里有一个问题:当运行时,引导加载程序和引导程序都正确地编译为正确的格式,但拒绝它们说它们使用了错误的架构,尽管说它们没有。
你可以在这里找到我提到的内容的屏幕截图:make build
ld
objdump
源代码可以在这个临时存储库中找到:https://github.com/Akarys42/bootloader/tree/wip
如果你想尝试运行它,你显然需要 binutils、nasm、rust 和 cargo (nightly) 和组件 (cargo-src
rustup component add rust-src
)
任何帮助将不胜感激!先谢谢你!
答: 暂无答案
评论
-m elf_i386
--oformat elf32-i386