科创园

科创园地,分享技术知识,为科技助力发展,贡献一己之力。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

usb驱动开发2之代码地图

Posted on 2014-03-30 22:29  科创园  阅读(2823)  评论(0编辑  收藏  举报

USB只是Linux庞大家族里的一个小部落,host controller是它们的族长,族里的每个USB设备都需要被系统识别。下图显示包含一个USB接口的USB鼠标导出的结果。

clip_image002

USB系统中的第一个USB设备是root hub,它是和host controller绑定在一起的。这个root hub通常包含在PCI设备中,是连接PCI总线和USB总线的bridge,控制着连接到其上的整个USB总线。所有的root hub,内核的usb core都分配有独特的编号,上面贴出来的例子里,就是usb2,因为它注册在第二个hub。

USB总线上的每个设备都以root hub的编号作为其名字的第一个号码。这个号码后跟着一个“-”字符还有设备所插入的端口号。因此,上面例子中的USB鼠标的设备名就是2-0。因为该USB鼠标具有一个接口,导致了另外一个USB设备被添加到sysfs路径中。因为物理USB设备和单独的USB接口在sysfs中都将表示为单独的设备。USB接口的命名是设备名直到该接口,上面就是2-0后面跟一个“:”和USB配置(Configuration)的编号,然后是一个“.”和该接口的编号。因此上面的鼠标USB接口就是2-0:1.0,表示使用第一个配置,接口编号为0。

闲言少叙,开始代码分析。进入drivers/usb目录下走一走看一看,一般看到如下文件atm class core gadget host image misc mon serial storage Kconfig Makefile README usb-skeleton.c

其中usb-skeleton.c是一个简单的usb driver的框架,感兴趣的可以去看看。当然,我们初次和USB妹妹打招呼,当然不能上来就去看core(我们都知道是核心的意思),我们应该读一读README文件。实际上就是列举了一下usb目录各个文件有什么作用。接下来就是看Kconfig、Makefile文件的内容了。任何linux下驱动模块都必不可少的“地图”。总结下这个两个文件的作用吧,主要强调一下他俩的区别和联系:

Makefile定义了根据该子目录下的源码文件构建目标文件的规则。至于这些规则是否被执行,就取决于用户在配置菜单上是否选择配置这个选项,而这个配置菜单中配置选项就对应Kconfig文件。Do u understand?