热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用u盘建立引导盘想法。

用软盘引导操作系统貌似比较老,现在已经没有软盘了,作为实机实验操作系统,应该用U盘比较稳妥。话说软盘格式为FAT12,而U盘的主流分区大多分为FAT32。所以二话不说就应该研究FAT32,

用软盘引导操作系统貌似比较老,现在已经没有软盘了,作为实机实验操作系统,应该用U盘比较稳妥。

话说软盘 格式为FAT12 ,而U盘的主流分区大多分为FAT32。

所以二话不说就应该研究FAT32,正好可以结合FAT12一同学习。

 

先回顾一下 详细的硬盘开机流程:

1、 BIOS加电自检(POST)
2、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;
3、 检查0000:7dfe是否等于0xaa55.(即Boot Sector 的最后一个字节)若不等于则转去尝试其他介质;  如果没有其他启动介质,则显示 ”No ROM BASIC” ,然后死机;

4、 跳转到0000:7c00处执行MBR中的程序;

5、 MBR先将自己复制到0000:0600处,然后继续执行;

6、 在主分区表中搜索标志为活动的分区.如果发现没有活动分区或者不止一个活动分区,则停止;

7、 将活动分区的第一个扇区读入内存地址0000:7c00处;

8、 检查0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试其他介质启动;

9、 跳转到0000:7c00处继续执行特定系统的启动程序;

 

总结一下过程 就是 硬盘第0扇区为MBR,开机自动读这个扇区到7c00h处,然后根据分区表DPT,找到活动分区,将引导代码(DBR)再次放到7c00h,然后加载LOADER.

至于为什么要加载loader是因为引导扇区(DBR),只有512字节,根本不够放下 转入保护模式和加载内核的任务,所以DBR只负责加载loader,让loader负责转入保护模式 和加载内核。(这就是所谓的突破512字节限制)

简化一下过程:

 

   mbr ->DPT(检索活动分区)->DBR(加载活动分区的主引导记录)-> loader(loader)

  所以:我们需要编写1. 存放到MBR中的程序,2.存放到DBR中的程序,3.loader文件

  即我们需要做一个功能比较完整的bootloader.

现在我们的工作重心 在MBR和 DBR上 先看一下简图 硬盘分区

硬盘 结构 大致为  MBR ( 不必紧挨着) 分区1,分区2,分区3 --------

MBR  由446字节代码 和DPT分区表 和 0xaa55引导标志组成。

DPT分区表记录着分区的物理地址和长度,还有很重要的一项是否活动的标志.

在FAT32的引导扇区DBR不只一个扇区,所以首扇区是万分重要的,需要有 魔数0x55aa表示可以引导,而且在上文的描述中可知:

MBR程序干的工作是把这个扇区加载到内存0X7C00处,如果分区引导记录内容超过512字节,我们必须利用首扇区把超过512字节的内容加载到内存中.

 

为了简化制作流程

1.U盘只有一个分区

2.U盘首扇区是整个U盘分区的分区引导记录,即(我们的主引导记录就是整个分区的引导记录)

3.整个引导代码(可以超过512字节,但是必须自己加载到内存中)目的是将LOADER文件.加载到内存某某区域

过程就简化成

开机->硬件加载MBR->在FAT32文件系统下搜索LOADER

 


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
author-avatar
2cz2x
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有