C++ grub mkrescue无法创建可引导CD映像

C++ grub mkrescue无法创建可引导CD映像,c++,x86,virtualbox,osdev,bootable,C++,X86,Virtualbox,Osdev,Bootable,我有这个iso图像,显然VirtualBox无法读取。我目前正在使用GRUB,并在下面的教程和OS-VM安装一集中进行介绍。我已经在屏幕上记录了错误,因为我在这里完成了以下步骤: 以下是我当前的文件: 生成文件: GPPARAMS = -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings ASP

我有这个iso图像,显然VirtualBox无法读取。我目前正在使用GRUB,并在下面的教程和OS-VM安装一集中进行介绍。我已经在屏幕上记录了错误,因为我在这里完成了以下步骤:

以下是我当前的文件:

生成文件:

GPPARAMS =  -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings
ASPARAMS =  --32
LDPARAMS =  -melf_i386
objects = kernel.o loader.o 

all:
    g++ -m32 -Iinclude -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -Wno-write-strings  -o kernel.o -c kernel.cc
    as $(ASPARAMS) -o loader.o loader.S

BoneOS.bin : linker.ld $(objects)
    ld $(LDPARAMS) -T $< -o $@ $(objects)

install: BoneOS.bin
    sudo cp $< /boot/BoneOS.bin

clean:
      rm $(objects)
      rm -rf iso

qemu_compile: all BoneOS.bin qemu


qemu:
    qemu-system-i386 -kernel BoneOS.bin 

BoneOS.iso: BoneOS.bin
    mkdir iso
    mkdir iso/boot
    mkdir iso/boot/grub
    cp BoneOS.bin iso/boot/BoneOS.bin
    echo 'set timeout=0'                      > iso/boot/grub/grub.cfg
    echo 'set default=0'                     >> iso/boot/grub/grub.cfg
    echo ''                                  >> iso/boot/grub/grub.cfg
    echo 'menuentry "My Operating System" {' >> iso/boot/grub/grub.cfg
    echo '  multiboot /boot/BoneOS.bin'    >> iso/boot/grub/grub.cfg
    echo '  boot'                            >> iso/boot/grub/grub.cfg
    echo '}'                                 >> iso/boot/grub/grub.cfg
    grub-mkrescue -o BoneOS.iso iso
iso/boot/grub/grub.cfg:

set timeout=0
set default=0

menuentry "My Operating System" {
  multiboot /boot/BoneOS.bin
  boot
}
由于某种原因,当通过VirtualBox运行上述代码时(上面的视频向您展示了我是如何做到这一点的),我收到了错误“错误:无法从可引导介质读取”。我们将不胜感激

编辑 不过,这里的问题是,出于某种原因,当我这样做时,它对qemu有效:

qemu-system-i386 -kernel BoneOS.bin 
但不显示菜单选项

与Qemu合作 当我运行命令时:

qemu-system-i386 -cdrom BoneOS.iso
我没有像Virtual Box那样的可引导设备,下面是一个viedo演示:


好多了!这一次,这个问题很有意义。@MichaelPetch我只是键入了“virtualbox”。我在命令上有点快。对不起。如果你想让QEMU从ISO启动,试试这个:
QEMU-system-i386-cdrom BoneOS.ISO
Edited question@MichaelPetch。没有任何可引导设备感觉到BSS段中的堆栈大小(2mb)可能导致GRUB工作不正常。尝试将堆栈大小更改为更小的大小。请使用
.space 16*1024
尝试16kb。
set timeout=0
set default=0

menuentry "My Operating System" {
  multiboot /boot/BoneOS.bin
  boot
}
qemu-system-i386 -kernel BoneOS.bin 
qemu-system-i386 -cdrom BoneOS.iso