打造操作系统(1.3)如何写入引导扇区

操作系统学习笔记1 | 初识操作系统 操作系统是计算机硬件和应用软件之间的一层软件,方便我们使用硬件(比如显存)、高效地使用硬件(如打开多个终端和窗口):CPU管理、内存管理终端管理、磁盘管理文件管理、网络管理电源管理、多核管理而组成一个操作系统最基本的是前五个。学习操作系统可以有很多层次:大部分人停留在第一层,即使用操作系统的接口。而计算机专业学生应当能够掌控计算机系统,真正理解操作系统的工作原理。前面代码部分,分析了bootsect.s、setup、head.s、main.c、mem_init()... 阅读详情

在1.1中说到,我们只要将一个长度为512字节的,末尾是0x55,0xAA两个字节这样的文件写入驱动器的第一个扇区,BIOS就会把它当做引导扇区加载到内存0x7c00处开始执行。我们使用的是软盘镜像,如何将生成的bin文件写入引导扇区呢?这就是我们这次需要解决的问题了。

其实一个软盘镜像非常简单,就是一个和对应的软盘内容一致的文件。也就是说,我们把我们的boot.bin写入到软盘镜像的最靠前那512字节处,那么久相当于写到了软盘镜像的第一个扇区,那样的话,问题就变得非常简单了。你也许也想到办法写一个了吧?

不过,你也许并不想自己写一个,那么就由笔者来DIY一个吧,以下便是floppywriter的源代码,非常简单。

#include <stdio.h>
#include <Windows.h>

int main(int argc,char* argv[])
{
	unsigned char bufBootSector[512];
	if (argc != 3){
		printf("Incorrect paramter.\n");
		return -1; 
	}
	HANDLE hFile = CreateFile(argv[1],
		GENERIC_READ,
		0,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	DWORD dwFileSizeHigh = 0;
	DWORD dwFilesize = GetFileSize(hFile, &dwFileSizeHigh);
	if (dwFilesize != 512) {
		printf("File error.This file is not a boot sector maybe.\n");
		return 1;
	}
	DWORD dwRead = 0;
	if (!ReadFile(hFile, bufBootSector, dwFilesize, &dwRead, NULL)) {
		return 2;
	}
	CloseHandle(hFile);

	HANDLE hImage = CreateFile(argv[2],
		GENERIC_WRITE,
		0,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	SetFilePointer(hImage, 0, 0, FILE_BEGIN);

	DWORD dwBytesWritten;
	if (!WriteFile(hImage,
		bufBootSector,
		512,
		&dwBytesWritten,
		NULL))
	{
		printf("Writing sectors ...Failed  \n");
		return;
	}
	CloseHandle(hImage);
	return 0;
}

笔者也不一一介绍了,代码比较简单,就是将文件读出来写入到目标文件中。完整的源码可以在此下载  点击打开链接

使用方法 floppywriter <bin file> <img file>

谢谢。如有疑问,可在评论中提出。

自行打造一个全新的桌面操作系统:GrapeOS 系列教程 请记住,这只是一个简单的示例,你可以根据自己的需求和兴趣扩展和改进 GrapeOS。操作系统开发是一个庞大而复杂的领域,需要深入的知识和经验。我们将探索 GrapeOS 的开发环境,并提供编程学习的相关指导。了解如何处理中断和异常,并编写相应的中断处理程序是操作系统开发的重要一步。我们需要编写一个引导程序,将控制权从计算机的引导扇区传递给我们的操作系统。在开始编写操作系统的具体代码之前,我们需要掌握一些汇编语言的基础知识。你可以根据需要扩展这些服务,以满足你的操作系统的要求。函数是内核的入口点。 阅读详情

相关推荐

从零开始制作bin文件:图解教程

简介:本教程旨在指导读者如何制作二进制执行文件(bin文件),这对于掌握低级编程语言如C、汇编等尤其重要。将通过图文演示,从编程语言选择到编译器配置,再到实际编译和转换步骤,以及最终的文件验证和注意事项,逐步讲解制作bin文件的全过程。

weixin_33628677的博客 2345

orange's学习--第四章:a 能够被DOS以及 Linux识别的软盘

为了变成能够被DOS以及 Linux识别的软盘,必须给引导扇区增加BPB块 使用bximage.exe命令生成a.img, 刚生成的a.img文件内容都是0x00, nasm boot.asm -o boot.bin dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc 把生成的boot.bin写入磁盘引导扇区,使用虚拟机执行仍然可以...

交换ab:a=a^b;b=a^b;a=a^b; 411

floppy writer2.0

可以从多个bin文件写入一个磁盘镜像文件。

自己动手写操作系统 将引导程序成功写入优盘启动电脑

输入命令: nasm boot.asm -o boot.bin   一会儿就生成了一个镜像文件boot.bin. 该文件就是我所谓的操作系统了。哈哈!其实只是一个boot sector而已。但是这个是我们步入操作系统的第一步, 跨过了这一步,以后就海阔天空 理论上偶也只是使用了10分钟左右写完成了。   但是,令人恼火的是,书中介绍的是将该image写入flop

计算机的自我意识 1万+

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战

本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。

weixin_42103128的博客 148

Open3D 基于法线的双边滤波

基于法线的双边滤波是一种用于点云平滑的技术,它结合了点与其邻域点之间的几何距离和法线方向的相似性,从而在去除噪声的同时保留几何特征。这种滤波方法广泛应用于点云处理领域,尤其是在需要保留表面细节和边缘的场景中。

纵马踏花向自由 2500

SD卡引导扇区读写失败

引导扇区的逻辑扇区为0,但是物理扇区是97,而我们用SPI接口读取SD卡索对应的地址是物理地址,所以修改fatfs的读取引导扇区地址为97,SD卡即可正常读写。

LZPRO的博客 1664

Imagenet数据集1000类别中英文

英文 {0: 'tench, Tinca tinca', 1: 'goldfish, Carassius auratus', 2: 'great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias', 3: 'tiger shark, Galeocerdo cuvieri', 4: 'hammerhead, hammerhead shark', 5: 'electric ray, cram.

识物专栏 1800

c把bin二进制文件写入磁盘任意扇区

使用nasm编译好bootloader的bin文件,写入磁盘第一扇区 //编译 nasm -f bin boot.asm -o boot.bin // 然后以【管理员权限】运行下面编译的c程序 PHYSICALDRIVE3 后面的数字,表示磁盘序号,可以右键看--此电脑(我的电脑)--管理--磁盘管理,下面写的,磁盘0,磁盘1 /*读取asm编译好的bin字节文件,写入加载的vhd磁盘扇区 **...

老专家的博客 2389

Adams Car——Adams car与Simulink联合仿真

Adams与simulink悬架联合仿真

Mr.邹的博客 2127

【人工智能之深度学习】21. 自动驾驶感知实战:YOLOv4复杂天气优化方案(BDD100K全代码+效果对比)

摘要:自动驾驶摄像头在雨雾天气下易受图像模糊、目标遮挡影响,导致YOLOv4检测精度骤降。本文基于BDD100K公开数据集(含多天气场景),设计三阶段优化方案:1)物理建模生成雨雾效果(雨滴线条+大气散射模型),将恶劣天气样本占比从20%提升至40%;2)在YOLOv4颈部嵌入CBAM注意力机制,强化模糊区域特征提取;3)L1剪枝(30%)+TensorRT量化实现轻量化。需特别说明:本文为教学虚拟案例,不可直接用于车载部署,实际落地需结合多传感器融合与ISO 26262认证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1685

