共計 2110 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章主要講解了“linux 中 platform 是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“linux 中 platform 是什么”吧!
在 linux 中,platform 是一個虛擬總線,與真實的“spi/sdio/usb/pcie”等總線對應;platform 能夠把硬件和軟件分離出來,platform 所描述的資源有一個共同點是在 CPU 的總線上直接取址,平臺設備會分到一個名稱以及一系列諸如地址和中斷請求號之類的資源。
本教程操作環境:linux7.3 系統、Dell G3 電腦。
linux 中 platform 是什么意思
platform 為虛擬總線,與真實的 spi/sdio/usb/pcie 等總線對應
邏輯總線的的一個重要功能是發現設備并且找到合適的驅動以操作這個設備。
platform 總線是一種虛擬的邏輯總線,滿足邏輯互聯功能。為了統一管理設備,platform 可以把物理上不存在總線的一類設備,用平臺總線統一把它們管理起來。
常見的總線如 USB,SPI,UART,PCI,I2S 等總線,是在物理上實實在在存在的總線。Linux 系統為這類總線設計了一種統一管理它們的方法,即 bus。同時也為在物理上沒有總線的設備也統一設計了 platform 總線,所以 Linux 內核設計者就設計了 platform 總線,也就是說,plarform 總線就是為了 SoC 內部設備在物理上沒有總線的設備設計的,它統一歸屬 bus 總線一類。
這樣做的好處是,設備(device)端代碼的編寫者只關心具體的硬件部分,設備共性的部分(穩定不變的部分)被內核設計者完成了,這樣降低了驅動編寫的難度。
通過 platform 總線,可以將設備屬性(也叫數據)和驅動分離,這樣可以使用相同的驅動支持同一功能核心硬件的不同設備。這樣避免了一個設備就需要一個驅動的現象,降低了重復性勞動。
擴展知識
platform 平臺總線相關定義
platform 平臺總線相關的對象定義在文件 drivers/base/platform.c 中。這個文件中實現了平臺總線對象和對象操作方法方面的內容。
兩個重要的數據結構體
1、platform_driver
這是內嵌一個 device_driver 的結構體對象,其中定義了操作對象的方法。
2、platform_device
它是一個內嵌了 device 結構體對象,其中定義了設備描述資源的屬性。
具體對象定義如下:
1、platform_driver 對象定義
struct platform_driver
int (*probe)(struct platform_device *); // 探測函數,安裝設備,初始化設備,并且判斷是否能成功(初始化成功,通訊成功等等)int (*remove)(struct platform_device *); // 從內核中刪除這個設備
void (*shutdown)(struct platform_device *); // 關閉設備
int (*suspend)(struct platform_device *, pm_message_t state); // 掛起
int (*resume)(struct platform_device *); // 喚醒
struct device_driver driver; // 驅動的通用屬性
const struct platform_device_id *id_table; // 設備ID表
};
platform_device 對象對定義:
struct platform_device
const char* name; // 平臺總線中設備的名字, 在平臺總線下有多個設備,每個設備都有自己的名稱
intid; // 設備的排序
struct devicedev; // 所有設備通用的屬性
u32num_resources; // 設備資源,如 IO 等一些外設等的個數
struct resource* resource; // 設備資源的首地址,和上面的個數 num_resources 一起構成一個數組來表示這個資源
const struct platform_device_id*id_entry; // 設備ID表,表示同一種類型的幾個設備的ID號,數組表示。struct pdev_archdataarchdata; /* arch specific additions */// 用戶自定義數據,擴展數據
};
注冊平臺總線驅動的函數:
int platform_driver_register(struct platform_driver *drv)
注冊平臺總線設備的函數:
int platform_device_register(struct platform_device *pdev)
感謝各位的閱讀,以上就是“linux 中 platform 是什么”的內容了,經過本文的學習后,相信大家對 linux 中 platform 是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!