出来混,迟早要还的.
从前在复旦,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉.毕业的时候,身边的人读研的读研,出国的出国,找工作的吧,去麦肯锡的去麦肯锡,去IBM的去IBM.而自己却一无所长,没有任何技能,直到这时候才发现那四年欠了很多债,早知今日,何必当初.幸运的是,我还有一张复旦的文凭,依靠着这张文凭,混进了Intel.然而,工作以后,更是发现当初在校期间没有好好读书其实真是在欠债,当初没学,工作以后还是要学,的确是迟早要还的,逃是逃不掉的.
毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了.现在想来依然觉得丢人.
基本上,Linux内核中每一个目录下边都有一个Makefile,Makefile和Kconfig就像一个城市的地图,地图带领我们去认识一个城市,而Makefile和Kconfig则可以让我们了解这个目录下面的结构.drivers/usb/storage/目录下边的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_HP8200e) += 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-objs := scsiglue.o protocol.o transport.o usb.o /
initializers.o $(usb-storage-obj-y)
关于Kconfig文件,在故事的最后会介绍,此刻暂且不表,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命令统计一下这几个文件,发现总长度只有3701行,比最初看到的12000多行少了许多,当时信心就倍增.
不过需要特别注意的是,CONFIG_USB_STORAGE_DEBUG这个编译选项,它不是我们必须的,但是如果真的要自己修改或者调试usb-storage的代码,那么打开这个选项是很有必要的,因为它会负责打印一些调试信息,以后在源代码中我们会看到它的作用.
分享到:
相关推荐
### Linux那些事儿之我是HUB:深入理解USB HUB与Linux内核 #### 引言 在《Linux那些事儿之我是HUB》这本书中,作者通过个人经历与技术探索相结合的方式,介绍了USB HUB(集线器)的概念、工作原理以及在Linux内核中...
"Linux 下 Make 和 Makefile 用法" Make 工具是 Linux 系统中一个非常重要的编译工具,它可以根据 Makefile 文件中的描述来自动维护编译工作。Makefile 文件是 Make 工具的核心组件,它定义了源程序之间的相互关系...
Linux 环境下 make 和 makefile 详解 Makefile 文件是 Linux 环境下的编译管理工具,通过描述源程序之间的相互关系,自动维护编译工作。Makefile 文件需要按照特定的语法进行编写,文件中需要说明如何编译各个...
"LINUX2.6内核makefile详解" Linux 2.6 内核 Makefile 详解是 Linux 内核开发中非常重要的一部分。Makefile 是一个脚本文件,用于描述如何编译和构建 Linux 内核。该文件是 Linux 内核开发的核心组件之一,对开发...
在IT行业中,Linux和Unix操作系统广泛使用Makefile作为构建和管理项目的重要工具。Makefile是一个文本文件,包含了编译和链接程序的规则,使得开发者能够自动化构建过程,提高效率。这个压缩包文件“LinuxUnix的...
### Linux环境下的make与makefile详解 #### 一、引言 在Linux环境中,make与makefile是非常重要的工具,它们不仅对于项目开发至关重要,也是安装软件时不可或缺的一部分。通过make和makefile,开发者能够有效地管理...
通过该Makefile模型,可以自己修改源文件和头文件的路径后,执行make和make clean即可,通用、快速完成makefile的编写
在Linux和Unix环境中,`make`和`makefile`是两个关键工具,它们极大地提高了软件构建和维护的效率。本文将深入探讨这两个概念及其应用场景。 `make`是一个自动化构建工具,它根据`makefile`中的规则来编译、链接源...
在Linux内核开发中,`Makefile`扮演着至关重要的角色,它是构建和编译内核的核心。本文将深入浅出地探讨Linux内核的`Makefile`及其配置系统,旨在帮助初学者理解这一复杂的构建过程。 首先,Linux内核的配置系统由...
### Linux Makefile工程管理器知识点详解 #### 一、Makefile概述 **Makefile** 是一种用于自动化构建软件项目的脚本文件,在Linux环境下被广泛使用。通过定义一系列规则,Makefile 能够根据文件的修改时间自动确定...
### Linux Makefile 教程详解 #### 一、引言 在现代软件开发过程中,Makefile 起着至关重要的作用,特别是在 Linux 和其他 Unix-like 操作系统中。本文将深入探讨 Makefile 的基本概念、编写技巧以及如何利用 ...
在Linux和Unix环境中,`make`是一个强大的自动化构建工具,它根据特定的规则来编译、链接源代码,极大地简化了软件项目的构建过程...理解并熟练掌握`make`和`makefile`的使用,是每个Linux/Unix开发者必备的技能之一。
### make命令及makefile文件详解 #### 一、make与makefile简介 在Linux系统中,`make`命令被广泛用于构建项目。...对于Linux开发者而言,熟练掌握`make`命令和`makefile`文件的编写是非常重要的技能之一。
Linux Makefile 实验文档深入探讨了Makefile在Linux和Unix系统中的应用,以及如何使用GNU make工具来自动化编译和构建项目。Makefile是一个自动化编译的工具,能够根据文件的时间戳来决定哪些文件需要编译,从而提高...
makefile的make命令 在软件开发过程中,makefile是一个非常重要的概念,特别是在 Unix 下的软件编译中。makefile 定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于...
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...
2. **kbuild架构**:kbuild由一系列的Makefile组成,包括顶级的`Makefile`、`Rules.make`、`Kbuild`等,以及每个子目录中的`Kconfig`和`Makefile`。`Kconfig`用于配置内核选项,而`Makefile`则定义了如何构建目标。 ...
Unix环境下的make工具是软件构建的重要工具,它能够通过一个名为makefile的文件自动化构建软件项目。makefile文件定义了一系列的规则,这些规则描述了如何编译和链接项目中的文件。Unix环境下常用的编译器是GCC(GNU...
《Linux下编程工具(make)》资源为您揭示了自动化代码构建的秘密——Make工具和Makefile的高级应用。 Make概述:GNU make不仅仅是一个构建工具,它是一种代码维护的艺术。它能够根据Makefile中定义的规则自动执行...