打造操作系统(1.4)将引导扇区写入U盘

之前说到如何将引导扇区文件写入到软盘镜像中

不是油条 2914

通过傅里叶变换进行音频变声变调

在游戏或者一些特殊场景下为了提高娱乐性或者保护声音的特征,我们会对音频进行变声变调处理。

yang1fei2的博客 1817

30天自制操作系统 - 取代软盘,用U盘写入引导扇区

背景 作者是在2006年发布此书的(翻译版是在2012年在中国发售),当时可能还能找到带有软驱的计算机。但是时过境迁,现在已经不存在这种老古董东西了。 简单总结一下学习到第三天的一些更变。 更变 书籍里用的是nask这款作者自制的汇编语言编译器,ReactOS的实模式部分是用nasm写的,还是用nasm改造一下好。 已经有文章阐述如何把简单的代码改为nasm格式,《nask与nasm代码...

清风徜徉,悠闲品茶 5518

Spring AI从入门到精通:构建智能Spring应用的全面指南

随着人工智能技术的快速发展,将大语言模型(LLM)与企业应用集成已成为趋势。Spring AI作为Spring官方推出的AI集成框架,为开发者提供了便捷、标准化的方式来构建智能应用。本文将从基础概念到高级应用,全面介绍Spring AI的核心功能与实践技巧。Spring AI 是 VMware 于 2023 年推出的开源框架,旨在简化大语言模型(LLM)与 Spring 应用的集成。它提供了统一的 API 抽象,支持多种 LLM 供应商,包括 OpenAI、Azure OpenAI、Hugging Face

qq_36929638的博客 1069

Vue3 - [兼容PC和手机H5] 详细监听浏览器刷新 / 关闭 / 前进后退事件,用户点击关闭和刷新页面前 “拦截“ 操作并弹出提示框(实时监听用户关闭或刷新网页,触发时文字提醒并执行自定义操作)

vue3监听页面关闭和刷新,vue3中如何监听页面刷新和关闭事件,vue3中监听浏览器窗口关闭事件,并在窗口关闭进行操作,vue3怎么只在某个页面监听,其他页面不监听,vue3监听刷新和关闭怎么离开页面时注销释放,vue3怎么阻止浏览器前进和后退并提示,页面跳转离开后依旧可以监听到刷新和关闭,vue3怎么知道用户关闭了网页,vue3如何监听刷新网页操作并截断,vue3移动端手机h5网页手机网站监听浏览器刷新关闭,vue3当页面关闭或刷新时怎么提示用户离开不保存数据,vue3项目监听浏览器窗口或标签页关闭,并

