關於spi_driver和spi_device的匹配:
第一種情況:
spidev.c中spi_driver中name欄位
static structspi_driverspidev_spi_driver = ,
...}
和mach-smdk6410.c中的modalias欄位
static structspi_board_infos3c2410_spi0_board = ,
};
要一致才行。
第二種情況:
如果使用id_table來匹配則id_table中的專案要與spi_board_info中的modalias 匹配( 假如.modalias = "mcp2515", ),則在mcp251x.c中
static const struct spi_device_id mcp251x_id_table = ,
,//必須的,};
module_device_table(spi, mcp251x_id_table);
static struct spi_driver mcp251x_can_driver = ,
.id_table = mcp251x_id_table,
}匹配原理
spi_master註冊過程中會掃瞄arch/.../mach-*/board-*.c 中呼叫spi_register_board_info註冊的資訊,為每乙個與本匯流排編號相同的資訊建立乙個spi_device。
根據linux核心的驅動模型,註冊在同一匯流排下的驅動和裝置會進行匹配。spi_bus_type匯流排匹配的依據是名字。這樣當自己編寫的spi_driver和spi_device同名的時候,
spi_driver的probe方法就會被呼叫。spi_driver就能看到與自己匹配的spi_device了。
module_device_table 解釋:
在linux iic驅動中看到一段**:
static struct platform_device_id xx_driver_ids = , , ,
};module_device_table(platform, xx_driver_ids);
module_device_table什麼意思呢?查詢了一番發現,很多文章表述的不夠明確,我結合文章及自己的分析理解說一下,不知道有沒有不對的地方。
module_device_table一般用在熱插拔的裝置驅動中。
上述xx_driver_ids結構,是此驅動所支援的裝置列表。
作用是:將xx_driver_ids結構輸出到使用者空間,這樣模組載入系統在載入模組時,就知道了什麼模組對應什麼硬體裝置。
用法是:module_device_table(裝置型別,裝置表),其中,裝置型別,包括usb,pci等,也可以自己起名字,上述**中是針對不同的平台分的類;裝置表也是自己定義的,它的最後一項必須是空,用來標識結束。
Linux裝置驅動 SPI驅動
spi驅動匯流排架構 spi核心層 x spi控制器驅動層 x spi裝置驅動層 spi函式介面 api 簡單介紹spi協議,硬體原理 4412datasheet sdi 資料輸入buf i2c scl6 sdo 資料輸出buf i2c sda6 sclk 時鐘buf gpc1 1 cs 片選bk ...
匯流排 裝置和驅動
一 匯流排 linux中,使用struct bus type表示一條匯流排,該結構定義在linux device.h中,先只看其中的兩個字段,name表示匯流排的名字,比如usb i2c spi等,match方法用於匹配新增到該匯流排上的裝置和驅動,如果匹配成功,則呼叫驅動中的probe函式。註冊一...
匯流排 裝置 驅動模型
裝置元素 匯流排,驅動,裝置 匯流排 處理器和裝置之間的通道,在裝置模型中,所有的裝置都通過匯流排相連,甚至是內部的虛擬 platform 匯流排 定時器,看門狗並沒有直接相連 在linux裝置模型中,匯流排由bus type結構表示,定義在 匯流排的註冊使用 bus register struct...