# nvdimm初探

最近研究nvdimm，发现这玩意还真有点复杂。

简单记录之。

## 使用手册

写了一半发现得先写个使用手册，这样一来自己做个记录，二来也清楚正常使用流程，三来部分内容可以帮助解释代码。

所以加一个[使用手册](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/00-brief_user_guide)

## 上帝视角

经过了设备模型的洗礼，那就先从总线，驱动和设备角度看看都有些什么。

[上帝视角](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/01-a_big_picture)

## nvdimm\_bus

首先创建的是nvdimm\_bus设备，而且从树形结构中可以看到它是nvdimm设备树的根。

[nvdimm\_bus](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/02-nvdimm_bus)

## nvdimm

在整个设备树中，有一个孤零零的存在:nvdimm。这就是是用来表示物理dimm设备的。

[nvdimm](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/03-nvdimm)

## nd\_region

接着我们就来看nvdimm\_bus下，另一个子树。而这颗子树的根就是nd\_region了。

[nd\_region](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/04-nd_region)

而在nd\_region下，有四个并列的设备：

* [nd\_namespace\_X](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/05-namespace)
* [nd\_btt](https://github.com/RichardWeiYang/kernel_exploring/blob/master/nvdimm/06-btt.md)
* [nd\_pfn](https://github.com/RichardWeiYang/kernel_exploring/blob/master/nvdimm/08-pfn.md)
* [nd\_dax](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/07-dax)

## dev\_dax

在着重描述了namespace和nd\_dax后，终于要到整个驱动的最后也就是[dev\_dax](https://richardweiyang-2.gitbook.io/kernel-exploring/00-brief_navigation/07-dax/09-dev_dax)。

这是用户使用nd\_dax设备的接口。
