前面对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相关推荐

  1. SCSI代码分析(6)SCSI错误处理

    除了之前介绍的正常完成SCSI层IO外,实际上还存在其他情况:IO发到控制器或硬盘后没有返回导致超时(称为IO的超时):硬件返回带错误信息的返回(IO返回异常).这些情况需要借助SCSI错误处理进行恢 ...

  2. Linux SCSI设备容量打印代码分析

    探寻SCSI设备容量如何获取代码. 分析 8G USB转SD卡启动打印信息: sd 3:0:0:0: [sdb] 15523840 512-byte logical blocks: (7.94 GB/ ...

  3. linux系统scsi硬盘,Linux系统SCSI磁盘管理全攻略(一)

    Linux系统SCSI磁盘管理全攻略(一) 介绍 本系列文章系统.全面地介绍了Linux 的SCSI设备管理机制和整套操作命令.包括以下六大主题:Linux SCSI子系统概述 Linux主机LUN识 ...

  4. 管理Discuz!代码分析的收集整理

    管理Discuz!代码分析的收集整理 1.后台结构 @�L^SD+k#G0 后台首页提供了常用操作:用户(组)编辑,论坛基本备份等. k XS7]+mB8H0 2.PHPChina 开源社区门户&qu ...

  5. 【Linux 内核 内存管理】物理分配页 ⑨ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | retry 标号代码分析 )

    文章目录 一.retry 标号代码分析 二.retry 标号完整代码 在 [Linux 内核 内存管理]物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __allo ...

  6. 字符设备驱动高级篇2——字符设备驱动注册代码分析

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 1.老接口register_chrdev分析 (1)代码函数调用关系 register_chrdev __regi ...

  7. [分享]蓝屏代码查询及代码分析

    系统蓝屏70%是由于内存(病毒)引起的 一般来说 你先系统重新装一遍 要是用了一段时间还是出现这样的问题 建议换根内存试试 windows蓝屏错误 1 0×00000001 不正确的函数. 2 0×0 ...

  8. qemu-kvm 代码分析

    qemu-kvm 代码分析 虚拟机组成 实际上面所说计算机组成比较笼统,实际处理器,存储器,输入与设备种类繁多,     -   i440FX host PCI bridge and PIIX3 PC ...

  9. FreeBSD设备驱动管理介绍(BSP: Ti AM335x)

    这段时间一直在忙FreeBSD驱动移植的项目,因此对FreeBSD做了一定的了解,鉴于网上对于FreeBSD的设备驱动资料较少,在这里给出本人对于FreeBSD驱动管理的理解心得(主要是USB驱动管理 ...

  10. kernel 3.10代码分析--KVM相关--虚拟机创建\VCPU创建\虚拟机运行

    分三部分:一是KVM虚拟机创建.二是VCPU创建.三是KVM虚拟机运行 第一部分: 1.基本原理 如之前分析,kvm虚拟机通过对/dev/kvm字符设备的ioctl的System指令KVM_CREAT ...

最新文章

  1. python 类继承和组合_Python:继承与组合
  2. 阿里《Java开发手册》中的 1 个bug!
  3. 安卓从业者应该关注:Android 6.0的运行时权限
  4. YUI3学习笔记 ( 8 )
  5. 去哪儿网:报复性滑雪来了 机票预订量超去年
  6. 为何要搞 10 年?方舟编译器专家首次回应
  7. step7设置pcpg_STEP7 PC/PG设置的疑惑
  8. SQL十进制和十六进制相互转换
  9. 基于STM32F103C8T6 HAL库 TM7705数据读取
  10. 饥荒控制台输入没用_饥荒代码为什么我输入没反应
  11. mac 安装问题汇总
  12. PPT 问题 PowerPoint 储存此文件时发生错误
  13. 什么蓝牙耳机最好用?公认好用性价比高的蓝牙耳机推荐
  14. NT3H2111_2211芯片简介
  15. 在线Java 动态运行Java源代码-执行器
  16. 各行各业数据及分析研究报告网站参考
  17. 重定向RedirectAttributes用法
  18. EFR32 xG1x的bootloader被擦除
  19. FL Studio 20.9.2官方中文版全新发布更新功能介绍
  20. window 10 中文家庭版安装,配置,测试ISS服务器

热门文章

  1. mysql odbc 卸载_Linux卸载MySQL
  2. DXGI高帧率屏幕录像软件源码解析(声音捕获,抓屏,ffmpeg录像,MP4录像,flv录像,麦克风采集)(第4篇编码,录像部分)
  3. Java JavaEE JavaSE JavaME JavaWEB 之间的区别与联系
  4. python拟合二元一次函数
  5. c语言中 gotoxy() 函数的使用
  6. 任意直流电压的多通道数据采集与独立测量,只需要一个模块
  7. ZZULIOJ部分题目解答
  8. 网易云音乐API 分析
  9. ffmpeg转码cpu很高,ffmpeg实现GPU(硬编码)加速转码,解决ffmpeg转码速度慢
  10. 单片机ADC0808,DAC0832信号发生器