亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 8168 | 回復(fù): 3
打印 上一主題 下一主題

最近看Linux device model的筆記 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-05-27 14:44 |只看該作者 |倒序瀏覽
仍然是以圖表為主。

大家多提意見啊。


device model

device model主要的數(shù)據(jù)結(jié)構(gòu)有三個: kobject, kset 和 subsystem.



相關(guān)數(shù)據(jù)結(jié)構(gòu):

struct kobject {
        char                        * k_name;
        char                        name[KOBJ_NAME_LEN];
        struct kref                kref;
        struct list_head        entry;
        struct kobject                * parent;
        struct kset                * kset;
        struct kobj_type        * ktype;
        struct dentry                * dentry;
};


struct kset {
        struct subsystem        * subsys;
        struct kobj_type        * ktype;
        struct list_head        list;
        spinlock_t                list_lock;
        struct kobject                kobj;
        struct kset_hotplug_ops        * hotplug_ops;
};
  
struct subsystem {
        struct kset                kset;
        struct rw_semaphore        rwsem;
};


他們是整個device model的骨架(用面向?qū)ο蟮目跉庹f:這叫基類(不是雞肋^_`))。

其他所有的結(jié)構(gòu),比如cdev,bus等等,都是在這些骨架上搭建起來的。

kobject是最最基礎(chǔ)的。很多結(jié)構(gòu)都會有一個內(nèi)嵌的kobject.
kobject的引用計數(shù)功能是最重要的。


kset可以看作是一類kojbect的集合,而subsystem可以看作是若干kset的集合。



多個kset可以通過subsys指針指向一個subsystem。但subsystem僅包含一個內(nèi)嵌的kset。
這種單向關(guān)系意味著不可能僅僅通過一個subsystem結(jié)構(gòu)體就找到該subsystem所有的ksets。

他們的聯(lián)系示意圖如下:
                                                         
            


另外需要說明的是,kset中的list是貫穿所有kobject的雙向鏈表,但是并不一定是通過kobject的entry字段穿在一起的。
所有的kobject并不簡單的是一個獨立的kobject,而可能是內(nèi)嵌在其他數(shù)據(jù)結(jié)構(gòu)中的kobject(例如kset,subsystem 等等)

            
               
                 
所有的kset一定屬于一個subsystem中(kset的subsys指向某一個subsystem)
對于subsystem內(nèi)嵌的kset,如果沒有設(shè)定它的subsys, 則是指向自身的subsystem。(見subsystem_register()函數(shù))

論壇徽章:
0
2 [報告]
發(fā)表于 2008-05-27 14:45 |只看該作者
device

相關(guān)數(shù)據(jù)結(jié)構(gòu):

struct device {
        int                 dev_type;            // PCICA, PCICC, PCIXCC_MCL2,
                                            // PCIXCC_MCL3, CEX2C
        enum devstat         dev_stat;            // current device status
        int                 dev_self_x;            // Index in array
        int                 disabled;            // Set when device is in error
        int                 user_disabled;            // Set when device is disabled by user
        int                 dev_q_depth;            // q depth
        unsigned char *         dev_resp_p;            // Response buffer address
        int                 dev_resp_l;            // Response Buffer length
        int                 dev_caller_count;  // Number of callers
        int                 dev_total_req_cnt; // # requests for device since load
        struct list_head dev_caller_list;   // List of callers
};



device model中的設(shè)備用device對象表示。
device對象全都在devices_subsys子系統(tǒng)中。對應(yīng)sysfs中的/sys/devices目錄

設(shè)備是按照層次關(guān)系組織的。
                                                
                                                

                                                               
device中內(nèi)嵌的kobject - kobj 也能夠反應(yīng)出層次關(guān)系。

論壇徽章:
0
3 [報告]
發(fā)表于 2008-05-27 14:47 |只看該作者
device_driver

相關(guān)數(shù)據(jù)結(jié)構(gòu)為:

struct device_driver {
        char                        * name;
        struct bus_type                * bus;

        struct completion        unloaded;
        struct kobject                kobj;
        struct list_head        devices;

        struct module                 * owner;

        int        (*probe)        (struct device * dev);
        int         (*remove)        (struct device * dev);
        void        (*shutdown)        (struct device * dev);
        int        (*suspend)        (struct device * dev, pm_message_t state, u32 level);
        int        (*resume)        (struct device * dev, u32 level);
};



device model中的驅(qū)動程序由device_driver對象表示。
若干個同類的設(shè)備可以共用同一個驅(qū)動程序。

論壇徽章:
0
4 [報告]
發(fā)表于 2008-05-27 14:48 |只看該作者
bus_type

相關(guān)數(shù)據(jù)結(jié)構(gòu):

struct bus_type {
        char                        * name;

        struct subsystem        subsys;
        struct kset                drivers;
        struct kset                devices;

        struct bus_attribute        * bus_attrs;
        struct device_attribute        * dev_attrs;
        struct driver_attribute        * drv_attrs;

        int                (*match)(struct device * dev, struct device_driver * drv);
        int                (*hotplug) (struct device *dev, char **envp,
                                    int num_envp, char *buffer, int buffer_size);
        int                (*suspend)(struct device * dev, pm_message_t state);
        int                (*resume)(struct device * dev);
};


內(nèi)核所支持的每一種總線類型都由一個bus_type對象表示。
bus_type中內(nèi)嵌了一個subsystem - subsys。
系統(tǒng)中的bus_subsys子系統(tǒng)將所有的bus_type中的subsys集合在一起。
bus_subsys對應(yīng)sysfs中的/sys/bus目錄.

另外,bus_type中有兩個內(nèi)嵌的kset對象:devices 和 drivers。分別表示該bus上的設(shè)備和驅(qū)動。





函數(shù)bus_for_each_dev() 和 bus_for_each_drv()分別用于遍歷bus上devices和drivers鏈表中的所有元素。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP