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

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


咨詢
建站咨詢
