亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Linux設(shè)備驅(qū)動(dòng)模型之kobject linux2.6.0

Linux設(shè)備驅(qū)動(dòng)模型之kobject linux2.6.0 時(shí)間:2017-11-24      來源:未知

在linux內(nèi)核版本2.5新出現(xiàn)了/sys 目錄,此目錄結(jié)構(gòu)向用戶展現(xiàn)了設(shè)備驅(qū)動(dòng)模型的層次結(jié)構(gòu)。/sys 提供了一個(gè)設(shè)備驅(qū)動(dòng)與用戶之間的交互接口,對(duì)應(yīng)于sysfs 虛擬文件系統(tǒng)。其中的每一個(gè)目錄都對(duì)應(yīng)一個(gè)內(nèi)核對(duì)象kobject。目錄中存在的文件對(duì)應(yīng)一個(gè)屬性。目錄為用戶展現(xiàn)了總線,設(shè)備,驅(qū)動(dòng)之間的層次關(guān)系,屬性文件為用戶提供了操控設(shè)備驅(qū)動(dòng)的友好接口。 接下來討論設(shè)備模型 主角 struct kobject  路徑 /include/linux/kobject.h (tapas:在內(nèi)核中要想使用struct kobject 必須#include <linux/kobject.h> 可以發(fā)現(xiàn)include linux 正好就是源碼的路徑名)

先來介紹一下其中的成員變量:

const char *name:  (tapas:const char *類型表示該指針指向的內(nèi)容不可以被更改)。在內(nèi)核中它指向的內(nèi)容經(jīng)常是使用kmalloc申請(qǐng)得到內(nèi)存空間。所以在釋放該對(duì)象時(shí),必須kfree。前面提到kobject對(duì)應(yīng)/sys的一個(gè)目錄,那么可以猜出來,name表示對(duì)應(yīng)目錄的名稱。

struct list_head entry: 內(nèi)核鏈表,常用于把屬于同一目錄下目錄鏈接起來。目錄層次關(guān)系的體現(xiàn)。

strutc kobject *parent:同樣表示一個(gè)目錄,該成員指向它的父目錄。偽代碼解釋:struct object *c,*p;  c為目錄,p也為目錄。 如果c->parent = p; 那么 p為c的父目錄。

struct kset *kset: 是設(shè)備模型中的一個(gè)重要結(jié)構(gòu)。以后闡述。

struct kobj_type *ktype: 用于實(shí)現(xiàn)/sys 中的屬相文件,其中包含了讀寫對(duì)應(yīng)文件的操作函數(shù)。

struct sysfs_dirent *sd:設(shè)備模型中/sys虛擬文件系統(tǒng)與設(shè)備驅(qū)動(dòng)借口的關(guān)聯(lián)。當(dāng)使用readwrite系統(tǒng)調(diào)用讀寫/sys中的文件是,就會(huì)通過該它調(diào)用到 ktype對(duì)用的操作函數(shù)。具體實(shí)現(xiàn)方法需要學(xué)習(xí)/sys虛擬文件系統(tǒng)。

struct kref: 是reference count的縮寫(引用次數(shù))。每次使用該對(duì)象會(huì)將該值++,取消引用該變量都會(huì)--。如果--后該變量為0,就會(huì)release(釋放)該對(duì)象該對(duì)象也就隨之消失。

對(duì)成員的介紹到此為止。寫下來寫幾個(gè)內(nèi)核模塊,加以討論。

上述代碼加入內(nèi)核后會(huì)在/sys/目錄下產(chǎn)生 ./my_kobj  目錄。



       

 kobject_create_and_add終會(huì)調(diào)用到這里。kobject_add_varg做三件事情1.設(shè)置kobject->name.2.設(shè)置kobject->parent標(biāo)志層次關(guān)系; 3.將kobject加入到系統(tǒng)中。



       

kobject_add_internal 主要做

 主要做兩件事情,1.根據(jù)kobject根據(jù)情況判定parent的設(shè)置。在后面的kset章加以講解。2.根據(jù)

設(shè)置好的kobject為其在/sys創(chuàng)建目錄項(xiàng)。

在此處提一下kobject_get() 和 kobject_put() 次兩個(gè)函數(shù) 用于操作kobject->kref應(yīng)用數(shù) 前者對(duì)kref

進(jìn)行atomic_inc加1操作。后者進(jìn)行atomic_dec減1操作。如果減到0就會(huì)執(zhí)行 void (*release)(struct kref *kref)

函數(shù)。 在此函數(shù)中會(huì)根據(jù)kref得到他所在的kobject然后調(diào)用kobject_cleanup(struct kobject *kobj)對(duì)其進(jìn)行釋放。只要調(diào)用這個(gè)函數(shù) 那么該內(nèi)核對(duì)象就在內(nèi)核中徹底銷聲匿跡了。kobject_cleanup的實(shí)現(xiàn)在后面章節(jié)解釋。

上一篇:linux內(nèi)核時(shí)間管理

下一篇:TCP握手/揮手的過程分析

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 欧美一区二区免费 | 三级大片免费看 | 国产高清在线精品一区二区 | 国产精品午夜久久久久久99热 | 久久思re热9一区二区三区 | 国产一区二区三区福利 | a视频网站 | 欧美日b| 九九精品国产99精品 | 国产精品推荐天天看天天爽 | 久久99精品久久久久久久不卡 | 日本视频网站在线观看 | 天天天天做夜夜夜夜 | 国产一级毛片一区二区三区 | 国产在线一91区免费国产91 | 99免费精品 | 欧美级 | 久久久久久久久久免免费精品 | 国产欧美第一页 | 午夜在线视频一区二区三区 | 九九久久国产精品免费热6 九九久久精品这里久久网 九九久久久 | 欧美国产亚洲精品高清不卡 | 日日操夜夜添 | 黄色爱爱 | 国产精品久久久久毛片 | 免费观看a级毛片 | 久久尹人香蕉国产免费天天 | 久久99这里只有精品国产 | 99在线精品免费视频 | 国产在线果冻传媒在线观看 | 激情五月亚洲 | 久久夜色精品国产噜噜亚洲a | 黄污网| 亚洲第一黄色网 | 日本在线视频网 | 极品美女一区二区三区视频 | 毛片手机在线视频免费观看 | 国产剧情演绎对白 | 精品久久久久久无码中文字幕 | 欧美一区二区三区综合色视频 | 欧美中日韩在线 |