隨着技術的不斷進步,系統的拓撲結構也愈來愈複雜,對熱插拔,跨平臺移植性的linux
要求也愈來愈高,2.4內核已經難以知足這些需求。爲適應這種形勢的須要,從Linux 2.6內核開始提供了全新的設備模型。函數
(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) 描述結構
在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. 描述結構
在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)
在總線上掛載設備
平臺總線(Platform bus)是linux2.6內核加入的一種虛擬總線,其優點在於採用了總線的模型對設備與驅動進行了管理,這總線的模型對設備與驅動進行了管理,這樣提升了程序的可移植性。
經過平臺總線機制開發設備驅動的流程如圖。
平臺設備使用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)
完成按鍵的註冊
平臺驅動使用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 *)
將按鍵驅動修改我平臺驅動模型