1. 主页
  2. 自己动手从0到1学写FAT32文件系统
  3. 第1章 驱动框架
  4. 实现虚拟磁盘驱动

实现虚拟磁盘驱动

内容纲要

本课时怎么利用PC机的虚拟磁盘映像来为本课程的开发,提供一个方便易用的测试平台。

主要内容

虚拟磁盘映像

课程提供两个磁盘映像文件,请从课程所提供的资料中下载。

两个磁盘映像文件实际上是.vhd格式的文件。该格式介绍如下:

VHD 是Microsoft Virtual Hard Disk format(微软虚拟磁盘文件)的简称。可以由Microsoft Virtual PC2007,Windows Vista,Windows 7/8,Hyper-V,Windows Server 2008R2/2012,Microsoft Virtual Server 2005等创建,Virtual Box,VMWare等可以挂载使用。
在加载到操作系统中后,就跟物理磁盘一样,我们可以对它进行分区、格式化、压缩、删除等等操作,这些操作并不影响物理分区。这种操作更有利于初学者反复试验分区、格式等功能。

VHD有几种格式,课程提供是一种固定大小的格式(如果不清楚也没关系)。经过二进制查看,发现该文件除最后一小块区域,会用于存储VHD格式相关的信息,前面部分相当于一个物理磁盘的二进制映像。

所以,你可以看到在课程中,直接用C文件读写接口去读写中的位置,效果和读写磁盘扇区一样。

重点难点

标准C文件访问接口

对视频中使用的fopen, fseek等调用不理解的同学,可以参考C语言的教材,也可以直接参考以下链接。https://www.runoob.com/cprogramming/c-standard-library-stdio-h.html

注意事项

扇区总数获取问题

严格来讲,以下代码是有Bug的。

fseek(file, 0, SEEK_END);
disk->total_sector = ftell(file) / disk->sector_size;

如果用二进制编辑器查看文件内容,或者将磁盘映像文件加载到系统中。实际磁盘容量会比上述计算结果要小那么一点点。该文件最后一小部分是.vhd格式私有的数据存储空间,不能算在磁盘空间容量内。

不过,这个问题在目前的课程中并没有什么影响。简单起见,不做修改。

请将磁盘映像文件放置到正确目录下

如果提示 open disk_test.img failed类似的错误,请检查该磁盘映像是否像视频演示的那样放置到了工程目录下

注:编译课程所提供的源码时,则要将磁盘映像文件放置到另一个不同的位置。这是为了方便很多个工程共用同一份磁盘映像文件!

常见问题

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

电子邮件地址不会被公开。 必填项已用*标注