《Linux内核修炼之道》——分析内核源码如何入手?(上)

发表于:2011-11-09 09:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:fudan_abc    来源:51Testing软件测试网采编

  透过现象看本质,兽兽门无非就是一些人体艺术展示。同样往本质里看过去,学习内核,就是学习内核的源代码,任何内核有关的书籍都是基于内核,而又不高于内核的。

  既然要学习内核源码,就要经常对内核代码进行分析,而内核代码千千万,还前仆后继的不断往里加,这就让大部分人都有种雾里看花花不见的无助感。不过不要怕,孔老夫子早就留给我们了应对之策:敏于事而慎于言,就有道而正焉,可谓好学也已。这就是说,做事要踏实才是好学生好同志,要遵循严谨的态度,去理解每一段代码的实现,多问多想多记。如果抱着走马观花,得过且过的态度,结果极有可能就是一边看一边丢,没有多大的收获。

  假设全国房价上涨1.5%,假设80后局长是农民子弟,??,既然我们的人生充满了假设,那么我在这里假设你现在就迫不及待的希望研究内核中USB子系统的实现,应该没有意见吧?那好,下面就以USB子系统的实现分析为标本看看分析内核源码应该如何入手。

  分析README

  内核中USB子系统的代码位于目录drivers/usb,这个结论并不需要假设。于是我们进入到该目录,执行命令ls,结果显示如下:

  atm  class  core  gadget  host  image  misc  mon  serial  storage Kconfig 
  Makefile  README usb-skeleton.c

  目录drivers/usb共包含有10个子目录和4个文件,usb-skeleton.c是一个简单的USB driver的框架,感兴趣的可以去看看,目前来说,它还吸引不了我们的眼球。那么首先应该关注什么?如果迎面走来一个ppmm,你会首先看脸、脚还是其它?当然答案依据每个人的癖好会有所不同。不过这里的问题应该只有一个答案,那就是Kconfig、Makefile、README。

  README里有关于这个目录下内容的一般性描述,它不是关键,只是帮助你了解。再说了,面对“read我吧read我吧”这么热情奔放的呼唤,善良的我们是不可能无动于衷的,所以先来看看里面都有些什么内容。

  23 Here is a list of what each subdirectory here is, and what is contained in
  24 them.
  25
  26 core/        - This is for the core USB host code, including the
  27             usbfs files and the hub class driver ("khubd").
  28
  29 host/        - This is for USB host controller drivers.  This
  30             includes UHCI, OHCI, EHCI, and others that might
  31             be used with more specialized "embedded" systems.
  32
  33 gadget/        - This is for USB peripheral controller drivers and
  34             the various gadget drivers which talk to them.
  35
  36
  37 Individual USB driver directories.  A new driver should be added to the
  38 first subdirectory in the list below that it fits into.
  39
  40 image/        - This is for still image drivers, like scanners or
  41             digital cameras.
  42 input/        - This is for any driver that uses the input subsystem,
  43             like keyboard, mice, touchscreens, tablets, etc.
  44 media/        - This is for multimedia drivers, like video cameras,
  45             radios, and any other drivers that talk to the v4l
  46             subsystem.
  47 net/        - This is for network drivers.
  48 serial/        - This is for USB to serial drivers.
  49 storage/    - This is for USB mass-storage drivers.
  50 class/        - This is for all USB device drivers that do not fit
  51             into any of the above categories, and work for a range
  52             of USB Class specified devices.
  53 misc/        - This is for all USB device drivers that do not fit
  54             into any of the above categories.

  这个README文件描述了前边使用ls命令列出的那10个文件夹的用途。那么什么是USB Core?Linux内核开发者们,专门写了一些代码,负责实现一些核心的功能,为别的设备驱动程序提供服务,比如申请内存,比如实现一些所有的设备都会需要的公共的函数,并美其名曰USB Core。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号