前言
PM8001驱动是linux标准内核自带的HBA驱动,由于完全开源,所以对于学习linux存储系统底层很有帮助。笔者有幸在之前的工作中使用过这款HBA,所以结合实际使用和源码稍微记录一下。由于已经过去很久了,现在重新拿起来看,有些地方理解的会有疏忽,敬请谅解和多提宝贵意见。
对于PM8001这个设备,其与主机通过PCI总线连接,属于SCSI子系统中的底层模块。SCSI子系统按功能和逻辑结构可以划分成三层。系统结构如图所示。
本文的主线是根据PM8001驱动(较低层)来展开,其间会涉及到中间层相关部分的分析,但对于顶层涉及得不多。
-
scsi子系统中间层和较低层简要分析
-
scsi中间层功能简介
-
在进行对pm8001驱动分析之前,先简要根据我的理解分析一下scsi子系统中的中间层和较低层。
中间层顾名思义是介于scsi子系统顶层和较低层之间的层次。中间层是scsi子系统分层模型核心意义的体现——它能够解除顶层和较低层之间的耦合,并为顶层和较低层提供一系列服务。中间层能够解除顶层与较低层的耦合关键在于中间层提供了LLD的抽象接口scsi_host和能够复刻scsi_host对象的scsi_host_template。当较低层将scsi_host注册到中间层后,中间层即可以调用lld相关函数。同理,顶层的驱动也可以通过中间层间接地使用