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

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

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

設(shè)備模型總結(jié) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-08-23 13:45 |只看該作者 |倒序?yàn)g覽

1、必須明白的概念:subsystem,set,kobject。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image002.gif
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image004.gif
而subsystetem在最新內(nèi)核代碼中已經(jīng)沒有,被kset所取代。kobject提供基本的對(duì)象管理,是構(gòu)成Linux2.6設(shè)備模型的核心結(jié)構(gòu),它與sysfs文件系統(tǒng)緊密關(guān)聯(lián),每個(gè)在內(nèi)核中注冊(cè)的kobject對(duì)象都對(duì)應(yīng)于sysfs文件系統(tǒng)中的一個(gè)目錄。Kobject是組成設(shè)備模型的基本結(jié)構(gòu)。

子系統(tǒng)對(duì)應(yīng)有sys目錄下的第一和第二級(jí)目錄:如bus,pci,scsi等。
Kobject對(duì)應(yīng)有設(shè)備、驅(qū)動(dòng)等。

2、總線、設(shè)備、設(shè)備驅(qū)動(dòng)關(guān)系
以上三者在設(shè)備模型中是相互關(guān)聯(lián)的。分別有對(duì)應(yīng)的結(jié)構(gòu)體來表示:

file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image006.gif

file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image008.gif
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image010.gif
以上三者關(guān)系圖如下:
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image012.gif
3、分析頂層bus子系統(tǒng)和pci總線注冊(cè)過程(分析代碼)
Bus.c:(drivers/base)
subsystem_register(&bus_subsys) è kset_add è kset_add
頂層總線系統(tǒng)就對(duì)應(yīng)/sys/bus目錄。其他任何新注冊(cè)的總線內(nèi)型都在改目錄下。頂層總線bus對(duì)外提供了bus_register函數(shù)來保證其他總線在/sys/bus目錄下。往系統(tǒng)內(nèi)注冊(cè)一條新的總線需要調(diào)用該函數(shù)。下面可以看bus_register函數(shù)的調(diào)用過程:
int bus_register(struct bus_type * bus)
{
      int retval;

      retval = kobject_set_name(&bus->subsys.kset.kobj, "%s", bus->name);
      if (retval)
           goto out;

      subsys_set_kset(bus, bus_subsys);
      retval = subsystem_register(&bus->subsys);
      if (retval)
           goto out;

      kobject_set_name(&bus->devices.kobj, "devices");
      bus->devices.subsys = &bus->subsys;
      retval = kset_register(&bus->devices);
      if (retval)
           goto bus_devices_fail;

      kobject_set_name(&bus->drivers.kobj, "drivers");
      bus->drivers.subsys = &bus->subsys;
      bus->drivers.ktype = &ktype_driver;
      retval = kset_register(&bus->drivers);
      if (retval)
           goto bus_drivers_fail;
      bus_add_attrs(bus);

}
所以新注冊(cè)進(jìn)/sys/bus目錄下的總線目錄下又有devices和drivers兩個(gè)目錄,這也與上面device、device_driver、bus關(guān)系圖相吻合。
    搜bus_register就可以知道系統(tǒng)內(nèi)注冊(cè)過哪些總線內(nèi)型,找到pci總線注冊(cè)的地方。
Pci-driver.c:(drivers/pci)
static int __init pci_driver_init(void)
{
   return bus_register(&pci_bus_type);
}
很簡(jiǎn)單,這里正是調(diào)用上面的總線注冊(cè)函數(shù),可以跟進(jìn)去再分析一遍,加深映像。那么注冊(cè)以后我們會(huì)看到目錄/sys/bus/pci,并且該目錄下還有drivers和devices兩個(gè)目錄,它們下面都是空的。
我們?yōu)槭裁匆?cè)總線?
    為設(shè)備服務(wù),這就引出如何注冊(cè)設(shè)備、設(shè)備驅(qū)動(dòng)程序?往系統(tǒng)中注冊(cè)一個(gè)新的總線后至少要向外面到處兩個(gè)函數(shù),一個(gè)是該總線上設(shè)備到來后的往總線上注冊(cè)設(shè)備的函數(shù),另一個(gè)是注冊(cè)設(shè)備驅(qū)動(dòng)的函數(shù)。往往一個(gè)總線與其具體協(xié)議有關(guān),如何發(fā)現(xiàn)設(shè)備、和注冊(cè)設(shè)備是和具體的硬件驅(qū)動(dòng)以及協(xié)議有關(guān)系,所以注冊(cè)設(shè)備從最底下到上面是一個(gè)復(fù)雜的過程,如scsi總線系統(tǒng)注冊(cè)一個(gè)scsi硬盤。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/03/clip_image014.gif

可以猜測(cè)上面分析的兩個(gè)必備函數(shù)作用?最直觀的感覺就是往相對(duì)應(yīng)總線目錄下devices和drivers目錄下填設(shè)備的驅(qū)動(dòng)的信息。這同樣是根據(jù)kobject來實(shí)現(xiàn)的。


本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/103332/showart_2034998.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP