新聞中心
它將所有驅(qū)動程序和對應的設備集成到一個統(tǒng)一的框架中。在 Linux 內(nèi)核源碼樹中都會定義多個預定義的 class 供用戶選擇使用或者擴展。
在Linux系統(tǒng)中,設備文件是與硬件交互的關(guān)鍵元素。為了更好地管理這些設備文件,Linux內(nèi)核引入了一種稱為“Device Model”的機制,它將所有驅(qū)動程序和對應的設備集成到一個統(tǒng)一的框架中。

江華網(wǎng)站建設公司創(chuàng)新互聯(lián),江華網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為江華數(shù)千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設要多少錢,請找那個售后服務好的江華做網(wǎng)站的公司定做!
在上一篇文章中我們已經(jīng)介紹過,在Device Model 中有三個重要概念:bus、device 和 driver。本文將進一步探討其中的 device,并介紹另外一個重要概念——class。
什么是 class?在 Device Model 中,每個 device 都必須屬于某個 class。可以把 class 看作是各種類型(type) 的集合,比如 USB 設備、網(wǎng)絡接口等等。通過將不同類型的 device 分類到相應的 class 中去管理,就能夠更好地組織和調(diào)度這些設備。
通常情況下,在 Linux 內(nèi)核源碼樹中都會定義多個預定義的 class 供用戶選擇使用或者擴展。例如:
- PCI 類
- USB 類
- tty 類
此外還可以自定義新類別來滿足特定需求。
class 的實現(xiàn)方式那么問題來了——怎樣實現(xiàn)這些類別呢?
當然不能手工編寫大量代碼進行分類管理!因此 Linux 內(nèi)核提供了 kobject/kset 框架,使得 class 的實現(xiàn)變得更加簡單和靈活。
在 kobject/kset 框架中,每個 class 都被表示為一個 struct class 結(jié)構(gòu)體。該結(jié)構(gòu)體包含了許多成員變量,其中比較重要的有:
- name:class 名稱
- owner:指向持有該模塊的內(nèi)核模塊對象的指針
- bus:與之關(guān)聯(lián)的總線類型
- dev_attrs、dev_groups、dev_release 等函數(shù)指針
這些成員變量用于描述該類別所屬設備及其屬性,并定義了一系列操作函數(shù)以管理它們。
class 和 device 的關(guān)系前面已經(jīng)提到,在 Device Model 中所有 device 必須屬于某個 class。那么具體來說,class 又是如何與 device 關(guān)聯(lián)起來呢?
Linux 內(nèi)核使用“kset”機制將同一種 type(即相同類型)device 分組在一起。每個 kset 對象都由一個 struct kset 結(jié)構(gòu)體表示。而每個 class 實例也可以作為一個獨立的 kset 存儲在系統(tǒng)中。
當創(chuàng)建新設備時(通過調(diào)用驅(qū)動程序提供的 probe 函數(shù)),會同時創(chuàng)建相關(guān)聯(lián)的 device 和其所屬類別(即對應的 struct class 實例)。此時 Linux 內(nèi)核會自動將新建立好的設備文件添加到相應類別下并進行管理。
小結(jié)Class 是 Linux 設備模型中的一個重要概念,用于將不同類型的 device 進行分類管理。通過 class 的實現(xiàn)方式和與 device 的關(guān)聯(lián)機制,可以更好地組織和調(diào)度這些設備。
在 Linux 內(nèi)核源碼樹中已經(jīng)定義了多個預定義的 class 供用戶選擇使用或者擴展,并且還可以自定義新類別來滿足特定需求。
總之,在 Device Model 中各種概念相互交織,形成了一套完整而高效的設備管理框架。對于開發(fā)人員來說,掌握 Device Model 是必須的技能之一!
網(wǎng)站題目:Linux設備模型:7、Class
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/cdddgcc.html


咨詢
建站咨詢
