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