2011年06月08日
tubo
posted @ 2014年9月03日 00:02
in 未分类
, 412 阅读
Linux SCSI 子系统学习笔记(1)
前一段时间,在看 FCoE 代码的时候,虽然对 FCoE 以及 libfc 两个模块看了好几遍, Initiator 和 Target 在接收到相应数据包时候处理的流程和逻辑也看的差不多了, 但始终有个问题。而前几天在看 USB 相关的代码时候,这个问题又出现了。 FCoE 提供的磁盘也好, USB Mess Storage 也好,都属于 SCSI 设备, 内核是怎样处理这些设备的呢?例如:什么时候发送 TUR, 什么时候发送 INQ ? 为什么内核发现远端有 FCoE Target 或者 U 盘后,会自动的发送这些命令? SCSI 层是怎么管理这些东西的?
这两天趁着等待其他 Team 的人编码以便联调的空,决定看看这个部分的代码和资料。
今天刚刚开始。
首先是从网上找到的一篇资料,Anatomy of the Linux SCSI subsystem 。一个很不错的介绍性的东西,介绍了 SCSI 子系统的构成。
下面是里面的两张图,和我做的一点笔记。
- Linux 内核框架:
感觉这个图有点老了,现在内核中 IDE 是 PATA 的一个特例, 而后者和 SATA 一起被归到了 ATA 中,并且做为了 SCSI 的 LLD 。
- SCSI 子系统框架:
- 我做的笔记,记录了 SCSI 子系统中各层的作用和相关函数简介:
一会开始读一下 SCSI 层中几个比较重要的代码,等以后有什么心得了再贴出来。