第四季-專題13-總線設備驅動模型

專題2-總線設備驅動模型

第1課-總線設備驅動模型

  1. 總線模型概述

隨着技術的不斷進步,系統的拓撲結構也愈來愈複雜,對熱插拔,跨平臺移植性的linux

要求也愈來愈高,2.4內核已經難以知足這些需求。爲適應這種形勢的須要,從Linux 2.6內核開始提供了全新的設備模型。函數

  1. 總線

(1)     描述結構設計

在Linux 內核中, 總線由bus_type 結構表示,orm

定義在<linux/device.h>資源

struct bus_type {開發

const char *name; /*總線名稱*/rem

const char *name; /*總線名稱*/it

int (*match) (struct device *dev, structform

device_driver *drv); /*驅動與設備的匹配函數*/程序

………

}

 

int (*match)(struct device * dev, struct device_driver * drv)

當一個新設備或者新驅動被添加到這個總線時,該函數被調用。用於判斷指定的驅動程序是否能處理指定的設備。若能夠,則返回非零。

(2)     註冊

總線的註冊使用以下函數bus_register(struct bus_type *bus)若成功,新的總線將被添加進系統,並可在/sys/bus 下看到相應的目錄。總線的註銷使用:

void bus_unregister(struct bus_type *bus)

 

(3)     註銷

  1. 驅動

(1)     描述結構

在Linux內核中, 驅動由device_driver結構表示。

struct device_driver {

{

const char *name; /*驅動名稱*/

const char *name; /*驅動名稱*/

struct bus_type *bus; /*驅動程序所在的總線*/

int (*probe) (struct device *dev);

………

}

(2)     註冊

驅動的註冊使用以下函數

int driver_register(struct device_driver *drv)

驅動的註銷使用:

void driver_unregister(struct device_driver *drv)

(3)     註銷

  1. 設備

1. 描述結構

在Linux內核中, 設備由struct device結構表示。

struct device {

{

const char *init_name; /*設備的名字*/

const char *init_name; /*設備的名字*/

struct bus_type *bus; /*設備所在的總線*/

………

}

2. 驅動註冊與註銷

設備的註冊使用以下函數:int device_register(struct device *dev)

設備的註銷使用:void device_unregister(struct device *dev)

在總線上掛載設備

第2課-平臺設備驅動設計

  1. 平臺總線概述

平臺總線(Platform bus)是linux2.6內核加入的一種虛擬總線,其優點在於採用了總線的模型對設備與驅動進行了管理,這總線的模型對設備與驅動進行了管理,這樣提升了程序的可移植性。

       經過平臺總線機制開發設備驅動的流程如圖。

 

 

  1. 平臺設備

平臺設備使用struct platform_device來描述:

struct platform_device {

const char *name; /*設備名*/

int id; /*設備編號,配合設備名使用*/

struct device dev;

u32 num_resources;

struct resource *resource; /*設備資源*/

}

       struct resource {

resource_size_t start;

resource_size_t end;

const char *name;

unsigned long flags; /*資源的類型*/

unsigned long flags; /*資源的類型*/

struct resource *parent, *sibling, *child;

};

註冊平臺設備,使用函數:

int platform_device_register(struct platform_device *pdev)

 

 

完成按鍵的註冊

 

  1. 平臺驅動

平臺驅動使用struct platform_driver 描述:

struct platform_driver {

int (*probe)(struct platform_device *);

int (*remove)(struct platform_device *);

int (*struct platform_device *);

……

}

平臺驅動註冊使用函數:

int platform_driver_register(struct platform_driver *)

 

 

將按鍵驅動修改我平臺驅動模型

相關文章
相關標籤/搜索