freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux設(shè)備驅(qū)動(dòng)編程模型之上層容器篇-免費(fèi)閱讀

2025-05-10 06:11 上一頁面

下一頁面
  

【正文】 chartype)}新建dirent實(shí)體[cpp] view plaincopyprint?1. structacxt, parent_sd)。 struct sysfs_addrm_cxt acxt。sysfs_put(sd)。30. if/*對(duì)acxt做些清除工作*/acxt,22. =kobj。sdintsysfs_direntacxt。modestruct27. 24. /*將sd借助acxt結(jié)構(gòu)添加到其父節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中*/acxt,*/(!sd)SYSFS_DIR)。11. */8. 7. |*name,2. int /*找到sd的父節(jié)點(diǎn)*/ if (kobjparent) parent_sd = kobjparentsd。/*這樣用object也可以找到sd*/parent_sd,parent_sd15. 11. sysfs_dirent4. 3. sysfs_create_dir/*這樣用object也可以找到sd*/parent_sd,parent_sd15. 11. sysfs_dirent4. 3. sysfs_create_dir if (kobject_name(kobj)) { error = sysfs_create_dir(kobj)。(error)populate_dir(kobj)。{int(error)populate_dir(kobj)。{int spin_lock(amp。kobjksetlist_lock)。kobjksetlist)。為kset中kobj屬性的引用計(jì)數(shù)*/kobjectkset39。12. }11. /*增加ksetkobj的引用計(jì)數(shù),從這里可以看出,kset的引用計(jì)數(shù)3. {*/add kobjparent = NULL。%s39。 } /*如果kobj的parent存在,增加其引用計(jì)數(shù)*/ parent = kobject_get(kobjparent)。elsedump_stack()。46. 45. kobject_name(kobj))。thedon39。%s39. issuesNULL)。NULL,kobj,39。parent。kobjksetkobj)。ifjoin15. }return12. to||8. *parent。3. [cpp] view plaincopyprint?1. static=47. __func__,failedelse43. toif38. /*37. (error)create_dir(kobj)。30. kobjkset28. %s39。(%p):26. 24. kobj_kset_join(kobj)。22. 20. notset,17. with5. kobjectkobjentry)。/*已經(jīng)初始化*/9. if*kobj)/*已經(jīng)初始化*/9. if*kobj) /*初始化kset的kobject鏈表*/ INIT_LIST_HEAD(amp。spin_lock_init(amp。INIT_LIST_HEAD(amp。7. for[cpp] view plaincopyprint?1. /**9. 8. 6. {4. akkobj, KOBJ_ADD)。17. =11. err。kset.initialize18. 12. kset*kset_register更重要的一點(diǎn)是,嵌入kobject的結(jié)構(gòu)體可以成為對(duì)象層次架構(gòu)中的一部分。struct cdev { struct kobject kobj。unsigneddev_tlist_head*ops。3. 8. }。constmodulekobj。{下面是設(shè)備驅(qū)動(dòng)模型核心數(shù)據(jù)結(jié)構(gòu)關(guān)系圖總結(jié): struct sysfs_elem_attr s_attr。s_flags。ints_dir。struct15. 與kobjectkobject,在相應(yīng)的char*s_sibling。sysfs_dirent24. 23. sysfs_elem_bin_attrunion/*共用體包含四種不同的結(jié)構(gòu),分別是目錄、structsysfs_dirent就是用來做kobject與dentry的互相轉(zhuǎn)換用的*/sysfs中,每一個(gè)dentry對(duì)應(yīng)了一個(gè)dirent結(jié)構(gòu),dentryd}。8. 5. list_lock。list。{這些結(jié)構(gòu)體定義了kobject相關(guān)的默認(rèn)屬性。}。3. (*release)(structkobj_type對(duì)開發(fā)者而言,在內(nèi)核代碼中最好的方法是利用kref類型和它相應(yīng)的輔助函數(shù),為自己提供一個(gè)通用的、正確的引用計(jì)數(shù)機(jī)制。在使用kref前,必須先通過kref_init()函數(shù)來初始化它:void kref_init(struct kref *kref){ atomic_set(amp。kobject_get(struct初始化時(shí),kobject的引用計(jì)數(shù)設(shè)置為1。/*如果設(shè)置了uevent_suppress字段,說明不希望產(chǎn)生事件,忽略事件正確返回*/}。/*指向包含的kset*/ struct kobj_type *ktype。15. unsigned*sd。/*指向kobject的類型的描述符*/kobjectentry。unsignedintstate_initialized:1。/*容器的引用計(jì)數(shù)器*/struct9. struct[cpp] view plaincopyprint?1. /*設(shè)備驅(qū)動(dòng)程序模型的核心數(shù)據(jù)結(jié)構(gòu),每個(gè)kobject和ls三個(gè)都是目錄項(xiàng),只是前兩個(gè)是目錄,而最后一個(gè)是普通文件。類似于C++中的基類,它嵌入于更大的對(duì)象中,即所謂的容器,如上面提到的bus,class,devices,除此之外,立馬閃現(xiàn)在我們腦子里的對(duì)象還有:driver在內(nèi)核中注冊(cè)的設(shè)備驅(qū)動(dòng)程序,對(duì)應(yīng)的結(jié)構(gòu)體為device內(nèi)核所識(shí)別的所有設(shè)備,依照連接它們的總線對(duì)其進(jìn)行組織,|–bus/Sysfs文件系統(tǒng)的目標(biāo)就是要展現(xiàn)設(shè)備驅(qū)動(dòng)模型組件之間的層次關(guān)系。其中最重要的目錄是devices,該目錄將設(shè)備模型導(dǎo)出到用戶空間。,module和power。|–class//sys簡而言之,若要準(zhǔn)確而又高效的完成上述電源管理目標(biāo),內(nèi)核無疑需要一顆設(shè)備樹。可以沿設(shè)備樹的葉子向其根的方向依次遍歷,以保證能以正確順序關(guān)閉各設(shè)備的電源。lmodel)?,F(xiàn)出來——包括所有的總線和內(nèi)部連接。若想在內(nèi)核中實(shí)現(xiàn)智能的電源管理,就需要來建立表示系統(tǒng)中設(shè)備拓?fù)潢P(guān)系的樹結(jié)構(gòu)。而且?guī)缀醵己翢o例外的將其掛載。|—block/|–fd0|–hda|–dev|–device../../devices/pci0000:00/0000:00:|–devices/bus,devices目錄是系統(tǒng)中設(shè)備拓?fù)浣Y(jié)構(gòu)視圖,它直接映射出了內(nèi)核中設(shè)備結(jié)構(gòu)體的組織層次。/sys/sys|–class/…}。kobject結(jié)構(gòu)體?;叵胛募到y(tǒng)中的核心對(duì)象“索引節(jié)點(diǎn)(indoe)”和目錄項(xiàng)“dentry”:Inode—與文件系統(tǒng)中的一個(gè)文件相對(duì)應(yīng)(而實(shí)際上,只有文件被訪問時(shí),才在內(nèi)存創(chuàng)建索引節(jié)點(diǎn))。這就是以隱藏在背后的對(duì)象模型為橋梁,將驅(qū)動(dòng)模型和sysfs文件系統(tǒng)全然聯(lián)系起來。{5. struct/*指向父kobject*/*ktype。sysfs_dirent10. 14. /*如果設(shè)置了uevent_suppress字段,說明不希望產(chǎn)生事件,忽略事件正確返回*/3. structconst/*指向含有容器名稱的字符*/structkset/kobject/attr/attr_group.*/12. /*熱插拔加載事件*/state_remove_uevent_sent:1。int/*指向含有容器名稱的字符*/ struct list_head entry。/*指明是否使用了sysfs*/ unsigned int state_add_uevent_sent:1。引用計(jì)數(shù)kref增加一個(gè)引用計(jì)數(shù)可通過koject_get()函數(shù)完成:structkobject}。3. *kobj)。sysfs_opsstructstruct kobj_type { void (*release)(struct kobject *kobj)。ksets可把kobject集中到一個(gè)集合中,而ktype描述相關(guān)類型kobject所共有的特性,它們之間的重要區(qū)別在于:具有相同ktype的kobject可以被分組到不同的ksets。kobject的kset指針指向相應(yīng)的kset集合。8. 2. structkset_uevent_ops/*包含在kset中的kobject類型的描述符*/ spinlock_t list_lock。directory屬性attribute結(jié)構(gòu)對(duì)應(yīng)sysfs中的文件,也用sysfs_dirent結(jié)構(gòu)表示。4. 6. 符號(hào)鏈接文件、屬性文件、二進(jìn)制屬性文件12. 是互相引用的;17. struct19. s_ino。s_mode。sysfs_inode_attrssysfs_dirent就是用來做kobject與dentry的互相轉(zhuǎn)換用的*/struct/*共用體包含四種不同的結(jié)構(gòu),分別是目錄、unionsysfs_elem_bin_attr23. 24. const char *s_name。 umode_t s_mode。cdev中才真正需要用到kobject結(jié)構(gòu)。count。{kobj。moduleconst8. }。 unsigned int count。kset注冊(cè)[cpp] view plaincopyprint?1. /**a7. 8. 14. kkobj,return*3. kset_register(struct9. EINVAL。13. 15. err。kkobj)。kset_init*ksetkkobj)。initializeksetvoid0。=kobjstate_initializedvoid0。=kobjstate_initialized kref_init(amp。/*已經(jīng)初始化*/}建立sd樹[cpp] view plaincopyprint?1. static3. *parent。8. ||to12. return}15. joinifkobjksetkobj)。parent。39。,kobj,NULL,NULL)。issues39. %sdon39。thekobject_name(kobj))。45. 46. dump_stack()。elseerror6. ENOENT。kobject:kobj)。=ithaveifparentparent:?kobject_name(amp。31. =noisy==%sthingssame44. %serror)。/*表示kobj已經(jīng)在sysfs中*/return if (!kobj) return ENOENT。/*初始化parent字段*/ } pr_debug(kobject: 39。 error = create_dir(kobj)。 } else kobjstate_in_sysfs = 1。kset39。kobject為kset中kobj屬性的引用計(jì)數(shù)*/kobjksetlist)。kobjksetlist_lock)。kobject2. static4. spin_lock(amp。list_add_tail(amp。/* add
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1