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

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

Chinaunix

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

NetBSD系列介紹--設(shè)備管理 [復(fù)制鏈接]

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

                                NetBSD系列介紹--設(shè)備管理
1. 設(shè)備的初始化
    NetBSD 中設(shè)備是以設(shè)備之間的總線關(guān)系進(jìn)行管理的,編譯的時(shí)候根據(jù)配置文件生成一個(gè)設(shè)備樹。設(shè)備樹在編譯kernel前執(zhí)行config命令的時(shí)候生成,設(shè)備之間的關(guān)系在src/sys/arch//config/中描述,比如src/sys/arch/i386/config/GENERIC中就描述了一般i386 PC的設(shè)備之間的關(guān)系。這些設(shè)備中有一個(gè)叫mainbus,這個(gè)是根節(jié)點(diǎn),i386 PC中mainbus上掛cpubus,pcibus等等,pcibus上又掛usbbus或者某個(gè)pci設(shè)備,系統(tǒng)初始化的時(shí)候會(huì)一層一層的掃描這些總線,直到所以設(shè)備初始化完畢。
    NetBSD 在 src/sys/kern/init_main.c 中的 main() 中的調(diào)用configure()完成設(shè)備的初始化,在 configure()中會(huì)調(diào)用cpu_configure(),這個(gè)函數(shù)負(fù)責(zé)完成平臺(tái)相關(guān)的設(shè)備初始化,因?yàn)椴煌脚_(tái)的設(shè)備模型可能是不一樣的,在cpu_configure()中會(huì)找mainbus,找到mainbus后會(huì)attach mainbus,然后根據(jù)設(shè)備樹的結(jié)構(gòu)一層一層的初始化設(shè)備節(jié)點(diǎn)數(shù)上的每個(gè)設(shè)備。調(diào)用順序是               
     main()->configure()->config_init()
                        ->cpu_configure()->config_rootfound("mainbus",)->mainbus_attach()
config_init()負(fù)責(zé)初始化自動(dòng)配置相關(guān)的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)有config生成,在執(zhí)行config的時(shí)候會(huì)在編譯目錄里生成3個(gè)*.c的文件,其中兩個(gè)devsw.c和ioconf.c, 和設(shè)備初始化相關(guān)。cpu_configure()會(huì)從由config_init()生成的表中查找設(shè)備和相應(yīng)的驅(qū)動(dòng)程序。
在初始華mainbus的時(shí)候,在mainbus_attach()中初始化所有設(shè)備。
2. 設(shè)備的使用
    在根文件系統(tǒng)的/dev/目錄下,有很多設(shè)備節(jié)點(diǎn),這些設(shè)備需要先打開,然后才能讀寫。通過open()系統(tǒng)調(diào)用就能打開這些設(shè)備,當(dāng)執(zhí)行open()的時(shí)候,文件名是一個(gè)參數(shù),NetBSD kenel拿到這個(gè)文件名之后會(huì)把這個(gè)文件名轉(zhuǎn)換成一個(gè)vnode,在NetBSD中每一個(gè)文件,每一個(gè)目錄都會(huì)有一個(gè)vnode表示,這相關(guān)的內(nèi)容是文件系統(tǒng)的東西,將在文件系統(tǒng)中介紹。比如/dev/console,如果你的根文件系統(tǒng)是ffs,你要訪問這個(gè)設(shè)備,當(dāng)你open 這個(gè)設(shè)備的時(shí)候,系統(tǒng)走到kernel里面會(huì)轉(zhuǎn)到sys_open(),調(diào)用流程是sys_open()->vn_open()->namei()->do_namei()->lookup()->ufs_lookup->ffs_vget()->ufs_vinit()
這個(gè)調(diào)用流程不是具體的,只是指出一個(gè)順序,具體實(shí)現(xiàn)還有認(rèn)真分析代碼。ffs_vget會(huì)讀出這個(gè)inode所在的磁盤的內(nèi)容,然后在ufs_vinit()中會(huì)根據(jù)讀出來的inode的類型初始化vnode中的v_op指針,如果是設(shè)備節(jié)點(diǎn)就初始化為specops,這樣以后的read/write就轉(zhuǎn)到specfs中去了,specfs的實(shí)現(xiàn)在src/sys/miscfs/specfs中。在specfs中,再根據(jù)設(shè)備號(hào)查找相應(yīng)的設(shè)備驅(qū)動(dòng)程序,完成對(duì)設(shè)備的操作。
3. 關(guān)于NetBSD設(shè)備管理的一些說明
    NetBSD的設(shè)備關(guān)系是在編譯內(nèi)核前就指定了的,所以不能動(dòng)態(tài)加載配置中沒有的設(shè)備驅(qū)動(dòng),但現(xiàn)在引入了一個(gè)叫drvctl的設(shè)備,實(shí)現(xiàn)在src/sys/kern/kern_drvctl.c,具體是干什么用的,我還不是很清楚,還沒有仔細(xì)研究,看著像是一種支持動(dòng)態(tài)加載設(shè)備的框架。只有實(shí)現(xiàn)了vget()的文件系統(tǒng)才能做根文件系統(tǒng),否則將不能支持設(shè)備管理,也就是文件系統(tǒng)必須支持從inode的屬性判斷該文件的類型,并能保存設(shè)備的一些信息,主要是設(shè)備號(hào),這樣才能查找設(shè)備驅(qū)動(dòng)。
               
               
               
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/16553/showart_2031790.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