X86 使用QEMU从usb驱动器引导

X86 使用QEMU从usb驱动器引导,x86,qemu,bootloader,osdev,X86,Qemu,Bootloader,Osdev,我在玩我的爱好。 它有一个简单的BIOS,用于从usb驱动器加载数据 如果我像这样运行qemu,我的引导加载程序可以完美地读取扇区: $ qemu-system-i386 -usb -usbdevice disk:sos.img 但如果我尝试从物理设备启动: $ sudo dd if=sos.img of=/dev/sdb $ sudo qemu-system-i386 -usb -usbdevice disk:/dev/sdb 引导加载程序无法读取扇区 从qemu的角度来看,图像文件和us

我在玩我的爱好。 它有一个简单的BIOS,用于从usb驱动器加载数据

如果我像这样运行qemu,我的引导加载程序可以完美地读取扇区:

$ qemu-system-i386 -usb -usbdevice disk:sos.img
但如果我尝试从物理设备启动:

$ sudo dd if=sos.img of=/dev/sdb
$ sudo qemu-system-i386 -usb -usbdevice disk:/dev/sdb
引导加载程序无法读取扇区


从qemu的角度来看,图像文件和usb设备之间有什么区别

胡乱猜测:可能是您将映像写入驱动器(
/dev/sdb
)而不是分区(
/dev/sdb1
)的问题。这可能是各种问题的原因(例如缺少分区表)。嗯,驱动器未分区。我相信BIOS读取原始扇区。也许它甚至不了解文件系统。这肯定不是问题所在,但在初始化段之后执行任何内存操作。将mov[boot_disk],dl向下移动几行。此外,在放弃之前尝试读取几次并打印错误代码(在这种情况下很方便)也是一种很好的做法。除了Margaret关于
dl
的评论外,您使用
磁盘时:
是错误的。这只适用于文件,而不适用于设备。不过,您可以使用USB进行此操作。运行命令
lsusb
。找到您的存储设备。记下将为xxxx:xxxx的ID。现在使用
sudo qemu-system-i386-usb-usbdevice host:xxxx:xxxx
运行qemu,其中xxxx:xxxx是
lsusb
中的ID号,以确保完整性: