SCSI代码分析(3)SCSI设备的管理2
前面对SCSI设备的扫描过程做了介绍,本节对SCSI设备所对应的磁盘的识别做介绍。前面描述了SCSI device的扫描,在扫描到SCSI device后,与已加载的SCSI driver匹配,执行SCSI driver的probe函数即sd_probe(),该函数发送SCSI命令获取SCSI device所对应的硬盘信息。
1. SCSI命令的定义
SCSI命令的定义一般在协议SCSI Primary Commands和SCSI Block Commands中,这里对部分可能涉及的命令做简单介绍。
1.1 INQUIRY命令
INQUIRY命令用于查询硬盘的相关信息(包括设备类型、厂商ID、版本等)。对每个SCSI命令,协议定义了发送的格式以及返回数据的格式。如INQUIRY命令如下:
INQUIRY命令的返回如下:
当前仅截取一部分,我们需要知道的是每个SCSI命令都有一个opcode代表SCSI id,后续不再一一对SCSI命令格式做介绍,仅讲述其作用。
1.2 TEST_UNIT_READY命令
该命令用于检测硬盘是否上电准备好接受后面的命令。
1.3 START_STOP命令
该命令用于对磁盘上下电操作。
1.4 READ CAPACITY命令
该命令用于读取硬盘的容量
1.5 MODE SENSE命令
该命令可以读取WCE(write cache使能情况,硬盘中存在write cache,可以使能write cache提升硬盘性能,在下盘时一般会sync write cache)、RCD(Read cache Disable情况,硬盘中杜CACHE使能情况)、ATO(DIF使用的app tag)等。
1.6 REPORT LUNS命令
该命令用于获取硬盘的LUN数目,一般硬盘只有一个LUN。
2. 硬盘的识别过程
硬盘的识别过程是由函数sd_probe()实现的。在识别过程中SCSI命令交互如下所示,具体SCSI命令(passthrough IO)是如何下发的在后面单独章节介绍:
上述分别通过SCSI命令获取对应信息,上述命令在前面做简单介绍,其中写保护、RCD、WCE、ATO等都是通过MODE SENSE命令完成。
函数sd_probe()的流程如下所示:
自此SCSI硬盘被识别,用户通过FIO或其他应用可以访问硬盘。
SCSI代码分析(3)SCSI设备的管理2相关推荐
- SCSI代码分析(6)SCSI错误处理
除了之前介绍的正常完成SCSI层IO外,实际上还存在其他情况:IO发到控制器或硬盘后没有返回导致超时(称为IO的超时):硬件返回带错误信息的返回(IO返回异常).这些情况需要借助SCSI错误处理进行恢 ...
- Linux SCSI设备容量打印代码分析
探寻SCSI设备容量如何获取代码. 分析 8G USB转SD卡启动打印信息: sd 3:0:0:0: [sdb] 15523840 512-byte logical blocks: (7.94 GB/ ...
- linux系统scsi硬盘,Linux系统SCSI磁盘管理全攻略(一)
Linux系统SCSI磁盘管理全攻略(一) 介绍 本系列文章系统.全面地介绍了Linux 的SCSI设备管理机制和整套操作命令.包括以下六大主题:Linux SCSI子系统概述 Linux主机LUN识 ...
- 管理Discuz!代码分析的收集整理
管理Discuz!代码分析的收集整理 1.后台结构 @�L^SD+k#G0 后台首页提供了常用操作:用户(组)编辑,论坛基本备份等. k XS7]+mB8H0 2.PHPChina 开源社区门户&qu ...
- 【Linux 内核 内存管理】物理分配页 ⑨ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | retry 标号代码分析 )
文章目录 一.retry 标号代码分析 二.retry 标号完整代码 在 [Linux 内核 内存管理]物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __allo ...
- 字符设备驱动高级篇2——字符设备驱动注册代码分析
以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 1.老接口register_chrdev分析 (1)代码函数调用关系 register_chrdev __regi ...
- [分享]蓝屏代码查询及代码分析
系统蓝屏70%是由于内存(病毒)引起的 一般来说 你先系统重新装一遍 要是用了一段时间还是出现这样的问题 建议换根内存试试 windows蓝屏错误 1 0×00000001 不正确的函数. 2 0×0 ...
- qemu-kvm 代码分析
qemu-kvm 代码分析 虚拟机组成 实际上面所说计算机组成比较笼统,实际处理器,存储器,输入与设备种类繁多, - i440FX host PCI bridge and PIIX3 PC ...
- FreeBSD设备驱动管理介绍(BSP: Ti AM335x)
这段时间一直在忙FreeBSD驱动移植的项目,因此对FreeBSD做了一定的了解,鉴于网上对于FreeBSD的设备驱动资料较少,在这里给出本人对于FreeBSD驱动管理的理解心得(主要是USB驱动管理 ...
- kernel 3.10代码分析--KVM相关--虚拟机创建\VCPU创建\虚拟机运行
分三部分:一是KVM虚拟机创建.二是VCPU创建.三是KVM虚拟机运行 第一部分: 1.基本原理 如之前分析,kvm虚拟机通过对/dev/kvm字符设备的ioctl的System指令KVM_CREAT ...
最新文章
- python 类继承和组合_Python:继承与组合
- 阿里《Java开发手册》中的 1 个bug!
- 安卓从业者应该关注:Android 6.0的运行时权限
- YUI3学习笔记 ( 8 )
- 去哪儿网:报复性滑雪来了 机票预订量超去年
- 为何要搞 10 年?方舟编译器专家首次回应
- step7设置pcpg_STEP7 PC/PG设置的疑惑
- SQL十进制和十六进制相互转换
- 基于STM32F103C8T6 HAL库 TM7705数据读取
- 饥荒控制台输入没用_饥荒代码为什么我输入没反应
- mac 安装问题汇总
- PPT 问题 PowerPoint 储存此文件时发生错误
- 什么蓝牙耳机最好用?公认好用性价比高的蓝牙耳机推荐
- NT3H2111_2211芯片简介
- 在线Java 动态运行Java源代码-执行器
- 各行各业数据及分析研究报告网站参考
- 重定向RedirectAttributes用法
- EFR32 xG1x的bootloader被擦除
- FL Studio 20.9.2官方中文版全新发布更新功能介绍
- window 10 中文家庭版安装,配置,测试ISS服务器
热门文章
- mysql odbc 卸载_Linux卸载MySQL
- DXGI高帧率屏幕录像软件源码解析(声音捕获,抓屏,ffmpeg录像,MP4录像,flv录像,麦克风采集)(第4篇编码,录像部分)
- Java JavaEE JavaSE JavaME JavaWEB 之间的区别与联系
- python拟合二元一次函数
- c语言中 gotoxy() 函数的使用
- 任意直流电压的多通道数据采集与独立测量,只需要一个模块
- ZZULIOJ部分题目解答
- 网易云音乐API 分析
- ffmpeg转码cpu很高,ffmpeg实现GPU(硬编码)加速转码,解决ffmpeg转码速度慢
- 单片机ADC0808,DAC0832信号发生器