linux i2c驅動總結

2021-05-24 10:05:27 字數 1749 閱讀 6264

最近幾天一直在看i2c的驅動架構,看到目前的感覺是說明白吧又不是很透徹,說不明白吧又知道點,總之有點不明白。

明白的:

1)adapter驅動,i2c控制器驅動,如果要開發i2c控制器的,這部分是要實現的。這部分要填充struct i2c_adapter

結構圖和struct alogrithm結構體.

2)裝置驅動,i2c從裝置驅動,主要填充struct i2c_driver結構體;還要根據從裝置的型別,實現從裝置的驅動函式(eg:

char device實現struct file_operations結構體)

3)資料傳輸的過程:應用層的read()/write()->驅動層的read()/write()->i2c_core.c的i2c_transfer()->adapter驅動

algo->master_xfer()函式。這中間有乙個struct i2c_msg結構體,是非常重要的。

不明白的地方:

1)在struct i2c_adapter,struct i2c_client,struct i2c_driver是如果關聯起來的,他們的資料結構在核心中的聯絡是什麼

樣的?在註冊adapter的過程中,相對的不明白的**為i2c_core.c檔案中的i2c_register_adpter()函式中的:

if (adap->nr < __i2c_first_dynamic_bus_num) 

i2c_scan_static_board_info(adap);

dummy = bus_for_each_drv(&i2c_bus_type, null, adap,

i2c_do_add_adapter);                                           

//對上面的理解是adapter已註冊進核心,adapter註冊後在匯流排上尋找此adapter所支援的struct i2c_driver

2)在註冊struct i2c_driver的過程中,相對不明白的是i2c_core.c檔案中的i2c_register_driver()函式中的:

class_for_each_device(&i2c_adapter_class, null, driver,

__attach_adapter);

//對上面的理解是在struct i2c_driver註冊後,在核心中尋找與struct i2c_driver匹配的adapter

3)對於struct i2c_adapter和struct i2c_driver的註冊次序會影響i2c_do_add_adapter()和__attach_adapter()函式

中i2c_detect()的執行。具體沒有分析明白,只是猜測。

分析的體會:

1)分析i2c架構分兩步,第一步:核心已註冊了adapter,當前註冊struct i2c_driver。第二步:核心已註冊了struct i2c_driver,

當前註冊adapter

2)對linux核心的基本知識還是比較薄弱的,例如driver_register()函式,大概知道此函式是什麼意思,但不知道它到底在核心中

幹了些什麼事,它註冊進核心後到底有什麼用處呢。

3)感覺厭倦的時候,幹什麼事都是沒有精神的。沒辦法改變現實,那就改變自己的心態。

分析的非常透徹,敬仰兩位樓主的精神!

linux i2c 驅動分析

static struct platform driver s3c2410 i2c driver static struct platform driver s3c2440 i2c driver static int init i2c adap s3c init void return ret st...

linux i2c匯流排驅動

技術就是這樣,看一百遍不如做十遍。在對i2c做了乙個簡單的記錄之後發現比單看要理解更深刻,當然在記錄完i2c驅動之後,最希望自己能夠堅持自己實現at24c02的讀寫驅動與測試應用程式。由於是做記錄,少不了借用網路各種優秀資源,下圖是某部落格中找到的i2c框架。1 hardware層,cpu的i2c ...

Linux i2c 驅動例項

include linux i2c.h struct i2c client struct i2c adapter 驅動編寫 i2c控制器的驅動一般在platform device註冊列表中註冊。driver i2c busses i2c.c 從機驅動 系統初始化時新增以i2c board info為...