遵循大量"如何构建自己的操作系统"教程,
我应该通过以下方式将自定义加载程序写入软盘启动扇区
#include <sys/types.h> /* unistd.h needs this */
#include <unistd.h> /* contains read/write */
#include <fcntl.h>
int main()
{
char boot_buf[512];
int floppy_desc, file_desc;
file_desc = open("./boot", O_RDONLY);
read(file_desc, boot_buf, 510);
close(file_desc);
boot_buf[510] = 0x55;
boot_buf[511] = 0xaa;
floppy_desc = open("/dev/fd0", O_RDWR);
lseek(floppy_desc, 0, SEEK_CUR);
write(floppy_desc, boot_buf, 512);
close(floppy_desc);
}
我没有带软盘驱动器的PC,我更喜欢通过VirtualBox在虚拟机上尝试整个项目。
那么如何将自定义引导扇区写入将由我的虚拟机调用的虚拟 CD 映像? :)
如果您有任何其他方法,请建议:)
(注意:这假设你在Linux上(
与其写入/dev/fd0
,这需要一个真正的软盘驱动器,你可以写入一些可用于启动VirtualBox的磁盘映像。但是,您需要将文件填充到 1.44MiB,因为这是典型的软盘。
更好的方法是首先创建引导扇区二进制文件(使用0xAA55"魔术代码"(,然后执行类似dd if=MyBootsectorBin of=Floppy.flp bs=512 count=2880
的操作来创建输出文件Floppy.flp。然后可以通过VirtualBox(或我的偏好QEMU,通过qemu -fda Floppy.flp
(启动。
我不确定虚拟 CD,但您可以轻松创建 ISO 以写入磁盘。为此所需的程序是 mkisofs,可以从这里阅读更多关于它的信息。