🏆 前端领域优质创作者 1万+

UltraISO提取引导扇区用于GLM系统镜像定制

通过UltraISO提取并修改ISO引导扇区,实现GLM-4.6V-Flash-WEB模型的一键启动镜像。结合mkisofs自动化构建,确保开箱即用的推理服务与Jupyter环境,降低AI部署门槛,提升交付体验。

weixin_42393362的博客 773

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

打造操作系统(1.2)引导扇区中的疑问

上回(1.1)我们成功的制作出了一个可引导计算机启动的引导扇区,不过,

不是油条 1396

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C语言打造迷你操作系统:3天掌握内核初始化、GDT设置与中断处理

掌握C语言实现简易操作系统内核入门方法,3天学会内核初始化、GDT设置与中断处理。适用于操作系统初学者,深入浅出讲解底层原理与关键代码实现,助你构建专属迷你系统,值得收藏。

SimSolve的博客 739

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

操作系统DIY手册

导读:   操作系统DIY手册   第一课:引导扇区   (Lesson 1: The Boot Record)   这一课主要介绍引导扇区(Boot Record),为我们手动打造引导程序(boot loader)作准备。   当计算机从软盘引导时,BIOS(Basic Input/Output System)将软盘的第一个扇区(sector)读入内存(从地址0000:7C00开始读入)。这第一

SnowCat的小窝 1092

从零开始打造Windows式图形化操作系统(完整版)

操作系统开发是计算机科学领域的珠穆朗玛峰,需要开发者具备扎实的计算机体系结构知识、底层编程能力和系统设计思维。本文提供的开发路线和关键技术解析,可作为初学者的入门指南。建议结合开源项目源码进行实践,在调试与优化中深化理解。随着技术进步,操作系统开发领域不断涌现新的挑战与机遇,期待更多开发者投身这一充满魅力的领域。

2503_90355289的博客 867

手把手教你用Ubuntu搭建哈工大操作系统实验环境(含bootsect.s修改指南)

本文详细指导读者在Ubuntu系统上搭建哈工大操作系统实验环境,并重点解析与修改引导程序bootsect.s。内容涵盖虚拟机配置、工具链安装、源码获取,以及bootsect.s和setup.s的编译、修改与调试实战,帮助学习者深入理解x86实模式引导流程,亲手完成从环境搭建到代码修改的全过程。

nut55的博客 160

uCore操作系统动手实践指南:从零构建自己的操作系统内核

你是否曾经想过亲手打造一个操作系统?现在,通过uCore操作系统实验,你可以实现这个梦想!这个源自清华大学的教学项目,通过8个精心设计的实验模块,让你在动手实践中深入理解操作系统原理。无论你是计算机专业学生,还是对系统底层感兴趣的开发者,uCore都能带你从零开始,一步步构建功能完整的操作系统内核。 ## 挑战一:如何快速搭建实验环境? **问题场景**:初次接触系统编程,面对复杂的开发环境配

gitblog_00087的博客 782

用汇编语言打造自启动游戏系统:FloppyBird项目技术解析

FloppyBird是一个独特的开源项目,它将经典的Flappy Bird游戏以16位汇编语言重新实现,并且不需要任何底层操作系统支持——它本身就是一个独立的操作系统。这个项目不仅展示了汇编语言的强大能力,也为学习计算机底层原理提供了绝佳实践案例。 ## 探索核心特性:技术亮点解析 ### 1. 裸机运行架构 FloppyBird最显著的特点是它不需要依赖任何操作系统。项目直接通过引导扇区代码

gitblog_00060的博客 358

从零构建操作系统的终极指南:30天完整实践路径

你是否曾好奇计算机从通电到显示"hello, world"的完整过程?是否想过亲手打造一个能运行图形界面、多任务处理和小游戏的操作系统?30dayMakeOS项目为你提供了从零开始构建操作系统的完整解决方案,通过30天的渐进式学习,你将掌握操作系统开发的核心技术,最终拥有一个功能完整的自制操作系统。 ## 操作系统开发的三大核心挑战与解决方案 ### 挑战一:计算机启动的"第一行代码" 传统

gitblog_01154的博客 220

如何从零构建操作系统:30天自制操作系统完全实践指南

你是否曾好奇计算机开机后第一个程序如何运行?想亲手打造一个属于自己的操作系统吗?30dayMakeOS项目为你提供了一个完整的学习路径,通过30天的渐进式开发,让你从零开始构建一个功能完整的操作系统。这个项目不仅教你操作系统开发的核心技术,还提供了完整的源码和实践指导,是学习底层系统编程的绝佳资源。 ## 🚀 操作系统开发入门:从引导程序到保护模式 操作系统的开发之旅从最基础的引导程序开始。

gitblog_00345的博客 266
上一篇: 打造操作系统(1.2)引导扇区中的疑问
下一篇: 打造操作系统(1.4)将引导扇区写入U盘
Hackeris
博客等级 码龄16年 18粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值