概要
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 模块开发”一节中的相关内容进行二次开发和功能扩展。
Flash-DBSim 组件配置
当完成了 Flash-DBSim 系统组件的下载之后,你将获得如下三个文件:
这三个文件的功能分别为:
- flashdbsim_i.h: Flash-DBSim 系统的定义头文件。在使用 FlashDBSimDll.dll 文件进行工程开发时,该文件提供了 flash-dbsim 系统所需的类型定义,以及导出函数声明。
- FlashDBSimDll.dll: Flash-DBSim 系统组件,该 DLL 文件中包含有整个 Flash-DBSim 系统的全部功能。
- FlashDBSimDll.lib: FlashDBSimDll.dll 文件的引入库文件,包含有 FlashDBSimDll.dll 中导出的函数的名称和位置信息,在工程编译时需要使用到该文件。
Flash-DBSim 组件文件的配置方法如下:
- 新建 C++ 工程
- 将 FlashDBSimDll.dll 文件与工程编译后的 EXE 执行文件放置在同一文件夹中(Visual Studio 默认为 Debug 或 Release 文件夹)。
- 将 FlashDBSimDll.lib 文件复制到工程目录下,并将 flashdbsim_i.h 头文件加入到工程代码中。
- 检查 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 系统的一般使用流程如下:
- 由于 Flash-DBSim 系统采用模块化的结构设计,因此在使用 Flash-DBSim 系统之前,需要调用 f_initialize 函数对整个系统进行初始化,与指定的虚拟闪存模块,FTL 模块进行绑定。
- 完成 Flash-DBSim 系统的初始化过程之后,开发者就可以正常地调用 Flash-DBSim 系统的 API 函数来实现指定的操作。
- Flash-DBSim 系统结束运行之后,需要调用 f_release 函数释放系统所占用的所有资源与模块。
Flash-DBSim 模块开发
在使用 Flash-DBSim 系统时,如果要对其进行模块开发,则需要按照以下步骤进行处理:
- 下载 Flash-DBSim 系统的源代码;
- 编写模块功能代码,所编写的模块类需要继承指定的接口 (IVFD_MODULE, IFTL_MODULE 等);
- 在 Flash-DBSim 源代码中的 stdafx.h 头文件的 VFD_ID, FTL_ID 枚举类型定义中加入新的模块的 ID 号,并且确保该 ID 号是唯一的。
- 在 Flash-DBSim 源代码中的 FlashDBSim.cpp 文件的 FlashDBSim::Initialize 函数中增加新加入的模块 ID 的模块初始化代码;
- 重新编译 Flash-DBSim 源代码,获得新的 FlashDBSimDll.dll, FlashDBSimDll.lib 文件。
- 在 flashdbsim_i.h 头文件的 VFD_ID, FTL_ID 枚举类型定义中加入新的模块的 ID 号,确保该 ID 号与之前加入到 stdafx.h 文件中的 ID 号相同。
- 将新的 FlashDBSimDll.dll, FlashDBSimDll.lib, flashdbsim_i.h 三个文件按照“Flash-DBSim 组件配置”中的步骤更新到自己的工程中。
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;
}