天天看點

LDD3 D23 01.23 星二

  • 21:20-22:05 20p

    【沒讀明白,裝置模型的用途。以及怎樣實作自己驅動程式的裝置模型】

    第十四章 Linux 裝置模型

    裝置模型使得作業系統能按照一個正确順序周遊硬體。

    通過sysfs,裝置模型用使用者空間提供系統資訊。

    通過裝置模型支援熱插拔

    裝置模型包括一個機制來給裝置配置設定類别, 它在一個更高的功能性的級别上描述了這些裝置, 并且允許它們對使用者空間可見.

    裝置模型的實作要求建立一套機制來處理對象生命期,

    Kobjects, Ksets 和 Subsystems

    Kobject 是基礎的結構, 起初,它被作為一個簡單的引用計數。現在功能更複雜了。包括:

    • 對象的引用計數
    • sysfs 表示
    • 資料結構關聯
    • 熱插拔事件處理

    kobject 基礎知識

    嵌入的kobject

    如果你看看被 kobjects 處理的函數清單, 你會發現它們都是代表其他對象進行的服務. 換句話說, kobject對其自己很少感興趣; 它存在僅僅是為了把一個進階對象連接配接到裝置模型.

    【Q怎樣了解?】

    C 語言不允許直接表達繼承, 是以使用 将一個結構嵌入另一個結構

    【程式設計技巧】

    使用 kobjects 的代碼常常遇到一個問題, 需要從 kobjects的指針,通路包含這個指針的父級結構。應當使用 container_of 宏 (在第 3 章的"open 方法"一節中介紹的).

    kobject 初始化

    首先設定整個 kobject 為 0,避免遇到奇怪的問題

    然後 調用:

    void kobject_init(struct kobject *kobj);

    接着使用下面這個函數,給name 指派

    int kobject_set_name(struct kobject *kobj, const char *format, ...);

    對引用計數的操作

    struct kobject *kobject_get(struct kobject *kobj);

    void kobject_put(struct kobject *kobj);

    必須檢查傳回值并作出相應的處理

    當kobject繼續被使用時,不能解除安裝該子產品。

    release()函數和 kobject 類型

    一個被 kobject 保護的結構無法在任何一個單個的, 可預測的驅動生命周期中的時間點被釋放

    【Q什麼意思?】

     kobject 層次, kset, 和子系統

    【沒讀懂】

    底層sysfs操作

    kobject 是在 sysfs 虛拟檔案系統之後的機制. 對每個在 sysfs 中發現的目錄, 有一個 kobject 潛伏在核心某處.

    熱插拔事件

    一個熱插拔事件是一個從核心到使用者空間的通知

    總線, 裝置, 和驅動

    【沒讀懂】