這個故事中使用的是2.6.22的內核代碼。在Linux內核代碼目錄中,所有與設備驅動程序有關的代碼都在drivers/目錄下面,在這個目錄中用ls命令可以看到很多子目錄:
lfg1:/usr/src/linux-2.6.22/drivers # ls
Kconfig acpi atm block char cpufreq dma fc4 hid ide
input leds md mfd mtd oprofile pci ps3 s390 serial spi
usb zorro Makefile amba auxdisplay bluetooth clocksource crypto
edac firewire hwmon ieee1394 isdn macintosh media misc net
parisc pcmcia rapidio sbus sh tc video acorn ata
base cdrom connector dio eisa firmware i2c infiniband
kvm mca message mmc nubus parport pnp rtc scsi sn
telephony w1
其中usb目錄包含了所有USB設備的驅動,而usb目錄下面又有它自己的子目錄,進去看一下,
lfg1:/usr/src/linux-2.6.22/drivers # cd usb/
lfg1:/usr/src/linux-2.6.22/drivers/usb # ls
Kconfig Makefile README atm class core gadget host image misc mon
serial storage usb-skeleton.c
注意到每一個目錄下面都有一個Kconfig文件和Makefile,這很重要。稍後會有介紹。
而我們的故事其實是圍繞着drivers/usb/storage這個目錄來展開的。實際上這裏邊的代碼清清楚楚地展示了 我們日常頻繁接觸的U盤是如何工作的,是如何被驅動起來的。但是這個目錄裏邊的代碼並不是生活在世外桃源,它們總是和外面的世界有着千絲萬縷的瓜葛。可以 繼續進來看一下:
lfg1:/usr/src/linux-2.6.22/drivers/usb # cd storage/
lfg1:/usr/src/linux-2.6.22/drivers/usb/storage # ls
Kconfig alauda.h debug.c dpcm.h initializers.c isd200.h karma.c
onetouch.c protocol.h sddr09.c sddr55.h transport.c usb.c
Makefile datafab.c debug.h freecom.c initializers.h jumpshot.c
karma.h onetouch.h scsiglue.c sddr09.h shuttle_usbat.c transport.h
usb.h alauda.c datafab.h dpcm.c freecom.h isd200.c jumpshot.h
libusual.c protocol.c scsiglue.h sddr55.c shuttle_usbat.h
unusual_devs.h
乍一看,着實嚇了一跳,用`wc -l *`這個命令統計一下,15455行!但是,也許,生活中總是充滿了跌宕起伏。
認真看了一下Makefile和Kconfig之後,心情明顯好了許多。
********************************************