
它不仅提供了高速数据传输的能力,还支持多种设备类型,包括磁盘、磁带、CD-ROM等
在Linux系统中,SCSI子系统是内核众多子系统中的关键部分,为开发者提供了丰富的接口和功能
本文将深入探讨Linux SCSI的开发,从硬件建模到软件模型,再到实际开发中的关键步骤和注意事项
一、SCSI硬件建模 在理解Linux SCSI开发之前,首先需要了解SCSI硬件的拓扑模型
SCSI硬件模型主要包括控制器(Host)、设备(Device)、通道(Channel)、标识符(ID)和逻辑单元(LUN)
1.控制器(Host): SCSI控制器是连接SCSI设备和主机的桥梁
每个控制器都有一个唯一的编号,用于在系统中进行标识
控制器负责发送和接收SCSI命令,管理与其连接的SCSI设备
2.设备(Device): SCSI设备是实际存储数据的硬件,如磁盘、磁带和CD-ROM等
每个设备内部可以有多个通道(Channel),每个通道下可以有多个标识符(ID),每个ID下可以有多个逻辑单元(LUN)
LUN是实际接收SCSI命令的实体,可以是一个物理硬盘、光驱,也可以是一些能够接收特殊SCSI命令的虚拟设备
3.通道(Channel)和标识符(ID): 通道和ID在SCSI协议中没有明确的描述,但在实际硬件和软件设计中,它们提供了灵活性
软件上的channel和ID为设备内部构造了一个树形图,而众多的LUN是这个树上的叶子节点
4.逻辑单元(LUN): LUN是能够接收SCSI命令的主体
每个LUN在Linux的通用块设备层都有独享的一个请求队列
多个逻辑分区可以共用一个LUN的请求队列,但这些逻辑分区的管理不在SCSI子系统中处理
二、Linux SCSI子系统软件模型 Linux SCSI子系统以硬件对象为基础设计,包括硬件各级设备的睡眠和唤醒顺序,决定了软件上的设备父子关系
硬件上的连接关系决定了软件上的扫描顺序,而硬件总线上传输的信息的封装方式决定了多级设备的驱动各自处理的范围
1.主要Bus和Class: Linux SCSI子系统中有三个主要的bus和class,分别是“scsi”、“scsi_host”和“scsi_device”
它们构成了SCSI的主体范围
-scsi bus:所有Host、Target、LUN都有对应的struct device放在这个bus上
通用的SCSI磁盘驱动(sd)、光盘驱动(sr)、磁带驱动(osst)等也在这个bus上
-scsi_host:表示SCSI控制器,每个控制器都有一个唯一的编号
-scsi_device:表示连接到SCSI控制器的设备,每个设备都有一个或多个LUN
2.设备文件和设备映射: Linux SCSI子系统使用设备文件来访问SCSI设备
通用SCSI驱动程序使用自己的设备文件,与其他SCSI设备驱动程序使用的文件不同
这些设备文件可以通过makedev脚本生成,通常在/dev目录中找到
设备
Linux服务器上多网站搭建指南
LINUX SCSI开发技术深度解析
Xshell技巧:一键显示当前工作目录全路径教程
Linux操作,不再烦恼的秘诀
Linux系统下的缓解机制全解析
如何轻松删除电脑云桌面应用
Linux环境下AMP安装指南
Linux服务器上多网站搭建指南
Linux操作,不再烦恼的秘诀
Linux系统下的缓解机制全解析
Linux环境下AMP安装指南
Linux系统下轻松安装MongoDB指南
Vue开发:Linux CLI实战指南
Linux下快速生成SSH密钥指南
在Linux上使用Wine运行QQ:跨平台沟通无界限
Linux系统固态硬盘性能优化指南
UEFI下Linux与Windows双系统实战
Linux系统新手指南:如何轻松注册并管理用户帐号
Linux面试6大必问考点揭秘