天天看點

linux release函數,linux (platform_driver)平台裝置驅動常用API函數

Table of Contents

1、裝置層注冊、登出函數

1.1、platform_device_register

原型: int platform_device_register(struct platform_device *pdev)

功能:向核心注冊一個平台裝置

參數: pdev:要注冊平台裝置結構指針

傳回值: 0:注冊成功; 負數:注冊失敗

1.2、platform_device_unregister

原型: void platform_device_unregister(struct platform_device *pdev)

功能:從核心中登出一個平台裝置

參數: pdev:要登出平台裝置結構指針

傳回值: 無

1.3、platform_add_devices

原型:int platform_add_devices(struct platform_device **devs, int num)

功能:一次向核心注冊 num 個平台裝置

參數: devs 是要注冊的平台裝置數組

傳回值: 0:注冊成功; 負數:注冊失敗

2、驅動層注冊登出函數

2.1、platform_driver_register

int platform_driver_register(struct platform_driver *drv)

功能:向核心注冊一個平台驅動。 如此時有比對的平台裝置則會引發核心執行平台驅動結構中的 probe 函數

參數: drv:要注冊的平台驅動結構指針

傳回值: 0:注冊成功;負數:注冊失敗

2.2、platform_driver_ unregister

void platform_driver_ unregister (struct platform_driver *drv)

功能: 從核心中登出一個平台裝置驅動,如此時已比對平台裝置,則會引發核心執行平台驅動結構中的

remove 函數

參數: drv:要注冊的平台驅動結構指針

3、擷取資源函數

3.1、platform_get_resource

原型:

struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num)

功能:

通過探測函數中有裝置指針獲得裝置結構中的指定類型的資源結構位址。 這個函數是在驅動層的探測函數使

參數: dev : 裝置指針 ,實際就是探測函數參數

type: 資源類型

num:同類資源進行重新編号後的下标編号,和裝置層中的資源數組不相同。(要注意這一點)

傳回值:裝置層資源結構數組中對應的資源結構首位址。 NULL:失敗

3.2、platform_get_irq

原型: int platform_get_irq(struct platform_device *dev, unsigned int num)

功能: 通過裝置指針獲得裝置結構中的指定編号的中斷資源起始編号

參數:

dev :裝置指針 ,實際就是探測函數參數

num:同類資源進行重新編号後的下标編号,和裝置層中的資源數組不相同。(要注意這一點)

傳回值: >0 :中斷資源中的起始編号; -ENXIO:失敗

3.3、platform_get_resource_byname

原型:

struct resource *platform_get_resource_byname(struct platform_device *dev,

unsigned int type, const char *name)

功能:通過裝置指針獲得裝置結構中的指定名字指定類型的資源結構記憶體位址

參數:

dev :裝置指針 ,實際就是探測函數參數

name:資源名

傳回值:裝置層資源結構數組中對應的資源結構首位址。 NULL:失敗

3.4、platform_get_irq_byname

原型: int platform_get_irq_byname(struct platform_device *dev, const char *name)

功能:通過裝置指針獲得裝置結構中的指定名字的中斷資源起始編号

參數:

dev :裝置指針 ,實際就是探測函數參數

name:中斷資源名

傳回值: >0 :中斷資源中的起始編号; -ENXIO:失敗

4、申請記憶體資源函數

4.1、request_region

原型:

#define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name), 0)

功能:向核心申請一段 IO 端口(IORESOURCE_IO 類型的)(不常用)

參數:

start:起始位址

n: 連續大小

name:使用者名字,用于核心登記。

傳回值:

非 NULL:申請成功的資源結構記憶體位址 struct resource *

NULL: 所申請的 IO 端口資源已經被别人占用了,申請失敗。

4.2、request_mem_region

原型:

#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), 0)

功能:向核心申請一段 IO 記憶體(IORESOURCE_MEM類型的)

參數:

start:起始位址

n:連續大小

name:使用者名字,用于核心登記。

傳回值:

非 NULL:申請成功的資源結構記憶體位址 struct resource *

NULL: 所申請的 IO 記憶體資源已經被别人占用了,申請失敗。

這個宏在實際程式設計中使用非常多。

4.3、devm_request_region

原型:

#define devm_request_region(dev,start,n,name) \

__devm_request_region(dev, &ioport_resource, (start), (n), (name))

功能:向核心申請一段 IO 端口(IORESOURCE_IO 類型的) ,功能上和 request_region 相同

參數:

dev:裝置指針, struct device *

start:起始位址

n:連續大小

name:使用者名字,用于核心登記。

傳回值:

非 NULL:申請成功的資源結構記憶體位址 struct resource *

NULL: 所申請的 IO 端口資源已經被别人占用了,申請失敗。

4.4、devm_request_mem_region

原型:

#define devm_request_mem_region(dev,start,n,name) \

__devm_request_region(dev, &iomem_resource, (start), (n), (name))

功能:向核心申請一段 IO 記憶體(IORESOURCE_MEM 類型的)(常用來申請IO寄存器)

參數:

dev:裝置指針, struct device *

start:起始位址

n:連續大小

name:使用者名字,用于核心登記。

傳回值:

非 NULL:申請成功的資源結構記憶體位址 struct resource *

NULL: 所申請的 IO 記憶體資源已經被别人占用了,申請失敗。

這個宏在實際程式設計中使用非常多。

5、釋放記憶體資源

5.1、release_region

原型:

#define release_region(start,n) __release_region(&ioport_resource, (start), (n))

功能:釋放一段使用 request_region 申請的 Io 端口空間。

參數:

start:起始位址

n:連續大小

5.2、release_ mem_region

#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))

功能:釋放一段使用 request_mem_region 申請的 Io 記憶體空間。

參數:

start:起始位址

n:連續大小

5.3、devm_release_region

__devm_release_region(dev, &ioport_resource, (start), (n))

這個宏和前面 release_region 相同,隻是多了一個 dev 裝置指針參數,類型為 struct device *

5.4、devm_release_mem_region

#define devm_release_mem_region(dev, start, n) \

__devm_release_region(dev, &iomem_resource, (start), (n))

這個宏和前面 release_mem_region 相同,隻是多了一個 dev 裝置指針參數,類型為 struct device *

linux release函數,linux (platform_driver)平台裝置驅動常用API函數
linux release函數,linux (platform_driver)平台裝置驅動常用API函數

shenlong1356

釋出了136 篇原創文章 · 獲贊 112 · 通路量 6萬+

私信

關注

标簽:resource,struct,start,region,driver,dev,platform,API

來源: https://blog.csdn.net/shenlong1356/article/details/104448348