分享

自己动手写一个操作系统MBR(1)

 山峰云绕 2023-04-07 发布于贵州

前言

上篇《自己动手写一个操作系统——我们能做什么,我们需要做什么》我们介绍到 BIOS 会遍历每个磁盘的第一个扇区查找 MBR,找到后便将 MBR 加载到内存并跳转过去。如果没找到,就会报错,无法启动。

MBR

接下来,我们就编写(制作)一个 MBR。
BIOS 识别 MBR 的唯一条件就是,第一个扇区的最后两个字节为 0x55 和 0xAA,而不管前 510 个字节是什么数据。就算前 510 个字节是错误的数据(指令),CPU 也照样取出指令去执行,大不了就是跑飞呗。
所以,我们制作一个简单的 MBR

  • 1) 大小为 512 字节

  • 2) 最后两个字节为 0x55 和 0xAA

  • 3) 前 510 字节全为 0

1) 512 字节镜像

dd if=/dev/zero of=${OUTPUT}/mbr.img bs=512 count=1

2) 0x55 和 0xAA

最后两个字节修改为 0x55 和 0xAA
vim -b mbr.img

:%!xxd -g 1
# 最后两个字节修改为 55 AA
:%!xxd -r
:wq

qemu 运行

qemu-system-i386 -daemonize -m 128M -drive file=output/mbr.img,index=0,media=disk,format=raw

在这里插入图片描述
说明 BIOS 已经检测到了 MBR。🆗
如果没有检测到(我们手动将 0x55 和 0xAA 修改成 0x00),是下面这种情况:
在这里插入图片描述

not a bootable disk
No bootable device

参考

在Linux下使用vim配合xxd查看并编辑二进制文件


https://liyongjun.blog.csdn.net/article/details/128755066?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-13-128755066-blog-129230913.235%5Ev28%5Epc_relevant_default_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-13-128755066-blog-129230913.235%5Ev28%5Epc_relevant_default_base1&utm_relevant_index=17

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约