驅動開發4 平台裝置驅動

2021-10-06 10:34:32 字數 2831 閱讀 3282

一 平台匯流排

1 真實的計算機系統中,通常各種常見匯流排的**都編寫好,一般不需要我們去建立,比如i2c,pci,usb這些匯流排

2 pc中,多數外設都沒有直接連到cpu的前端匯流排上

但是在嵌入式領域,有很多簡單的外設是直接連到cpu的(前端)匯流排上的

3 為了表示這種和cpu直接相連的前端匯流排,linux核心中發明了一種虛擬匯流排,稱為平台匯流排

4 所以在嵌入式領域,很多的外設都是連線到平台匯流排上的,所以經常要編寫的簡單外設的驅動,都是平台驅動.

二 如何編寫平台裝置和平台驅動

核心用struct platform_device來表示平台裝置,它是從struct device繼承來的

所以當我們新增註冊了平台裝置後,在/sys下是能看到對應的目錄

核心用struct platform_driver來表示平台驅動,它是從struct device_driver繼承來的

所以當我們新增註冊了平台驅動後,在/sys下是能看到對應的目錄

平台總是已經編寫好的,它要負責平台裝置和平台驅動的匹配工作

以前的原始驅動是將裝置的硬體資訊編碼到了驅動中,這樣一旦硬體資訊有變,就必須修改驅動

成熟優雅的方案要把變與不變分離開來,所以我們要實現裝置(硬體資訊)與驅動的分離

在裝置儲存硬體資訊,而讓驅動從裝置獲取硬體資訊,硬體變化,只需要修改裝置,驅動可以保持不變

裝置中的資源就是指裝置的硬體資訊

三 主要函式

1platform_add_devices用於一次註冊多個平台裝置

platform_device_register一次只註冊乙個平台裝置,其實platform_add_devices是通過多次呼叫platform_device_register來實現的

platform_device_unregister用於登出平台裝置

2 向平台匯流排註冊和登出平台驅動的函式為

platform_driver_register

platform_driver_unregister

3由於載入函式,解除安裝函式基本上做固定的事情,寫起來麻煩,我們可以用module_platform_driver(pdrv);這句會自動擴充套件為載入和解除安裝函式,載入函式完成pdrv的註冊,卸函式進行登出

平台驅動,主要工作會放在probe和remove函式中,當驅動和裝置匹配成功後,會自動呼叫probe函式,當裝置移除或驅動解除安裝時,會自動呼叫remove函式

四 程式框架**

平台裝置出現的目的是為了實現驅動裝置分離

**分兩塊:裝置部分和驅動部分

1 裝置部分 dev.c

#include

#include

#include

#include

//平台裝置登出所用函式

static

void

pdev_release

(struct device *dev)

//用乙個結構體表示硬體裝置

struct platform_device pdev0 =,}

;struct platform_device pdev1 =,}

;//載入函式

static

int __init pltdev_init

(void

)//解除安裝函式

static

void __exit pltdev_exit

(void

)module_init

(pltdev_init)

;//指定載入函式

module_exit

(pltdev_exit)

;//指定解除安裝函式

module_license

("gpl");

//指定許可

2 驅動部分 drv.c

#include

#include

#include

#include

//停止中斷函式

static

intpdrv_suspend

(struct device *dev)

//重新開始函式

static

intpdrv_resume

(struct device *dev)

//封裝電源管理的結構體 作者君用這個主要是為了實現去抖

static

const

struct dev_pm_ops pdrv_pm_ops =

;//當裝置和驅動匹配成功後,會自動呼叫本函式,傳進來的引數是匹配成功的裝置

static

intpdrv_probe

(struct platform_device *pdev)

//當裝置被移除,或驅動被卸時,會自動呼叫本函式

static

intpdrv_remove

(struct platform_device *pdev)

struct platform_driver pdrv =

,.probe=pdrv_probe,

.remove=pdrv_remove,};

module_platform_driver

(pdrv)

;module_license

("gpl");

module_alias

("platform:pdev"

);

linux 驅動 7 平台裝置驅動

目錄7.2 平台裝置 7.3 平台驅動 參考區分裝置驅動模型和平台裝置驅動模型。裝置驅動模型可以理解為匯流排 裝置 驅動。平台裝置驅動模型就是那些 linux 核心管理沒有物理匯流排 即是不需要特殊時序控制的裝置 也是linux核心沒有自動建立相應驅動匯流排的裝置型別 的裝置的一套 linux平台匯...

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

平台裝置驅動框架

框架入口原始檔 led drv.c led dev.c 可根據入口原始檔,再按著框架到核心走一遍 核心版本 linux 2.6.22.6 硬體平台 jz2440 以下是驅動框架 以下是驅動 led dev.c include include include include include inclu...