日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

2 FreeBSD 核心( 六 )


當(dāng)調(diào)用登記程序段的時(shí)候,如果major號(hào)和/dev/MAKEDEV的major號(hào)有沖突的時(shí)候,
就調(diào)用全部無關(guān)性device file的處理routine,也可能沒有預(yù)期的的災(zāi)難事情 。還有別的
以外事情,就是當(dāng)/dev里沒有對(duì)應(yīng)的特殊設(shè)備文件的時(shí)候,也就不能從進(jìn)程進(jìn)行參考 。



FreeBSD核心探討.9.驅(qū)動(dòng)程序篇


2.3.1驅(qū)動(dòng)程序初始化
從文件系統(tǒng)的模塊可以看出來,如果要對(duì)驅(qū)動(dòng)程序的物理設(shè)備進(jìn)行io,必須
先對(duì)它們進(jìn)行初始化,否則不能處理process的io 。核心初始化的過程里,一共登記
了兩個(gè)基本的操作過程 。
1.probe 確認(rèn)io設(shè)備
2.attach 設(shè)置device driver內(nèi)部的數(shù)據(jù)結(jié)構(gòu),使它能夠?qū)o設(shè)備
進(jìn)行操作 。登記中斷子程序 。
在device driver中的處理過程有:
1.i/o地址
i/o命令使用的地址,使io設(shè)備的控制硬件和數(shù)據(jù)交換 。
2.中斷號(hào)
io設(shè)備的狀態(tài)變化的時(shí)候,向CPU發(fā)出通知 。
3.共有內(nèi)存地址
根據(jù)設(shè)備的不同,使用一部分內(nèi)存空間進(jìn)行cpu和數(shù)據(jù)的交換 。
4.DMA通道
不用通過cpu做中介,設(shè)備和內(nèi)存直接交換數(shù)據(jù)時(shí)候采用的通道的識(shí)別號(hào) 。
cpu可以在數(shù)據(jù)傳送的時(shí)候同時(shí)執(zhí)行它的機(jī)器語言 。
前兩種是必須有的 。設(shè)備根據(jù)他連接的總線設(shè)備不一樣,處理過程也就不同 。
這個(gè)在核心的configure中反映出來 。

各種總線設(shè)備的device driver的初始化
驅(qū)動(dòng)程序的初始化在main()初始化的過程中調(diào)用configure()
(@i386/i386autoconf.c).

EISA bus
連接EISA bus的io設(shè)備用的device driver的初始化在eisa_configure()
(@i386/eisa/eisaconf.c) 。各個(gè)device driver在module里對(duì)struct eisa_driver
XXX(@i386/eisa/eisaconf.h)進(jìn)行probe,attach等的設(shè)置,準(zhǔn)備在宏DATA_SET
(eisadriver_set,XXX)進(jìn)行登記 。
eisa_configure()(@i386/eisa/eisaconf.c)對(duì)連接EISA bus的全部io設(shè)備
標(biāo)志和i/o地址進(jìn)行檢測(cè) 。之后便調(diào)用登記的probe子程序 。在probe子程序中,通過
eisa_match_dev()(@i386/eisa/eisaconf.c)對(duì)自身檢測(cè),查找io設(shè)備,檢測(cè)i/o中斷
號(hào),然后進(jìn)行使用預(yù)定,之后用eisa_registerdev()(@i386/eisa/eisaconf.c)在
struct eisa_driver XXX對(duì)這個(gè)設(shè)備操作,作為device driver登記 。全部的io設(shè)備
的控制device driver登記完畢后,eisa_configure()就調(diào)用device driver的attach
子程序 。attach子程序則進(jìn)行中斷處理程序的登記和device driver的數(shù)據(jù)的初始化 。

核心的configure文件登記了以下的一些device driver:
--------------------------------------------------------------------------
device device driver的情報(bào) source 參考
--------------------------------------------------------------------------
mainboard_drv i386/eisa/eisaconf.c
ahb ahb_eisa_driver i386/eisa/aha1742.c scsi adapt
ahc ahc_eisa_driver i386/eisa/aic7770.c scsi adapt
bt bt_eisa_driver i386/eisa/bt74x.c scsi adapt
ep ep_eisa_driver i386/eisa/3c5x9.c network interface
fea pdq_eisa_driver i386/eisa/if_fea.c network interface
vx vx_eisa_driver i386/eida/if_vx_eisa.c network interface
--------------------------------------------------------------------------

PCI bus
連接pci bus的設(shè)備的初始化在pci_configure()(@pci/pci.c)進(jìn)行 。各個(gè)
device driver在module內(nèi)的struct pci_device XXX(@pci/pcivar.h)設(shè)置probe和
attach,在通過宏DATA_SET(pcidevice_est,XXX)進(jìn)行登記 。
DATA_SET(pcibus_set,i386pci)(@i386/isa/pcibus.c)登記的子程序可以
得到有關(guān)pci bus的一些信息 。之后和eisa bus處理過程一樣進(jìn)行各種各樣的調(diào)用 。
核心的configure文件登記了以下的一些device driver:
--------------------------------------------------------------------------
device device driver的情報(bào) source 參考
--------------------------------------------------------------------------
ahc ahc_pci_driver pci/aic7870.c scsi adapt

推薦閱讀