linux 驅動 7 平台裝置驅動

2022-09-02 08:57:10 字數 3386 閱讀 2058

目錄7.2 平台裝置

7.3 平台驅動

參考區分裝置驅動模型平台裝置驅動模型

裝置驅動模型可以理解為匯流排、裝置、驅動

平台裝置驅動模型就是那些 linux 核心管理沒有物理匯流排(即是不需要特殊時序控制的裝置)(也是linux核心沒有自動建立相應驅動匯流排的裝置型別)的裝置的一套 linux平台匯流排、平台模型、平台驅動的模型。

為解決驅動**和裝置資訊耦合問題,linux提出了裝置驅動模型。

注意,前面的匯流排、裝置、驅動是乙個軟體層面的抽象,與soc中物理匯流排概念不一樣。

物理匯流排:晶元與各個功能外設之間傳送資訊的公共通訊幹線,包括資料匯流排、位址匯流排和控制匯流排,以此來傳輸各種通訊時序

驅動匯流排:負責管理驅動和裝置。制定裝置和驅動的匹配規則。一旦匯流排上註冊了新裝置/驅動,匯流排便執行匹配程式。

對於常見的i2c、spi、usb物理匯流排linux核心都會自動建立與之對應的驅動匯流排。所以 i2c裝置、spi裝置、usb裝置都會掛在在相應的匯流排上。

相對的,實際專案開發中還有很多結構簡單的裝置是不需要特殊的時序控制的。也就沒有相應的物理匯流排,linux 也不會為它們建立相應的驅動匯流排。如 led、rtc時鐘、按鍵等等。

但是為了這些簡單的裝置也能遵循裝置驅動模型,linux 核心引入了一種虛擬匯流排--平台匯流排

平台匯流排用於管理、掛在那些沒有物理匯流排的裝置,且,這些裝置被稱為平台裝置,對應的裝置驅動被稱為平台驅動

平台裝置使用platform_device結構體進行表示,繼承了裝置驅動模型中的device結構體。

平台驅動使用platform_driver結構體進行表示,繼承了裝置驅動模型中的device_driver結構體。

linux核心只有一條平台匯流排,用於圖一管理簡單裝置--platform_bus_type

7.1.1 平台匯流排註冊和匹配方式

最先比較

其次比較

最後比較

7.1.2 原始碼分析

平台匯流排

struct bus_type platform_bus_type = ;

export_symbol_gpl(platform_bus_type);

int __init platform_bus_init(void)
建議:以上匹配規則及原始碼,可以追蹤函式platform_match原始碼來分析。

7.2.1 platform_device

平台裝置

struct platform_device ;
7.2.2 裝置資訊

平台裝置的工作是為 驅動程式 提供 裝置資訊。包括 硬體資訊 和 軟體資訊。

硬體資訊

/** 

* resources are tree-like, allowing nesting etc..

*/struct resource ;

flags:用於指定資源的型別,在 linux 中,資源包括i/o、memory、register、irq、dma、bus等多種型別,如:

ioresource_irq:指定該裝置使用哪個中斷;

ioresource_dma:指定 dma 通道。

裝置驅動程式主要目的還是操作裝置的暫存器。

不同架構的計算機提供不同的操作介面,主要有io埠對映io記憶體對映兩種方式。

io埠對映方式:

io記憶體對映方式:

軟體資訊

7.2.3 註冊/登出平台裝置

註冊:platform_device_register

登出:platform_device_unregister

7.3.1 platform_driver

平台驅動

struct platform_driver ;

struct platform_device_id 

;

7.3.2 註冊/登出平台驅動

註冊:platform_driver_register

登出:platform_driver_unregister

7.3.3 平台驅動獲取裝置資訊

首先要知道的是,平台裝置的硬體資訊儲存在resource結構體中。而軟體資訊則儲存在platform_data中。

獲取硬體資訊:platform_get_resource

若要獲取的資源型別為ioresource_irq,平台裝置驅動還提供以下函式介面,來獲取中斷引腳。

返回:獲取軟體資訊:dev_get_platdata

*dev:struct device 結構體型別指標。

static inline void *dev_get_platdata(const struct device *dev)

驅動開發4 平台裝置驅動

一 平台匯流排 1 真實的計算機系統中,通常各種常見匯流排的 都編寫好,一般不需要我們去建立,比如i2c,pci,usb這些匯流排 2 pc中,多數外設都沒有直接連到cpu的前端匯流排上 但是在嵌入式領域,有很多簡單的外設是直接連到cpu的 前端 匯流排上的 3 為了表示這種和cpu直接相連的前端匯...

Linux裝置驅動之控制台驅動

一 前言 我們在之前分析過input子系統和tty裝置驅動架構.今天需要將兩者結合起來.看看linux中的控制台是怎麼樣實現的.二 控制台驅動的初始化 之前在分析tty驅動架構的時候曾分析到.主裝置為4,次裝置為0的裝置節點,即 dev tty0為當前的控制終端.有tty init 中,有以下 段 ...

Linux 平台裝置驅動模型

linux 平台裝置驅動模型 一。平台匯流排概述 1.平台匯流排 platform bus 是linux2.6核心加入的一種虛擬匯流排,其優勢在於採用了匯流排的模型對裝置與驅動進行了管理,這樣提高了程式的可移植性 二。平台裝置 1.平台裝置使用structplatform device來描述 str...