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


咨詢
建站咨詢
