Linux 內核 struct device 設備


在最低層, Linux 系統中的每個設備由一個 struct device 代表:

 

struct device { struct device *parent; struct kobject kobj; char bus_id[BUS_ID_SIZE]; struct bus_type *bus; struct device_driver *driver; void *driver_data; void (*release)(struct device *dev); /* Several fields omitted */ };

 

有許多其他的 struct device 成員只對設備核心代碼感興趣. 但是, 這些成員值得了解: struct device *parent

327

 

設備的 "parent" 設備 -- 它所附着到的設備. 在大部分情況, 一個父設備是某種 總線或者主控制器. 如果 parent 是 NULL, 設備是一個頂層設備, 這常常不是你 所要的.

 

struct kobject kobj;

 

代表這個設備並且連接它到層次中的 kobject. 注意, 作為一個通用的規則, device->kobj->parent 等同於 device->parent->kobj.

 

char bus_id[BUS_ID_SIZE];

 

唯一確定這個總線上的設備的字符串. PCI 設備, 例如, 使用標准的 PCI ID 格式, 包含域, 總線, 設備, 和功能號.

 

struct bus_type *bus; 確定設備位於哪種總線.

struct device_driver *driver;

 

管理這個設備的驅動; 我們查看 struct device_driver 在下一節. void *driver_data;

一個可能被設備驅動使用的私有數據成員. void (*release)(struct device *dev);

當對這個設備的最后引用被去除時調用的方法; 它從被嵌入的 kobject 的 release 方法被調用. 注冊到核心的所有的設備結構必須有一個 release 方法, 否則內核打印出慌亂的抱怨.

 

最少, parent, bus_id, bus, 和 release 成員必須在設備結構被注冊前設置.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM