技术开发 频道

史上最经典的Linux内核学习方法论

  【IT168 技术分析

  Makefile不是Make Love

  从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉。毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了,现在想来依然觉得丢人。

  毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。对于一个希望能够在Linux内核的汪洋代码里看到一丝曙光的人来说,将它们放在怎么重要的地位都不过分。

  我们去香港,通过海关的时候,总会有免费的地图和各种指南拿,有了它们在手里我们才不至于无头苍蝇般迷惘的行走在陌生的街道上。即使在内地出去旅游的时候一般来说也总是会首先找份地图,当然了,这时就是要去买了,拿是拿不到的,不同的地方有不同的特色, 只不过有的特色是服务,有的特色是索取。

  Kconfig和Makefile就是Linux Kernel迷宫里的地图。地图引导我们去认识一个城市,而Kconfig和Makefile则可以让我们了解一个Kernel目录下面的结构。我们每次浏览kernel寻找属于自己的那一段代码时,都应该首先看看目录下的这两个文件。

  利用Kconfig和Makefile寻找目标代码

  就像利用地图寻找目的地一样,我们需要利用Kconfig和Makefile来寻找所要研究的目标代码。比如我们打算研究U盘驱动的实现,因为U盘是一种storage设备,所以我们应该先进入到drivers/usb/storage/目录。但是该目录下的文件很多,那么究竟哪些文件才是我们需要关注的?这时就有必要先去阅读Kconfig和Makefile文件。

  对于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这一类设备,而不是针对某一种特定的设备。U盘只是usb mass storage设备中的一种。再比如:

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.
6
相关文章