i2c-stub

描述

這個模組是一個非常簡單的偽造的I2C/SMBus驅動程式。它實現了六種型別的SMBus命令:快速寫,(r/w) 位元組,(r/w) 位元組資料,(r/w) 字資料,(r/w) I2C塊資料,以及 (r/w) SMBus塊資料。

載入此驅動程式時,您需要提供晶片地址作為模組引數,然後它將只對傳送到這些地址的SMBus命令做出反應。

不需要硬體,也沒有硬體與該模組關聯。它將接受傳送到指定地址的快速寫命令;它將透過從記憶體中的陣列讀取或寫入資料來響應其他命令(也包括髮送到指定地址的命令)。 它還會為處理的每個命令向核心日誌傳送垃圾資訊。

所有位元組操作都實現了一個具有自動遞增功能的指標暫存器。這允許像EEPROM等裝置支援的連續位元組讀取。

預設情況下,SMBus塊命令支援是停用的,必須透過在功能模組引數中設定相應的位 (0x03000000) 來顯式啟用。

SMBus塊命令必須寫入以配置SMBus塊操作的SMBus命令。寫入可以是部分的。塊讀取命令總是返回到目前為止最大寫入選擇的位元組數。

典型的用例是這樣的:

  1. 載入這個模組

  2. 使用 i2cset (來自 i2c-tools 專案) 預載入一些資料

  3. 載入目標晶片驅動模組

  4. 在核心日誌中觀察它的行為

i2c-tools 軟體包中有一個名為 i2c-stub-from-dump 的指令碼,可以從晶片轉儲中自動載入暫存器值。

引數

int chip_addr[10]

要模擬晶片的SMBus地址。

unsigned long functionality

功能覆蓋,用於停用一些命令。 有關合適的值,請參見 <linux/i2c.h> 中的 I2C_FUNC_* 常量。 例如,值 0x1f0000 將僅啟用快速、位元組和位元組資料命令。

u8 bank_reg[10], u8 bank_mask[10], u8 bank_start[10], u8 bank_end[10]

可選的bank設定。 它們指示哪個暫存器中的哪些位選擇活動bank,以及bank暫存器的範圍。

注意事項

如果你的目標驅動輪詢某個位元組或字,等待它改變,stub可能會鎖住它。 使用 i2cset 來解鎖它。

如果你用力傳送垃圾資訊,printk可能會丟失資訊。 這個模組真的需要像 relayfs 這樣的東西。