首先說(shuō)明下為什么寫(xiě)這篇文章,網(wǎng)上有許多博客也是介紹I2C驅(qū)動(dòng)在linux上移植的實(shí)現(xiàn),但是筆者認(rèn)為他們相當(dāng)一部分沒(méi)有分清所寫(xiě)的驅(qū)動(dòng)時(shí)的驅(qū)動(dòng)模型,是基于device tree, 還是基于傳統(tǒng)的Platform模型,有些文章只是把代碼移植到平臺(tái)上調(diào)試測(cè)試下,并沒(méi)有理清內(nèi)部邏輯調(diào)用關(guān)系,所以覺(jué)得有必要把兩種驅(qū)動(dòng)模型闡述剖析清楚,本文閱讀者必須以在單片機(jī)上調(diào)試過(guò)IIC總線為前提,能夠分析從芯片datasheet和其工作原理和總線的基本操作,雖然I2C硬件體系結(jié)構(gòu)比較簡(jiǎn)單,但是I2C體系結(jié)構(gòu)在Linux中的實(shí)現(xiàn)卻相當(dāng)復(fù)雜,作為驅(qū)動(dòng)工程師,編寫(xiě)具體的I2C驅(qū)動(dòng)時(shí),主要工作如下:

1)、提供I2C適配器的硬件驅(qū)動(dòng),探測(cè),初始化I2C適配器(如申請(qǐng)I2C的I/O地址和中斷號(hào)),驅(qū)動(dòng)CPU控制的I2C適配器從硬件上產(chǎn)生各種信號(hào)以及處理I2C中斷(I2C總線驅(qū)動(dòng));

2)、提供I2C控制的algorithm, 用具體適配器的xxx_xfer()函數(shù)填充i2c_algorithm的master_xfer指針,并把i2c_algorithm指針賦給i2c_adapter的algo指針(I2C總線驅(qū)動(dòng)),用于產(chǎn)生I2C訪問(wèn)從設(shè)備周期所需要的信號(hào);

3)、實(shí)現(xiàn)I2C設(shè)備驅(qū)動(dòng)中的i2c_driver接口,用具體yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函數(shù)指針和i2c_device_id設(shè)備ID表賦給i2c_driver的probe,remove,suspend,resume和id_table指針(I2C設(shè)備驅(qū)動(dòng));

4)、實(shí)現(xiàn)I2C設(shè)備所對(duì)應(yīng)類型的具體驅(qū)動(dòng),i2c_driver只是實(shí)現(xiàn)設(shè)備與總線的掛接(I2C設(shè)備驅(qū)動(dòng))。

Step1,必須理清platform_device和platform_driver之間的匹配方式

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式