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

news2024/11/15 12:46:54

文章目录

    • 前言
    • 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。 🆗
如果没有检测到(我们手动将 0x55 和 0xAA 修改成 0x00),是下面这种情况:
在这里插入图片描述

not a bootable disk
No bootable device

参考

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红黑树和平衡二叉树的区别

一.红黑树的定义 1.节点是红色或者黑色; 2.根节点和叶子节点是黑色,叶子节点为空节点; 3.每个红色节点的叶子节点都是黑色; 4.从任何节点到叶子节点的所有路径包含相同数目的黑色节点; 5.红黑树实现平衡和保持红黑…

代码随想录算法训练营三期 day 25 - 回溯 (2) (补)

216. 组合总和III 题目描述: 216. 组合总和 III 原文链接: 216. 组合总和 III 视频链接: 216. 组合总和 III 树形结构 回溯三部曲: ① 确定回溯函数参数及返回值 和 77. 组合 一样,依然需要一维数组 path 来存放符合条件的结果,二维数组 r…

leetcode-每日一题-计算应缴税款总额(简单,数学逻辑)

给你一个下标从 0 开始的二维整数数组 brackets &#xff0c;其中 brackets[i] [upperi, percenti] &#xff0c;表示第 i 个税级的上限是 upperi &#xff0c;征收的税率为 percenti 。税级按上限 从低到高排序&#xff08;在满足 0 < i < brackets.length 的前提下&am…

(19)go-micro微服务filebeat收集日志

文章目录一 Filebeat介绍二 FileBeat基本组成三 FileBeat工作原理四 Filebeat如何记录文件状态:五 Filebeat如何保证事件至少被输出一次六 安装Filebeat七 使用Filebeatfilebeat.yml编写八 最后一 Filebeat介绍 filebeat是Beats中的一员。 Beats在是一个轻量级日志采集器&…

2022——>2023

2022年对于我来说&#xff0c;是极其不平凡的一年&#xff0c;因为在这一年&#xff0c;我面临了人生的第一次重大的选择——高考。老师们常说&#xff1a;“一分压倒一操场人。”这句话是我高考看完自己的成绩之后深有体会的。超过湖南本科线没几分的我&#xff0c;志愿真的是…

剖析“类和对象” (中) -------- CPP

在上一篇博客中 (剖析“类和对象” (上) -------- CPP) 提到&#xff0c;一个类中什么成员都没有的称为“空类”。一个“空类”中真的什么都没有吗&#xff1f; 其实不然&#xff0c;任何类中什么都不写时&#xff0c;编译器会自动生成一下六个默认成员函数。 默认成员函数&am…

Fisco Bcos区块链二(搭建使用控制台,体验Holleworld合约调用)

文章目录区块链开荒技术文档&#xff1a;https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/index.html2. 配置及使用控制台准备依赖启动并使用控制台3. 部署及调用HelloWorld合约编写HelloWorld合约&#xff08;此处不需要编写&#xff0c;控制台已内置&#xff…

【每日一道智力题】之海盗分金币(上)

文章目录题目&#xff1a;解答&#xff1a;题目变形&#xff1a;解答&#xff1a;总结题目&#xff1a; 5个海盗抢到了100枚金币&#xff0c;每一颗都一样的大小和价值。 他们决定这么分&#xff1a; 抽签决定自己的号码&#xff08;1&#xff0c;2&#xff0c;3&#xff0c;4…

IDEA 2022 创建 Spring Boot 项目详解

如何用 IDEA 2022 创建并初始化一个 Spring Boot 项目&#xff1f; 目录 如何用IDEA 2022创建并初始化一个Spring Boot项目&#xff1f; 0. 环境说明 1. 创建Spring Boot项目 2. 编写初始化代码 0. 环境说明 IDEA 2022.3.1JDK 1.8Spring Boot 1. 创建 Spring Boot 项目…

Linux常用命令——smbclient命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) smbclient 交互方式访问samba服务器 补充说明 smbclient命令属于samba套件&#xff0c;它提供一种命令行使用交互式方式访问samba服务器的共享资源。 语法 smbclient(选项)(参数)选项 -B<ip地址>&…

【SpringCloud20】SpringCloud Alibaba Seata处理分布式事务

目录1.分布式事务问题2.Seata简介2.1 是什么2.2 作用2.3 下载2.4 如何使用3.Seata-Server安装3.1 下载网址3.2 下载版本3.3 seata解压到指定目录并修改文件3.3.1 nacos新增配置文件3.3.2 修改application.yml3.4 数据库新建seata3.5 在seata里建表3.6 启动Nacos端口号88483.7 启…

Spring介绍

Spring是分层的全栈式的轻量级开发框架,以IOC和AOP为核心,官网是https://spring.io Spring优势 1 方便解耦,简化开发 Spring通过容器,将对象的创建从代码中剥离出来,交给Spring控制,避免直接编码造成模块之间的耦合度高,用户也不必自己编码处理对象的单例和多例控制,主要关注接…

C语言基础知识(36)

C语言中的数组和指针有什么区别数组和指针之间的一个重要区别是数组中元素的地址始终是固定的&#xff0c;不能在执行时修改地址&#xff0c;但对于指针&#xff0c;可以根据需要更改指针的地址。分支结构1.简单if语句C语言中的分支结构语句中的if条件语句。简单if语句的基本结…

Linux内核驱动初探(一) LVDS显卡

目录 0. 前言 1. menuconfig 2. 编译报错与打补丁 3. 设备树与display-timings 4. 拓展&#xff1a;RGB24 0. 前言 这次的工作主要是把某项目设备上(iMX6DL)的内核版本从 4.19.x 升级到 5.15.32&#xff0c;是作为该项目整个BSP升级计划的一部分。 该内核升级工作移交给…

PX4+Offboard模式+代码控制无人机起飞(Gazebo)

参考PX4自动驾驶用户指南 https://docs.px4.io/main/zh/ros/mavros_offboard_cpp.html 新建ros项目工程 mkdir -p px4_offboard_ws/src接着进入文件编译一下 cd px4_offboard_ws catkin_make进入src目录&#xff0c;创建ros功能包 catkin_create_pkg t1_offboard_rtakeoff …

Springboot+vue基于java的家教管理平台

系统分为用户和管理员&#xff0c;教师三个角色 用户的主要功能有&#xff1a; 1.用户注册和登陆系统 2.查看系统的公告信息 3.用户查看家教教师简历信息 4.用户查看课程信息 5.用户查看招聘教师信息&#xff0c;在线应聘教师 6.用户个人中心修改个人资料&#xff0c;修改密码…

Python数据清洗2

一、函数数据处理 1.在dataframe中使用apply方法&#xff0c;调用自定义函数对数据进行处理 2.可以使用astype函数对数据进行转换 3.可以使用map函数进行数据转换 二、数据分组运算 1.使用groupby方法进行分组计算&#xff0c;得到分组对象GroupBy 2.语法为df.groupby(…

在甲骨文云容器实例(Container Instances)上部署chrome

甲骨文云推出了容器实例&#xff0c;这是一项无服务器计算服务&#xff0c;可以即时运行容器&#xff0c;而无需管理任何服务器。 今天我们尝试一下通过容器实例部署chrome。 Step1. 创建容器实例 在甲骨文容器实例页面&#xff0c;单击"创建容器实例"&#xff0c;…

LInux(四)进程控制(创建、终止、等待、替换)

目录 一、进程创建 1、pid_t fork(void) 2、写时拷贝技术&#xff08;父子进程间代码共享、数据独有&#xff09; 3、vfork()--创建一个子进程 4、fork创建子进程流程是什么样的&#xff1f; 5、一个关于fork的程序 6、程序a 7、 程序b 二、进程终止 1、在main函数中…

E2PROM 蓝桥杯 stm32 AT24C02读写函数

本文 代码使用 HAL 库 。 文章目录前言一、AT24C02 读写函数&#xff1a;1. 读函数2. 写函数&#xff1a;二. AT24C02 读写地址&#xff0c;原理图三. 延时问题总结下一节讲解 MCP4017。使用 E2PROM 来计算板子的上电次数 实验效果。前言 本文 先列出 AT24C02 读写函数 &#…