为什么 grub-file 说 NASM 原始二进制文件不兼容 multiboot2?
Why does grub-file say that NASM raw binary is not multiboot2 compliant?
我正在尝试制作一个最小内核。我的目标是使这个 not-yet-existing 内核与 multiboot2 兼容。所以我开始在 NASM-Assembly.
中创建一个最小的 multiboot2-header
我正在使用 grub-file 来测试我的二进制文件是否兼容。
问题:当我 assemble 我的文件到 elf32 时,grub-file 很高兴。
但是,当我 assemble 我的 header 使用 nasm 转换为原始二进制文件时,生成的文件不兼容。
这是为什么?在 multiboot2 规范中没有指定具体的 executable-format。
multiboot2header.asm:
section .multiboot
align 8,db 0
multibootheader_start:
dd 0xE85250D6
dd 0
dd (multibootheader_end - multibootheader_start)
dd -(0xE85250D6 + multibootheader_end - multibootheader_start)
multibootheader_end:
NASM 命令:
nasm -felf32 multiboot2header.asm -o multiboot2header.bin
nasm -fbin multiboot2header.asm -o multiboot2header.bin
grub-file 命令:
grub-file --is-x86-multiboot2 multiboot2header.bin
我怀疑问题是由于没有 address tag
结构引起的(参见 https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html#Address-header-tag )。
这个标签对于精灵格式的文件是可选的(因为引导加载程序可以只使用精灵的头文件);但在其他情况下是必需的(因为引导加载程序不知道在哪里加载文件)。
我正在尝试制作一个最小内核。我的目标是使这个 not-yet-existing 内核与 multiboot2 兼容。所以我开始在 NASM-Assembly.
中创建一个最小的 multiboot2-header我正在使用 grub-file 来测试我的二进制文件是否兼容。
问题:当我 assemble 我的文件到 elf32 时,grub-file 很高兴。 但是,当我 assemble 我的 header 使用 nasm 转换为原始二进制文件时,生成的文件不兼容。
这是为什么?在 multiboot2 规范中没有指定具体的 executable-format。
multiboot2header.asm:
section .multiboot
align 8,db 0
multibootheader_start:
dd 0xE85250D6
dd 0
dd (multibootheader_end - multibootheader_start)
dd -(0xE85250D6 + multibootheader_end - multibootheader_start)
multibootheader_end:
NASM 命令:
nasm -felf32 multiboot2header.asm -o multiboot2header.bin
nasm -fbin multiboot2header.asm -o multiboot2header.bin
grub-file 命令:
grub-file --is-x86-multiboot2 multiboot2header.bin
我怀疑问题是由于没有 address tag
结构引起的(参见 https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html#Address-header-tag )。
这个标签对于精灵格式的文件是可选的(因为引导加载程序可以只使用精灵的头文件);但在其他情况下是必需的(因为引导加载程序不知道在哪里加载文件)。