熱度 10 |
1. Linux 系統(tǒng)已經(jīng)將I2C驅(qū)動(dòng)的功能基本完成,我們只需要將相關(guān)的結(jié)構(gòu)體補(bǔ)充,完成注冊(cè)就可以正常使用,具體 I2C驅(qū)動(dòng)的知識(shí)不在做說(shuō)明。
2. 測(cè)試環(huán)境 Linux-3.4 內(nèi)核,硬件環(huán)境 JZ2440開發(fā)板
3. 開發(fā)過(guò)程:由于I2C采用類似于Platform驅(qū)動(dòng)實(shí)現(xiàn)形式,所以此處采用設(shè)備和驅(qū)動(dòng)分開,以lkt4306為例
(1) 編寫 lkt4306_dev.c 文件
① 定義芯片名稱 和 地址,使用如下結(jié)構(gòu)體實(shí)現(xiàn)
② 在adapter 適配器上創(chuàng)建設(shè)備信息,在static int lkt4306_dev_init() 函數(shù)中實(shí)現(xiàn)。由于JZ2440只有一個(gè)I2C接口,所以i2c_get_adapter(0),可以根據(jù)實(shí)際的掛載的總線確定adapter。具體實(shí)現(xiàn)如下
以上完成lkt4306_dev.c基本功能實(shí)現(xiàn)。
(2) .編寫lkt4306_drv.c文件完成設(shè)備驅(qū)動(dòng)具體實(shí)現(xiàn)
① 編寫讀寫lkt4306函數(shù)功能,通過(guò)i2c_transfer 函數(shù)實(shí)現(xiàn)如下圖所示
寫函數(shù)功能類似。
② 完成file_operations 結(jié)構(gòu)體,便于調(diào)用read 和write函數(shù)調(diào)用
③ 通過(guò)編寫 probe 和remove 函數(shù)完成 字符設(shè)備號(hào)的注冊(cè) 和刪除
以上操作后基本完成了。Linux下 I2C驅(qū)動(dòng)的開發(fā),完整的驅(qū)動(dòng)程序可以通過(guò)網(wǎng)上查找I2C驅(qū)動(dòng)相關(guān)的介紹或者咨詢凌科芯安了解詳細(xì)的開發(fā)源碼