由于使用的linux内核版本为3.6.0 由于3.6版本的内核使用了dts,导致很难找到这方面的资料,对于一个初学者的我来说,花了很久才大概明白这里面驱动的实现方法,忘各位前辈指导;
i2C 设备驱动的工作调用过程:当调用i2c_add_driver函数向I2C总线(i2c-core.c文件中注册的”i2c”总线)增加一个i2c_driver时,会遍历总线中的所有i2c_client,调用总线注册的match函数I2C适配器上是否有与i2c_driver匹配的i2c_client,如果匹配会调用I2C注册的probe函数,然后再调用i2c_driver定义的probe来进行关联和初始化工作。
1.在/driver/i2c/buses/.. 有和平台相关的i2c代码文件,本次使用的平台为ATSAMA5D35,故我所关注的文件为I2c-at91.c。在介绍此文件之前,首先介绍一下我之前学习的i2c框架,设备——总线——驱动模型。这是我对驱动框架的理解,驱动可拆分为driverv——device两部分,dev(i2c-client)会将自己添加到bus的设备链表(注册设备),drv(i2c-drv)会将自己添加到bus的驱动链表(注册驱动),当有设备被添加到bus如果match(i2c-bus-type)成功,将会调用对应的驱动中的probe函数。在这中间构造i2c-client的方法又有4种,