今天大概来了解一下NVMe设备驱动都做了什么。
首先使用的源码版本是5.9版的github torvalds版本
在linux/drivers/nvme的目录下,共有两个主要目录,一个是host另一个是target。这两个目录分别是给NVMe over PCIe和NVMe over Fabric使用的。
这里我们只关心host目录下的文件,
从makefile里面可以找到需要编译和连接的文件
其中core.c主要包含了NVMe设备驱动的主要操作,pci.c包含了nvme设备的基本注册流程,和主要数据结构。其他的文件包括zns和lightnvm我们之前都有提到过(Zoned Namespace的简单介绍 和 Open Channel SSD和lightNVM(1)),这里仅仅就nvme标准设备的初始化和基本操作对照nvme spec进行学习了解。
我们从linux\drivers\nvme\host\pci.c开始
首先是注册一个nvme类型的设备
module_init(nvme_init);
注册的数据结构是