i2c-stub¶
描述¶
這個模組是一個非常簡單的偽造的I2C/SMBus驅動程式。它實現了六種型別的SMBus命令:快速寫,(r/w) 位元組,(r/w) 位元組資料,(r/w) 字資料,(r/w) I2C塊資料,以及 (r/w) SMBus塊資料。
載入此驅動程式時,您需要提供晶片地址作為模組引數,然後它將只對傳送到這些地址的SMBus命令做出反應。
不需要硬體,也沒有硬體與該模組關聯。它將接受傳送到指定地址的快速寫命令;它將透過從記憶體中的陣列讀取或寫入資料來響應其他命令(也包括髮送到指定地址的命令)。 它還會為處理的每個命令向核心日誌傳送垃圾資訊。
所有位元組操作都實現了一個具有自動遞增功能的指標暫存器。這允許像EEPROM等裝置支援的連續位元組讀取。
預設情況下,SMBus塊命令支援是停用的,必須透過在功能模組引數中設定相應的位 (0x03000000) 來顯式啟用。
SMBus塊命令必須寫入以配置SMBus塊操作的SMBus命令。寫入可以是部分的。塊讀取命令總是返回到目前為止最大寫入選擇的位元組數。
典型的用例是這樣的:
載入這個模組
使用 i2cset (來自 i2c-tools 專案) 預載入一些資料
載入目標晶片驅動模組
在核心日誌中觀察它的行為
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 這樣的東西。