文章目录

  • 前言
  • MBR
    • 1) 512 字节镜像
    • 2) 0x55 和 0xAA
  • qemu 运行
  • 参考

前言

上篇《自己动手写一个操作系统——我们能做什么,我们需要做什么》我们介绍到 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。

自己动手写一个操作系统——MBR(1)相关推荐

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

    前言 上篇文章<自己动手写一个操作系统--MBR(1)>,我们使用 dd 生成了一个 512 字节的镜像,并用 vim 将其最后两个字节修改成了 55 AA,以此来完成了 MBR 的构建. ...

  2. 自己动手写一个操作系统——MBR(4)_调试_elf_bin

    文章目录 前言 elf 文件 指定代码入口地址 添加调试信息 代码 检验 调试 小结 前言 通过 GDB 我们可以跟踪程序的执行, 并且能够看到寄存器的状态, 但是,上面这种调试方式,没有和代码对应起 ...

  3. 自己动手写一个操作系统——loader(1)

    前言 上篇文章中,我们写了一个简单的 loader 作为被加载的演示对象.我们知道 loader 是用来加载 kernel 的,今天我们就编写 loader 代码完成这件事情. 实模式下的内存地址 我 ...

  4. 自己动手写一个操作系统——我们能做什么,我们需要做什么

    文章目录 计算机启动流程 第一条指令 BIOS MBR loader kernel 总结 计算机启动流程 第一条指令 在开机的一瞬间,也就是上电的一瞬间,CPU 的 CS:IP 寄存器被硬件强制初始化 ...

  5. 写一个操作系统有多难?自制 os 极简教程

    不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...

  6. (1)从1开始写一个操作系统

    第一章 前言 偶然间使用到了RTX51-tiny做一些东西,它是keil自带的51操作系统,以小巧占用资源少著称,这里不细谈它是如何实现的,反正是一个真正的基于时间片的多任务系统. 往往我们在使用单片 ...

  7. [从 0 开始写一个操作系统] 一、准备知识

    从 0 开始写一个操作系统 作者:解琛 时间:2020 年 8 月 29 日 从 0 开始写一个操作系统 一.准备知识 1.1 实现方案 1.2 gcc 1.2.1 AT&T 汇编基本语法 1 ...

  8. java 手编线程池_死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  9. 自己动手写一个印钞机 第四章

    2019独角兽企业重金招聘Python工程师标准>>> 作者:阿布? 未经本人允许禁止转载 ipython notebook git版本 目录章节地址: 自己动手写一个印钞机 第一章 ...

最新文章

  1. android 投影仪,不要购买投影仪, 安卓手机投屏很简单, 每个手机都可以
  2. Java程序员从笨鸟到菜鸟之(四)java开发常用类(包装,数字处理集合等)(上)
  3. iOS开发(10)UISegmentedControl
  4. maven项目中找不到Maven Dependencies解决办法
  5. 边缘提取和场景分割 学派?
  6. python opencv 图像添加噪声_opencv+python同时加椒盐噪声和随机杂点噪声
  7. Spring Boot配置文件application.properties
  8. 最新升学e网通JS逆向分析
  9. hdu4504java
  10. 海贼王里面路飞的一些台词翻译
  11. Facebook十大失误回顾
  12. 代码审计| HDWiki 漏洞(一)
  13. 一篇13年前的采访|庚顿首席科学家孙宝元:从数据融合起步,瞄准创造价值,打造助力智能化生产的利器
  14. vue 根据身份证号获取性别,年龄,出生年月
  15. mysql数据库实验+cmd界面运行基本操作总结(sql:数据增删改查,表格,视图,备份恢复)
  16. pip或pip3安装报错Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming。。。
  17. Labview Socket通讯_通讯板卡
  18. k8s之HPA(Pod水平自动伸缩)
  19. 剑指offer练习日志02:基于矩阵乘法求斐波那契数列通项
  20. 阿里Buy+技术尚不完善,VR购物距离我们还很遥远

热门文章

  1. 电脑或U盘文件夹变为后缀为.exe文件,解决办法。
  2. Linux命令df和du
  3. 作为一个食品专业的本科生 我对我们专业是彻底失望了[转帖]
  4. Windows11 Android Srudio无法连接手机,报错Error initializing ADB: Unable to create Debug Bridge
  5. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx分解线xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  6. apk protect下载地址
  7. Activiti集成Activiti Modeler
  8. 数字平原CG场景搭建制作流程解析
  9. Python函数里的爱情故事
  10. python 类初学之 小猫