概要

Flash-DBSim 是一个用于进行闪存技术研究实验的仿真系统,它使用 C++ 开发,并且提供全部源代码,代码许可遵循 GNU General Public License v2 标准。

本页面将详细介绍如何在闪存技术研究实验中配置及使用 Flash-DBSim 系统。同时,我们还会提及如何利用 Flash-DBSim 的接口进行二次功能开发,以 Flash-DBSim 系统的其他部件以增强系统的功能。

准备工作

在本网站的“下载”页面,你可以下载到 Flash-DBSim 系统的最新组件文件以及源代码。根据你的不同需要,下载所需的 Flash-DBSim 文件。

注意:由于闪存技术实验的多样性,因此我们不保证 Flash-DBSim 系统能够支持你的实验要求。因此,请在实验之前,确保 Flash-DBSim 中包含有实验所需要的功能模块(Flash-DBSim 系统所有功能模块说明请参见“模块”页面),如果没有的话,那么请根据“Flash-DBSim 模块开发”一节中的相关内容进行二次开发和功能扩展。

Flash-DBSim 组件配置

当完成了 Flash-DBSim 系统组件的下载之后,你将获得如下三个文件:

Flash-DBSim 组件文件

这三个文件的功能分别为:

Flash-DBSim 组件文件的配置方法如下:

  1. 新建 C++ 工程
  2. 将 FlashDBSimDll.dll 文件与工程编译后的 EXE 执行文件放置在同一文件夹中(Visual Studio 默认为 Debug 或 Release 文件夹)。
  3. 将 FlashDBSimDll.lib 文件复制到工程目录下,并将 flashdbsim_i.h 头文件加入到工程代码中。
  4. 检查 flashdbsim_i.h 头文件中关于 FlashDBSimDll.lib 文件的路径配置是否正确。

flashdbsim_i.h 文件中关于 FlashDBSimDll.lib 文件的路径配置代码默认如下:

#pragma comment(lib, "FlashDBSimDll.lib")

注意:flashdbsim_i.h 中的路径配置代码如果不正确,将导致编译时错误。

Flash-DBSim 组件使用

flashdbsim_i.h 文件中,定义了所有 Flash-DBSim 系统提供的 API 函数声明。关于这些函数的详细说明,请参考“API”页面。

需要特别注意的地方是 Flash-DBSim 系统中的两个函数: f_initialize, f_release,这两个函数分别对应 Flash-DBSim 系统的初始化和释放操作。Flash-DBSim 系统的一般使用流程如下:

  1. 由于 Flash-DBSim 系统采用模块化的结构设计,因此在使用 Flash-DBSim 系统之前,需要调用 f_initialize 函数对整个系统进行初始化,与指定的虚拟闪存模块,FTL 模块进行绑定。
  2. 完成 Flash-DBSim 系统的初始化过程之后,开发者就可以正常地调用 Flash-DBSim 系统的 API 函数来实现指定的操作。
  3. Flash-DBSim 系统结束运行之后,需要调用 f_release 函数释放系统所占用的所有资源与模块。

Flash-DBSim 模块开发

在使用 Flash-DBSim 系统时,如果要对其进行模块开发,则需要按照以下步骤进行处理:

  1. 下载 Flash-DBSim 系统的源代码
  2. 编写模块功能代码,所编写的模块类需要继承指定的接口 (IVFD_MODULE, IFTL_MODULE 等);
  3. 在 Flash-DBSim 源代码中的 stdafx.h 头文件的 VFD_ID, FTL_ID 枚举类型定义中加入新的模块的 ID 号,并且确保该 ID 号是唯一的。
  4. 在 Flash-DBSim 源代码中的 FlashDBSim.cpp 文件的 FlashDBSim::Initialize 函数中增加新加入的模块 ID 的模块初始化代码;

  5. switch (vfdInfo.id) {
      case ID_NAND_DEVICE_01:
        flashDevice = new NandDevice01();
        break;
      case ID_NAND_DEVICE_02:
        flashDevice = new NandDevice02();
        break;
      ...
      <<在此处添加新的 VFD 模块初始化代码>>
      default:
        break;
    }

    switch (ftlInfo.id) {
      case ID_FTL_01:
        ftl = new FTL01();
        break;
      ...
      <<在此处添加新的 FTL 模块初始化代码>>
      default:
        break;
    }
  6. 重新编译 Flash-DBSim 源代码,获得新的 FlashDBSimDll.dll, FlashDBSimDll.lib 文件。
  7. 在 flashdbsim_i.h 头文件的 VFD_ID, FTL_ID 枚举类型定义中加入新的模块的 ID 号,确保该 ID 号与之前加入到 stdafx.h 文件中的 ID 号相同。
  8. 将新的 FlashDBSimDll.dll, FlashDBSimDll.lib, flashdbsim_i.h 三个文件按照“Flash-DBSim 组件配置”中的步骤更新到自己的工程中。