实例解析linux内核I2C体系结构(2)
作者:刘洪涛,华清远见嵌入式学院讲师. 四、在内核里写i2c设备驱动的两种方式 前文介绍了利用/dev/i2c-0在应用层完成对i2c设备的操作,但很多时候我们还是习惯为i2c设备在内核层编写驱动程序.目前内核支持两种编写i2c驱动程序的方式.下面分别介绍这两种方式的实现.这里分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new style)”. (1) Adapter方式(LEGACY) (下面的实例代码是在2.6.27内核的pca953x.c基础上修改的,原始代码采用的是本文将要讨论的第2种方式,即Probe方式) ● 构建i2c_driver static struct i2c_driver pca953x_driver = { ● 注册i2c_driver static int __init pca953x_init(void) ● attach_adapter动作 执行i2c_add_driver(&pca953x_driver)后会,如果内核中已经注册了i2c适配器,则顺序调用这些适配器来连接我们的i2c设备.此过程是通过调用i2c_driver中的attach_adapter方法完成的.具体实现形式如下: static int pca953x_attach_adapter(struct i2c_adapter *adapter) 地址信息addr_data是由下面代码指定的. 注意:normal_i2c里的地址是你i2c芯片的地址.否则将无法正确探测到设备.而I2C_ CLIENT_INSMOD是一个宏,它会利用normal_i2c构建addr_data. ● 构建i2c_client,并注册字符设备驱动 i2c_probe在探测到目标设备后,后调用pca953x_detect,并把当时的探测地址address作为参数传入. static int pca953x_detect(struct i2c_adapter *adapter, int address, int kind) |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |