读写U盘(FAT32)引导扇区

GD32+FATFS+SDIO OLED播放视频 移植 踩坑 Bad Apple 分享移植FATFS过程中的流程以及踩坑记录。 阅读详情
看了《自己动手写操作系统》后,也想自己打造一个迷你操作系统,但是书中使用的软盘现在基本已经绝迹了,而U盘成为一种喜闻乐见的工具。因此想将操作系统写入U盘中,而读写U盘的引导扇区成为成功的关键。

       将U盘格式化为FAT32文件系统,要读写U盘的引导扇区,需要首先了解FAT32的格式。它包含四个部分:

保留扇区 | FAT1 | FAT2 | 数据区。需要注意的是:保留扇区的第一个扇区是引导扇区(DBR)。

其中引导扇区的数据结构为:

数据区的开始为主目录区,主目录区包含了文件的熟悉,数据结构如下:

根据每个文件起始的簇号,就可以找到文件内容的绝对扇区起始位置

文件的簇号在FAT表中安装链表的形式存放,文件的属性在主目录区安装数组的形式存放。

文件内容的绝对扇区起始位置 = 保留扇区 + FAT1 + FAT2 + (起始簇号 -2)*每簇的扇区数

然后编写引导程序,读入U盘引导扇区,选择从U盘启动,就可以看到自己打造的U盘操作系统了

引导程序的汇编代码如下:

[c-sharp] view plain copy
  1. org 07c00h  
  2. jmp short LABEL_START  
  3. nop  
  4.   
  5. OEM                   db  'Dirichet'            ;//8Bytes  
  6. Bytes_per_sector      dw   512  
  7. Sectors_per_cluster   db   8  
  8. Reserved_sectors      dw   584  
  9. Number_of_FATs        db   2  
  10. Root_entries          dw   0  
  11. Sectors_small         dw   0  
  12. Media_descriptor      db   0f8h  
  13. Sectors_per_FAT_small dw   0  
  14. Sectors_per_track     dw   63  
  15. Heads                 dw   255  
  16. Hidden_sectors        dd   63  
  17. Sectors               dd   3902913  
  18.   
  19. Sectors_per_FAT       dd   3804  
  20. Extended_flags        dw   0  
  21. Version               dw   0  
  22. Root_dir_1st_cluster  dd   2  
  23. FSInfo_sector         dw   1  
  24. Backup_boot_sector    dw   6  
  25. times 12 db 0  
  26.   
  27. BIOS_drive            db   80h  
  28. db 0  
  29. Ext_boot_signature    db   29h  
  30. Volume_serial_number  dd   15329558  
  31. Volume_label          db   'Dirichlet09'       ;//11个字节  
  32. File_system           db   'FAT32   '          ;//8个字节             
  33.   
  34. LABEL_START:  
  35.   mov  ax,cs  
  36.   mov  ds,ax   
  37.   mov  es,ax  
  38.   call DispStr  
  39.   jmp  $  
  40.   
  41. DispStr:  
  42.   mov ax,BootMessage  
  43.   mov bp,ax  
  44.   mov cx,15  
  45.   mov ax,01301h  
  46.   mov bx,000ch  
  47.   mov dl,0  
  48.   int 10h  
  49.    
  50.   BootMessage:  db  'hello, kitty!', 13, 10, '$'   
  51.   times 510-($-$$) db 0  
  52.   dw 0xaa55   

 

C/C++底层实现FAT文件系统读写:从引导扇区到簇链遍历 文件系统是操作系统管理存储设备的核心组件,它定义了数据在磁盘上的组织方式。其基本原理是通过元数据(如目录项、分配表)来映射逻辑文件与物理扇区,实现文件的创建、读取、写入和删除。FAT(File Allocation Table)文件系统因其结构清晰、广泛兼容,成为理解文件系统原理的经典模型,在嵌入式系统、数据恢复和存储驱动开发中具有重要技术价值。通过手动解析引导扇区、文件分配表和目录项,开发者可以深入掌握存储管理、字节序处理及缓存优化等底层技能。本文聚焦于使用C/C++直接操作FAT结构,涵盖引导扇区解析、 阅读详情

相关推荐

STM32/GD32 USB Host U盘读写:时钟、枚举与FatFs避坑

