隨身碟分析(1)

來源:互聯網
上載者:User

         我下載的原始碼包是linux2.6.32在mini2440上運行,有一個主USB和從USB,但是在從USB 插上我的金士頓隨身碟卻不見反應,因此不由得想探究一下。在/drivers/usb/下有如下檔案:

 

[root@zhaowanli usb]# ls
atm         class  gadget  Kconfig   modules.order  otg     storage
built-in.o  core   host    Makefile  mon            README  usb-skeleton.c
c67x00      early  image   misc      musb           serial  wusbcore

 

 

 

      檔案很多,挑其中幾個重要的檔案分析一下。首先Makefile  和Kconfig   當我們在原始碼根目錄下輸入make  menuconfig 命令

後,所顯示的圖形介面的菜單選項就是由Kconfig提供

其內容部分如下:

 

menuconfig USB_SUPPORT
        bool "USB support"
        depends on HAS_IOMEM
        default y
        ---help---
          This option adds core support for Universal Serial Bus (USB).
          You will also need drivers from the following menu to make use of it.

USB support 是一個布爾型變數,預設情況下為真。此選項表示支援USB裝置。

 

 

       在class下有如下檔案 

[root@zhaowanli class]# ls
cdc-acm.c  cdc-acm.h  cdc-wdm.c  Kconfig  Makefile  usblp.c  usbtmc.c

 

 主要是幾類不常見的裝置的驅動  比如usblp.c 是指usb印表機的驅動。還包括數據機的驅動,usbtmc.c是測試和測量usb讀寫周期時間多少等的驅動。估計是一些USB廠家或者是我們想看看usb效能指標而寫的。而cdc-acm.c和cdc-wdm.c估計應該是指一般的usb抽象。

 

       在core檔案夾下則放著USB裝置公用使用的函數,比如初始化函數,註冊函數等,包括主控制器(host Controller)和集線器(root hub)的驅動.後來隨著主控制器發展越來越複雜,形成三種Universal Host Controller Interface (UHCI),OpenHCI -- Open Host Controller Interface ,Enhanced Host Controller Interface (EHCI)

 

"EHCI"驅動程式設計成為實現新的高速 USB 2.0 協議的晶片提供支援。"OHCI"驅動程式用來為非 PC 系統上的(以及帶有 SiS 和 ALi 晶片集的 PC 主板上的)USB 晶片提供支援。"UHCI"驅動程式用來為大多數其它 PC 主板(包括 Intel 和 Via)上的 USB 實現提供支援。後來單獨立為一個目錄即為host目錄,裡面為三類主控器的驅動,由各個廠家維護。

 

gadget 目錄則對應外設,裡面都是一些廠家的具體裝置和USB外設控制器驅動

 

 

其他的像image目錄下放的是數位相機和掃描器的驅動  input下則是一些滑鼠和鍵盤觸控螢幕的驅動。media目錄下放的是多媒體驅動比如收音機等 而在serial下放的usb串列裝置驅動。

 

 

 

當然最終的目錄是storage目錄,裡面是 USB mass-storage 驅動該目錄下面的檔案如下:

 

[root@zhaowanli storage]# ls
alauda.c         initializers.o  option_ms.c  shuttle_usbat.c  ums-jumpshot.o      unusual_karma.h
alauda.o         isd200.c        option_ms.h  shuttle_usbat.o  ums-karma.o         unusual_onetouch.h
built-in.o       isd200.o        option_ms.o  sierra_ms.c      ums-onetouch.o      unusual_sddr09.h
cypress_atacb.c  jumpshot.c      protocol.c   sierra_ms.h      ums-sddr09.o        unusual_sddr55.h
cypress_atacb.o  jumpshot.o      protocol.h   sierra_ms.o      ums-sddr55.o        unusual_usbat.h
datafab.c        karma.c         protocol.o   transport.c      ums-usbat.o         usb.c
datafab.o        karma.o         scsiglue.c   transport.h      unusual_alauda.h    usb.h
debug.c          Kconfig         scsiglue.h   transport.o      unusual_cypress.h   usb.o
debug.h          libusual.c      scsiglue.o   ums-alauda.o     unusual_datafab.h   usb-storage.o
freecom.c        Makefile        sddr09.c     ums-cypress.o    unusual_devs.h      usual-tables.c
freecom.o        modules.order   sddr09.o     ums-datafab.o    unusual_freecom.h   usual-tables.o
initializers.c   onetouch.c      sddr55.c     ums-freecom.o    unusual_isd200.h
initializers.h   onetouch.o      sddr55.o     ums-isd200.o     unusual_jumpshot.h

 

 

開啟Makefile檔案,其中一部分 為obj-$(CONFIG_USB_STORAGE)       += usb-storage.o

usb-storage-obj-$(CONFIG_USB_STORAGE_DEBUG)     += debug.o

usb-storage-objs :=     scsiglue.o protocol.o transport.o usb.o /
                        initializers.o sierra_ms.o option_ms.o $(usb-storage-obj-y)

ifeq ($(CONFIG_USB_LIBUSUAL),)
        usb-storage-objs        += usual-tables.o
else
        obj-$(CONFIG_USB)       += usb-libusual.o
        usb-libusual-objs       := libusual.o usual-tables.o
endif

obj-$(CONFIG_USB_STORAGE_ALAUDA)        += ums-alauda.o
obj-$(CONFIG_USB_STORAGE_CYPRESS_ATACB) += ums-cypress.o
obj-$(CONFIG_USB_STORAGE_DATAFAB)       += ums-datafab.o
obj-$(CONFIG_USB_STORAGE_FREECOM)       += ums-freecom.o
obj-$(CONFIG_USB_STORAGE_ISD200)        += ums-isd200.o
obj-$(CONFIG_USB_STORAGE_JUMPSHOT)      += ums-jumpshot.o
obj-$(CONFIG_USB_STORAGE_KARMA)         += ums-karma.o
obj-$(CONFIG_USB_STORAGE_ONETOUCH)      += ums-onetouch.o
 

選項CONFIG_USB_STORAGE在Kconfig 中選定,而CONFIG_USB_STORAGE_DEBUG是調試選項

 

在我們需要調試時選上,一般不選。其它選項諸於CONFIG_USB_STORAGE_CYPRESS_ATACB是針對

CYPRESS公司的產品,在/usb/storage/下的源檔案是cypress_atacb.c,編譯後的目標檔案為ums-cypress.o
因此我們重點關注的是scsiglue.o protocol.o transport.o usb.o  initializers.o sierra_ms.o option_ms.o

等檔案。 這些目標檔案對應在/usb/storage/目錄下的源檔案。透徹分析它們是我們理解並掌握USB驅動的關鍵。

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.