首先說(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之間的匹配方式
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26