BIOS知识枝桠——文件系统
硬盘与文件系统
- 硬盘物理结构
- MBR分区
- GPU分区
- FAT
- ROM Layout
硬盘物理结构
以一个机械硬盘为例,内部包括磁片、主轴、速写磁头、传动手臂、传动轴、反力矩弹簧装置,SSD没有这样的结构,但都有一个相同的存储介质(主轴外一圈的部分)右边为存储介质的内部情况。
MBR分区
主引导记录MBR(Master Boot Record) Leagcy 启动最后就是通过读MBR做校验检测硬盘是否存在系统等
扇区0 | 扇区1 | 扇区2 | 扇区3 | … | … | 扇区N-2 | 扇区N-1 | 扇区N |
---|---|---|---|---|---|---|---|---|
MBR |
通常磁盘512 Byte分为一个扇区(Logical Block Address 0)LBA0, MBR存放在磁盘的第一个扇区, 用4个字节(StartingLBA)表示该分区的起始扇区号,4个字节(SizelnLBA)表示该分区拥有的总扇区数,最大只能支持4个分区(每个分区最大是2T 4G扇区数x512B每扇区 =2TB)下图为MBR的组成:0X55 0xAA相当于标志符
MBR最多有四个分区,下表为分区信息结构:
存储字节位 | 内容及含义 |
---|---|
第1字节 | 引导标志,若值为80H表示活动分区,若值为00H表示非活动分区 |
第2、3、4字节 | 本分区的起始磁头号、扇区号、柱面号。其中:磁头号——第2字节、扇区号——第3字节的低6位、柱面号——第3字节高2位+第4字节8位 |
第5字节 | 分区类型符 00H——表示该分区未用(即没有指定)、06H——FAT16基本分区、0BH——FAT32基本分区、05H——扩展分区、07H——NTFS分区、0FH——(LBA模式)扩展分区(83H为Linux分区等) |
第6、7、8字节 | 磁头号——第6字节、扇区号——第7字节的低6位、柱面号——第3字节高2位+第8字节 |
第9、10、11、12字节 | 本分区之前已用的扇区数 |
第13、14、15、16字节 | 本分区的总扇区数 |
GPU分区
GPT(GUID Partition table), 为了弥补MBR的不足, Intel设计了GPT分区。GPT分区支持更大容量, 更多分区(Windows最大支持128个), 更加安全(首尾部分分别保存了一份相同的分区表), 兼容MBR。
0号扇区称为保护性MBR,同MBR硬盘的0号扇区格式相同。其主要作用是兼容 MBR硬盘时代的工具,防止这些工具因不识别GPT格式而破坏硬盘。
扇区0 | 扇区1 | 扇区2 | 扇区3 | 扇区4 | … | … | 扇区N-2 | 扇区N-1 | 扇区N |
---|---|---|---|---|---|---|---|---|---|
MBR | GPT头 | 分区表项1、2、3、4 | 分区表项5 | 分区表项6 | 备份GPT头 |
硬盘的1号扇区称为G P T头,存储了硬盘的结构信息,主要包括:G P T头标志 “EFIPART”、表头字节数、表头CRC32校验码、GPT头和备份表头地址、可用于分区的扇区范围
// GPT分区表项结构体
typedef struct {EFI_GUID PartitionTypeGUID; //分区类型GUID, 0表示此项为空
EFI_GUID UniquePartitionGUID;//分区标志GUID
EFI_LBA StartingLBA; //分区的首扇区
EFI_LBA EndingLBA; //分区的尾扇区
UINT64 Attributes; //分区属性
CHARI6 PartitionName[36]; //分区名字符串,必须以0x0000结尾
} EFI_PARTITION_ENTRY;
FAT
每个UEFI系统至少有一个ESP(EFI System Partition)分区, 在这个分区上存放启动文件. EFI也要有读取文件的功能. UEFI内置的文件系统基于FAT开发.
文件配置表 (英文: File Allocation Table, 首字母缩略字: FAT)是一种由微软发明的并带有部分专利的文件系统, 供MS-DOS使用, 也是非NT内核的微软窗口使用的文件系统. FAT文件系统考虑当时计算机效能有限, 所以未被复杂化, 因而被几乎所有个人计算机的操作系统支持. 这特性使它成为理想的软盘和记忆卡文件系统, 也适合用作不同操作系统中的数据交流.
DrivIver Binding流程:
UEFI设计了一种简单的文件系统协议UEFI File System.
gEfiSimpleFileSystemProtocolGuid <MdePkg/include/Protocol/SimpleFileSystem.h>
struct _EFI_SIMPLE_FILE_SYSTEM_PROTOCOL {////// The version of the EFI_SIMPLE_FILE_SYSTEM_PROTOCOL. The version/// specified by this specification is 0x00010000. All future revisions/// must be backwards compatible.///UINT64 Revision;EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_OPEN_VOLUME OpenVolume;
};
OpenVolume 打开的protocol结构:
// EFI_FILE_PROTOCOL为支持的文件系统提供文件IO访问。
// EFI_FILE_PROTOCOL提供对文件或目录内容的访问,也是对文件所在文件系统目录树中位置的引用。
// 对于任何给定的文件句柄,可以相对于该文件的位置打开其他文件,从而产生新的文件句柄。
struct _EFI_FILE_PROTOCOL {////// The version of the EFI_FILE_PROTOCOL interface. The version specified/// by this specification is EFI_FILE_PROTOCOL_LATEST_REVISION./// Future versions are required to be backward compatible to version 1.0.///UINT64 Revision;EFI_FILE_OPEN Open;EFI_FILE_CLOSE Close;EFI_FILE_DELETE Delete;EFI_FILE_READ Read;EFI_FILE_WRITE Write;EFI_FILE_GET_POSITION GetPosition;EFI_FILE_SET_POSITION SetPosition;EFI_FILE_GET_INFO GetInfo;EFI_FILE_SET_INFO SetInfo;EFI_FILE_FLUSH Flush;EFI_FILE_OPEN_EX OpenEx;EFI_FILE_READ_EX ReadEx;EFI_FILE_WRITE_EX WriteEx;EFI_FILE_FLUSH_EX FlushEx;
};
FAT驱动的核心函数 OpenVolume实体:
EFI_STATUS
EFIAPI
FatOpenVolume (IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This,OUT EFI_FILE_PROTOCOL **File)
{EFI_STATUS Status;FAT_VOLUME *Volume;FAT_IFILE *IFile;Volume = VOLUME_FROM_VOL_INTERFACE (This);FatAcquireLock ();//// Open Root file打开根目录//Status = FatOpenDirEnt (NULL, &Volume->RootDirEnt);if (EFI_ERROR (Status)) {goto Done;}//// Open a new instance to the root//Status = FatAllocateIFile (Volume->Root, &IFile);if (!EFI_ERROR (Status)) {*File = &IFile->Handle;}Done:Status = FatCleanupVolume (Volume, Volume->Root, Status, NULL);FatReleaseLock ();return Status;
}
OpenVolume ——>Open ——>Read/Write ——>Close
EFI_STATUS
EFIAPI
FatOpen (IN EFI_FILE_PROTOCOL *FHand,OUT EFI_FILE_PROTOCOL **NewHandle,IN CHAR16 *FileName,IN UINT64 OpenMode,IN UINT64 Attributes)
{return FatOpenEx (FHand, NewHandle, FileName, OpenMode, Attributes, NULL);
}
;
EFI_STATUS
EFIAPI
FatRead (IN EFI_FILE_PROTOCOL *FHand,IN OUT UINTN *BufferSize,OUT VOID *Buffer)
{return FatIFileAccess (FHand, ReadData, BufferSize, Buffer, NULL);
}
;
EFI_STATUS
EFIAPI
FatWrite (IN EFI_FILE_PROTOCOL *FHand,IN OUT UINTN *BufferSize,IN VOID *Buffer)
{return FatIFileAccess (FHand, WriteData, BufferSize, Buffer, NULL);
}
ROM Layout
BIOS ROM 文件主要由 FV(Firmware Volume)类型, Data类型和FILE类型构成每一种类型都要定义好Offset和Length, 以防冲突
BIOS知识枝桠——文件系统相关推荐
- BIOS知识枝桠——FV
FV 基本概念 架构组成 File Type&Section Type FV的访问 FV拓展 EFI IMAGE (PE/COFF) FV拓展 EFI OPTIONROM 基本概念 FD:固件 ...
- BIOS知识枝桠——Event
Event 传统的中断模式 硬件中断 软件中断 Event Overview Event Function Event Use TPL Timer UEFI不再为开发者提供中断支持,但在UEFI内部还 ...
- BIOS知识枝桠——Device Path
EFI Device Path 定义&原型 文本表示形式 EFI Device Path种类 Hardware Device Path ACPI Device Path Messaging D ...
- BIOS知识枝桠——GPU
GPU理论阐述 概念 功能 供应商 NVIDIA GPU 名称解读 显存 GPU/显卡信息查看.鉴别工具 显示接口 GPU通用计算编程 科普类文章,无实际技术相关,内容来源网络 概念 图形处理器(英语 ...
- BIOS知识枝桠 -- PCIE
博客内容来源为网络下载ppt,侵删 PCI的发展 PCI Local Bus 示意图 NoteBook上常见的PCIE Device:SSD DGPU WLAN LAN CardReader. 通过总 ...
- BIOS知识枝桠——SCI SMI IRQ
SCI SMI 中断 中断分析 SCI SMI SMM SCI和SMI的异同 特殊的GPE: Q event SMI的几种常见的注册 SWSMI的触发 常见SMI的应用 中断 中断: 指当出现需要时, ...
- BIOS知识枝桠——ACPI
ACPI在BIOS中的应用 ACPI Overview Power State ACPI Table XSDT FADT ASL Code 变量和运算 函数 ACPI Overview 完全解读:Ad ...
- BIOS知识枝桠—— Library
Library overview Lib Overview Lib的文件结构 库的实体: 库的头文件: 库的Dec文件: 库函数的调用: MdePkg 常用Lib PUBLIC DEFINITIONS ...
- BIOS知识枝桠——HII
HII Database HII OverView HII Protocol HII OverView HII(Human Interface Infrastructure), 定义了一套管理用户输入 ...
最新文章
- 教你怎么样在 Java8 中优雅的避开空指针异常
- cjson调用的实例 c++
- Android 设计模式一:EIT造型
- java spring mvc json ajax 优势_SpringMVC后台json数据前台ajax获取不到!!!急求解答!!!...
- CLR的程序集定位算法(转)
- JavaScript:JavaScript语法的详细介绍
- mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
- 都说「跳一跳」是微信抄袭了育碧,万万没想到,他们在一起了!
- 杂志订阅管理系统c语言实训报告,C语言程序设计报告—杂志订阅管理软件、、.doc...
- 【java集合框架源码剖析系列】java源码剖析之ArrayList
- 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
- 智慧交通:数字孪生三维可视化大屏管控运维平台
- JavaScript设计模式之策略模式-优化if条件过多
- SDelete v2.04安全地擦除磁盘未分配部分中存在的任何文件数据(包括已经删除或加密的文件)
- 感悟较多影响较多的心理效应
- windows7系统的“ .exe”图标显示不正常解决办法
- 转贴:ubuntu Rhythmbox歌曲名乱码问题
- tomcat+前端的简单配置
- mac一直ReportCrash
- 【Rust日报】 2019-04-05