GRUB错误13:自定义内核上无效或不支持的可执行格式



我正在尝试学习OS Dev,我开始基于关于OS开发的小书构建自己的内核。

当我使用bochs加载内核时,GRUB报错:

error 13: invalid or unsupported executable format

我正在使用的文件:

loader.s

global loader
MAGIC_NUMBER equ 0xBADB002
FLAGS equ 0x0
CHECKSUM equ -MAGIC_NUMBER
section .text
align 4
    dd MAGIC_NUMBER
    dd FLAGS
    dd CHECKSUM
loader:
    mov eax, 0xCAFEBABE
.loop:
    jmp .loop

link.ld

ENTRY(loader)
SECTIONS
{
    . = 0x00100000;
    .text ALIGN (0x1000) :
    {
        *(.text)
    }
    .rodata ALIGN (0x1000) :
    {
        *(.rodata*)
    }
    .data ALIGN (0x1000) :
    {
        *(.data)
    }
    .bss ALIGN (0x1000) :
    {
        *(COMMON)
        *(.bss)
    }
}

bochsrc.txt

megs:              32
display_library:    sdl
romimage:           file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage:        file=/usr/share/bochs/VGABIOS-lgpl-latest
ata0-master:        type=cdrom, path=os.iso, status=inserted
boot:               cdrom
log:                bochslog.txt
clock:              sync=realtime, time0=local
cpu:                count=1, ips=1000000

menu.lst

default=0
timeout=0
title First OS
kernel /boot/kernel.elf

命令执行:

nasm -f elf32 loader.s
ld -T link.ld -melf_i386 loader.o -o kernel.elf
genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -A os -input-charset utf8 -quiet -boot-info-table -o os.iso iso
bochs -f bochsrc.txt

我的文件结构如下:

os_dev
  |--(rest of the files)
  |--iso
    |-- boot
      |-- kernel.elf
      |-- grub
        |-- menu.lst
        |-- stage2_eltorito

从https://github.com/littleosbook/littleosbook/blob/master/files/stage2_eltorito下载stage2_eltorito文件

Michael Petch注意到B. Kostas在Grub Legacy中使用了不正确的Magic Number。

loader.s中的MAGIC_NUMBER equ 0xBADB002改为MAGIC_NUMBER equ 0x1BADB002解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新