到Linux2.6之后出现设备驱动模型,很多驱动都按照设备驱动模型改写了。设备驱动模型是以复杂度来换取代码的简洁度,其中主要的三角关系就是:总线、设备和驱动。
系统中现有总线,然后驱动和设备分别注册到总线上,一旦驱动和设备匹配,驱动即支持该设备从而注册成功并受总线管理。总线屏蔽大量的技术细节,公用的技术。例如协议,规范等等。而驱动和设备体现的是Linux的“资源和实现”的分离思想。理论上是这么分析,实际上在使用过程中我一般会按照以下步骤来:
1、该总线的匹配规则是啥?也就是总线中的match。知道总线的匹配规则之后对挂在该总线上的设备和驱动是怎么找到对方的就明确了。
2、按照匹配规则进行代码阅读,按照匹配的条件对设备注册和驱动注册的代码进行阅读。例如platform总线,可以使用sourceInsign进行ID搜索,查看对应的驱动。
3、分析驱动对设备的解析,分析驱动利用内核提供的资源。再放过来查看总线提供的哪些已经做好的工作。
以上步骤在之前进行RapidIO和PCI等复杂驱动开发时取到比较高的效率。写出来做个总结也供大家参考。