2011年06月08日

| 分类 Kernel  | 标签 linux  kernel  scsi 

Linux SCSI 子系统学习笔记(1)

tubo posted @ 2011年6月07日 14:21 in kernel with tags linux kernel scsi fcoe usb , 23 阅读

前一段时间,在看 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 内核框架:

    ~/Work/projects/kernel/Doc_YYC/linux_scsi/images/linux_arch.png

    感觉这个图有点老了,现在内核中 IDE 是 PATA 的一个特例, 而后者和 SATA 一起被归到了 ATA 中,并且做为了 SCSI 的 LLD 。

  • SCSI 子系统框架:

    ~/Work/projects/kernel/Doc_YYC/linux_scsi/images/scsi_struct.png
  • 我做的笔记,记录了 SCSI 子系统中各层的作用和相关函数简介:


    ~/Work/projects/kernel/Doc_YYC/linux_scsi/images/scsi_struct_2.png

一会开始读一下 SCSI 层中几个比较重要的代码,等以后有什么心得了再贴出来。


上一篇     下一篇