打造操作系统(1.3)如何写入引导扇区
2014-06-18 19:07
155 查看
在1.1中说到,我们只要将一个长度为512字节的,末尾是0x55,0xAA两个字节这样的文件写入驱动器的第一个扇区,BIOS就会把它当做引导扇区加载到内存0x7c00处开始执行。我们使用的是软盘镜像,如何将生成的bin文件写入引导扇区呢?这就是我们这次需要解决的问题了。
其实一个软盘镜像非常简单,就是一个和对应的软盘内容一致的文件。也就是说,我们把我们的boot.bin写入到软盘镜像的最靠前那512字节处,那么久相当于写到了软盘镜像的第一个扇区,那样的话,问题就变得非常简单了。你也许也想到办法写一个了吧?
不过,你也许并不想自己写一个,那么就由笔者来DIY一个吧,以下便是floppywriter的源代码,非常简单。
笔者也不一一介绍了,代码比较简单,就是将文件读出来写入到目标文件中。完整的源码可以在此下载 点击打开链接
使用方法 floppywriter <bin file> <img file>
谢谢。如有疑问,可在评论中提出。
其实一个软盘镜像非常简单,就是一个和对应的软盘内容一致的文件。也就是说,我们把我们的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>
谢谢。如有疑问,可在评论中提出。
相关文章推荐
- 打造操作系统(1.4)将引导扇区写入U盘
- 打造操作系统(1.1)引导扇区
- 打造操作系统(1.2)引导扇区中的疑问
- 把自己的操作系统写入U盘(FAT32)引导扇区
- 自己动手写操作系统——(1)将引导写入U盘
- 如何开发自己的操作系统的引导程序?
- 操作系统引导扇区
- 利用bochs完成《orange's一个人的操作系统》引导扇区的实验
- 操作系统编写之引导扇区
- 关于使用UltraISO写入硬盘硬盘镜像...便捷启动...写入新的引导扇区...设备正忙的失败处理
- 如何引导启动多操作系统
- 简述如何引导启动多操作系统
- 《Orange's 一个操作系统的实现》学习笔记--一个简单的引导扇区
- 如何在从硬盘上安装可独立引导的操作系统
- 自己动手写操作系统-编写引导扇区
- 1.1_30天自制操作系统笔记_第一天_引导扇区
- NASM 纯汇编打造简单中文操作系统(1.boot.asm 操作系统的开始--引导程序)
- 如何修复扇区0中的引导代码
- lzg_ad:如何制作U盘引导的XPE操作系统
- 如何修复扇区0中的引导代码