SPI 匯流排驅動和裝置驅動的匹配

2021-08-22 17:47:35 字數 1542 閱讀 2712

關於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...