这个故事中使用的是 2.6.10 的内核代码.Linux 内核代码目录中, 所有去设备驱动程
序有关的代码都在 drivers/目录下面,在这个目录中我们用 ls 命令可以看到很多子目录.
localhost:/usr/src/linux-2.6.10/drivers # ls
Kconfig atm cdrom eisa ide macintosh message net parp
ort s390 tc w1
Makefile base char fc4 ieee1394 mca misc nubus pci
sbus telephony zorro
acorn block cpufreq firmware input md mmc oprofile pcm
cia scsi usb
acpi bluetooth dio i2c isdn media mtd parisc pnp
serial video
其中 usb 目录包含了所有 usb 设备的驱动,而 usb 目录下面又有它自己的子目录,进
去看一下,
localhost:/usr/src/linux-2.6.10/drivers # cd usb/
locahost:/usr/src/linux-2.6.10/drivers/usb # ls
Kconfig Makefile README atm class core gadget host image input medi
a misc net serial storage usb-skeleton.c
注意到每一个目录下面都有一个 Kconfig 文件和一个 Makefile,这很重要.稍后会有
介绍.
而我们的故事其实是围绕着 drivers/usb/storage 这个目录来展开的.实际上这里边
的代码清清楚楚地展示了我们日常频繁接触的 U 盘是如何工作的,是如何被驱动起来的.但
是这个目录里边的冬冬并不是生活在世外桃源,他们总是和外面的世界有着千丝万缕的瓜葛.
可以继续进来看一下,
localhost:/usr/src/linux-2.6.10/drivers/usb # cd storage/
localhost:/usr/src/linux-2.6.10/drivers/usb/storage # ls
Kconfig debug.c freecom.c isd200.c protocol.c sddr09.c shuttle_usb
at.c unusual_devs.h
Makefile debug.h freecom.h isd200.h protocol.h sddr09.h shuttle_us
bat.h usb.c
datafab.c dpcm.c initializers.c jumpshot.c scsiglue.c sddr55.c transport.c
usb.h
datafab.h dpcm.h initializers.h jumpshot.h scsiglue.h sddr55.h transport.
h
咋一看,着实吓了一跳,用`wc -l *`这个命令统计一下,12076 行,晕死...
但是,也许,生活中总是充满了跌宕起伏.