USB Host主机模式让MCU主动完成供电检测、端口复位、设备枚举和类驱动调度,是嵌入式系统接入U盘、实现文件级读写的常见基础能力。其原理不只是在代码里调用f_read,而是要先保证48MHz USB时钟精度、VBUS限流与中断优先级,再通过枚举状态机识别设备,并由MSC类的Bulk-Only传输以CBW/CSW完成SCSI命令交互,最终由FatFs解析分区与文件系统。稳定的USB Host U盘读写可用于工业设备日志导出、参数备份、固件升级包读取和现场数据采集等场景。围绕STM32/GD32平台,从时钟

weixin_29166013的博客 222

GD32450Z U盘通信教程——使用USBHS利用内部全速PHY作为USB MSC主机实现U盘通信

本文为学习记录,介绍了在主机模式下,利用内部PHY实现U盘的通信。

weixin_48501028的博客 8315

U盘制作DOS启动盘中文工具包实战指南

在U盘中集成用户自定义脚本可以显著提升DOS启动盘的实用性。例如,可以创建一个脚本,在启动时自动加载内存管理器和磁盘缓存:@ECHO OFFREM 启动内存管理器REM 启用磁盘缓存✅ 逻辑分析:@ECHO OFF:关闭命令回显,使脚本执行更简洁。DEVICE=:加载设备驱动程序。:启用磁盘缓存,提高读写速度。💡 扩展建议:- 可以将常用维护命令封装成脚本,如分区、格式化、备份等。- 使用MENU或CHOICE实现交互式菜单,提升用户体验。

weixin_35294091的博客 985

FAT32文件系统详解

最近在研究FAT32文件系统,发现网络上的资料都是抄来抄去,没有详尽。特写此文,该博客详述之。

SingleWolf1989的博客 991

乐视电视刷机总失败?先做好U盘FAT32格式化与USB2.0准备

U盘是刷机引导的核心载体之一。电视与盒子底层引导程序仅能解析FAT32等基础文件系统,NTFS或exFAT会导致固件无法被识别;刷机引导阶段对USB 2.0接口的兼容性也优于USB 3.0,总线协商不稳定易造成读取超时。因此,把U盘强制格式化为单一FAT32主分区、清理隐藏引导记录、拷贝固件后做哈希校验,并断开网络干扰,是稳定进入刷机界面的前提。这类准备流程不只适用于乐视电视和智能盒子线刷,对嵌入式设备、安卓电视盒的固件升级同样有效。通过磁盘管理、diskpart或Rufus完成分区清洗,再用chkdsk与

weixin_29190169的博客 191

护U使者V1.28:专业U盘修复工具实战应用

U盘在使用过程中主要面临三类典型故障:设备无法识别读写失败和文件丢失。设备无法识别表现为插入后无盘符显示、系统提示“未知USB设备”或资源管理器中不出现驱动器;读写失败则体现为复制文件时提示“拒绝访问”、“I/O设备错误”或传输速度异常缓慢;文件丢失多指数据突然消失、目录变为空白或显示乱码文件。这些问题往往由多种因素交织导致,需结合软硬件层面综合判断。在某些企业环境中,组策略禁止用户修改桌面设置或访问系统资源,可能导致即使存在合法,系统也无法加载其指定图标。

weixin_33375360的博客 1025

引导扇区不支持ntfs文件系统_U盘FAT32、NTFS、exFAT格式的区别,你都知道么?

U盘体积小巧,方便携带,是我们如今最常用的存储设备。应该有不少用户有这样的经历:在给U盘进行格式化操作时,会出现FAT32,NTFS和exFAT三种格式供大家选择。这三种格式有什么区别?U盘用什么格式最好?下面快启动来为大家来分享一下U盘文件格式的小知识。FAT32、NTFS、exFAT格式的区别1、FAT32格式兼容性好,但不支持4GB以上的文件FAT32格式是Windows平台的传统...

weixin_39876145的博客 7025

STM32+FATFS+SD卡读写+U盘读写(正点原子F7开发板)

使用STM32CubeMX配置SD卡与USB,对SD卡和USB U盘文件进行读写测试。 软件编译环境:MDK 5.29 硬件环境:正点原子F767开发板

用单片机的RAM虚拟U盘(文件系统:Fat16)

操作系统:rt-thread 文件系统:Fat16 硬件平台:stm32f103c8 描述:利用mcu的ram虚拟一个U盘,用于存储即时小数据,通过usb以u盘的方式供上位机读取。 一:硬盘篇 1、硬盘物理结构:     盘片(platter):硬盘由很多盘片组成,每个盘片的每个面都有一个读写磁头(heads)。N个盘片,就有2N个面,对应2N个磁头,从0、1、2……开始编号;     ...

oshan2012的博客 3638

STM32/GD32的USB HostU盘读取例程

USB作为主机读写U盘例程,集合Fatfs文件系统,适用于STM32F407以及GD32F407,稍加改动可适用于其他单片机。另外还有Keil5版本,请自行编译。

GD32_USBFS_USBHS_固件库用户指南_V1.0.pdf

GD32_USBFS_USBHS_固件库用户指南_V1.0

FAT32文件系统学习(1) —— BPB的理解

origin: https://www.cnblogs.com/fantacity/p/3895771.html FAT 32 文件系统学习 1、本文的目标 本文将通过实际读取一个FAT32格式的U盘来简单了解和学习FAT32文件系统的格式。虽然目前windwos操作系统的主流文件系统格式是NTFS,但是FAT32由于其兼容性原因,还是有一定的学习价值。为了能做出一个...

yazhouren的专栏 5723

GD32&STM32异同--2014

GD32 VS STM32差异资料:ADC差异,Flash差异,I2C差异,内核差异。

AT指令读写U盘文件:从USB Host到FAT32的嵌入式落盘实践

嵌入式设备在无网络、主控资源紧张时,常需要把日志、配置或采样数据落到本地介质。以U盘为载体的方案背后涉及USB Host枚举、FAT32文件系统解析、目录项与簇分配,以及文件句柄管理;AT指令把这些底层文件操作封装成挂载、打开、读写、关闭等串口命令。其技术价值在于不额外增加USB Host MCU,降低硬件改动和固件复杂度,让模组直接完成U盘读写与文件落盘。典型应用包括离线数据记录、现场配置导入、售后日志导出等。围绕AT指令读写U盘文件,合理设置缓冲区、分块、超时与掉电保护,并处理供电、分区格式和句柄泄漏,

weixin_33461476的博客 144

告别反复格式化!用Ventoy制作2025年终极启动盘,Windows/Linux/macOS一网打尽

本文详细介绍了如何使用Ventoy制作2025年终极多系统启动盘,彻底告别反复格式化U盘的烦恼。Ventoy通过创新的引导加载器架构,允许用户在一个U盘内同时存放并直接启动Windows、Linux、macOS等多种系统镜像和WePE等维护工具,实现真正的非破坏性管理和极高的U盘利用率。文章涵盖从安装配置、镜像库构建到安全启动设置等全流程实战指南。

weixin_29280219的博客 241

欧姆龙SYSMAC STUDIO如何与基恩士SR-1000进行EIP通信

简要介绍一下扫码枪和欧姆龙sysmac的配置

weixin_42031602的博客 4779

FAT 32 文件系统学习

1、本文的目标 本文将通过实际读取一个FAT32格式的U盘来简单了解和学习FAT32文件系统的格式。虽然目前windwos操作系统的主流文件系统格式是NTFS,但是FAT32由于其兼容性原因,还是有一定的学习价值。为了能做出一个窗体程序提供直观的感觉,本文的代码采用c#编写,对应的c++代码也会附上。 2、本文目录 1、本文的目标 2、什么是FAT32 2.1 FAT32的构成 3、引导区 3.1 读取引导扇区 3.2 BPB参数 3.3 程序实现 2、什么是FAT32 ...

~~ LINUX ~~ 3194

基于LSTM的多变量温度预测(python从入门到入坑)

基于LSTM的多变量温度预测(python) ——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话) 这里写目录标题基于LSTM的多变量温度预测(python)——我保证他能够运行,而且结果能够让你满意(如果你和我一样都是一个新手的话)一、我为什么要写这些?二、具体做了什么?三、源代码切块加注释,恳请批评指正(●’◡’●)ノ 一、我为什么要写这些? 因为让人抓狂的课程大作业,我小组选择了一个多变量预测方面的课题,在我这个大三基本上还没接触过Python数据处理,甚至对神经网络什么的都

代码之狐的博客 1万+
上一篇: linux shell实现随机数多种方法(date,random,uuid)
下一篇: C 打印格式小记
asmxpl
博客等级 码龄15年 9粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值