《Linux那些事兒之我是USB》我是隨身碟(2)Makefile

來源:互聯網
上載者:User

“出來混,遲早要還的。”

基本上,Linux
核心中每一個目錄下邊都有一個Makefile
。Makefile
和Kconfig
就像一個城市的地圖,地圖帶領我們去認識一個城市,而Makefile
和Kconfig
則可以讓我們瞭解這個目錄下面的結構。drivers/usb/storage/
目錄下邊的Makefile
內容如下:

lfg1:/usr/src/linux-2.6.22/drivers/usb/storage #
cat Makefile

#

# Makefile for the USB Mass Storage device drivers.

#

# 15 Aug 2000, Christoph Hellwig
<hch@infradead.org>

# Rewritten to use lists instead of if-statements.

#

 

EXTRA_CFLAGS    := -Idrivers/scsi

 

obj-$(CONFIG_USB_STORAGE)       += usb-storage.o

 

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

usb-storage-obj-$(CONFIG_USB_STORAGE_USBAT)     += shuttle_usbat.o

usb-storage-obj-$(CONFIG_USB_STORAGE_SDDR09)    += sddr09.o

usb-storage-obj-$(CONFIG_USB_STORAGE_SDDR55)    += sddr55.o

usb-storage-obj-$(CONFIG_USB_STORAGE_FREECOM)   += freecom.o

usb-storage-obj-$(CONFIG_USB_STORAGE_DPCM)      += dpcm.o

usb-storage-obj-$(CONFIG_USB_STORAGE_ISD200)    += isd200.o

usb-storage-obj-$(CONFIG_USB_STORAGE_DATAFAB)   += datafab.o

usb-storage-obj-$(CONFIG_USB_STORAGE_JUMPSHOT)  += jumpshot.o

usb-storage-obj-$(CONFIG_USB_STORAGE_ALAUDA)    += alauda.o

usb-storage-obj-$(CONFIG_USB_STORAGE_ONETOUCH)  += onetouch.o

usb-storage-obj-$(CONFIG_USB_STORAGE_KARMA)     += karma.o

 

usb-storage-objs :=     scsiglue.o protocol.o transport.o usb.o /

                       
initializers.o $(usb-storage-obj-y)

 

ifneq ($(CONFIG_USB_LIBUSUAL),)

        obj-$(CONFIG_USB)       +=
libusual.o

endif

而Kconfig
檔案,其實就是對上面看到的這些Config
選項進行解釋,Kconfig
檔案比較長,就不貼出來了。但是通過看Kconfig
檔案可以知道,除了CONFIG_USB_STORAGE
這個編譯選項是我們真正需要的以外,別的選項都可以不予理睬。比如,關於CONFIG_USB_STORAGE_DATAFAB
,Kconfig
檔案中有這麼一段,

config USB_STORAGE_DATAFAB
        bool "Datafab Compact Flash
Reader support (EXPERIMENTAL)"
        depends on USB_STORAGE &&
EXPERIMENTAL
        help
          Support for certain
Datafab CompactFlash readers.
          Datafab has a web page
at <http://www.datafabusa.com/

>.

顯然,這個選項和我們沒有關係,首先這是專門針對Datafab
公司的產品的,其次CompactFlash reader
是一種flash
裝置,但這顯然不是U
盤,因為drivers/usb/storage
這個目錄裡邊的代碼是針對一類裝置的,不是某一種特定的裝置,這一類裝置就是USB
Mass Storage
裝置。關於這類裝置,有專門的文檔進行介紹,有相應的spec
描述這類裝置的通訊或者物理上電特性上等方面的規範,U
盤只是其中的一種,這種裝置使用的通訊協定被稱為Bulk-Only Transport
協議。再比如,關於CONFIG_USB_STORAGE_SDDR55
這個選項,Kconfig
檔案中也有對應的一段,

config USB_STORAGE_SDDR55
        bool "SanDisk SDDR-55
SmartMedia support (EXPERIMENTAL)"
        depends on USB_STORAGE &&
EXPERIMENTAL
        help
          Say Y here to include
additional code to support the Sandisk SDDR-55
          SmartMedia reader in the
USB Mass Storage driver.

很顯然這是SanDisk
的產品,並且是針對SM
卡的,這也不是U
盤,所以都不去理睬了。事實上,很容易確定,只有CONFIG_USB_STORAGE
這個選項是需要真正關心的,而它所對應的模組叫usb-storage
,Makefile
中最後幾行也說了:

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

這就意味著我們只需要關注的檔案就是scsiglue.c
,protocol.c
,transport.c
,usb.c
,initializers.c
以及它們同名的.h
標頭檔。再次使用wc -l
命令統計一下這幾個檔案,發現總長度只有3654
行,比最初看到的15455
多行少了許多,當時信心就倍增。

不過需要特別注意的是,CONFIG_USB_STORAGE_DEBUG
這個編譯選項不是必需的,但是如果真的要自己修改或者調試usb-storage
的代碼,那麼開啟這個選項是很有必要的,因為它會負責列印一些調試資訊,以後在原始碼中會看到它的作用。

 

*****************************

摘自《Linux那些事兒之我是USB》

《Linux那些事兒之我是USB》

連結為:china-pub
、噹噹
、卓越

《Linux
核心修鍊之道》連結為: 卓越

、噹噹



china-pub



 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.