<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux操作系統下的PCI驅動(dòng)開(kāi)發(fā)

Linux操作系統下的PCI驅動(dòng)開(kāi)發(fā)

作者: 時(shí)間:2011-06-10 來(lái)源:網(wǎng)絡(luò ) 收藏

  32 設備的打開(kāi)及操作

  通過(guò)上述步驟,系統內核就可以發(fā)現并打開(kāi)設備了。設備打開(kāi)模塊中主要完成檢查讀寫(xiě)模式以及申請對設備的控制權等工作。同時(shí)可分配并填private_data數據結構、申請設備I/O資源的占用、申請中斷、注冊中斷處理程序。

  是以操作文件的方式來(lái)操作設備的,也就是通過(guò)系統定義的file_operation結構體向文件系統注冊一些操作設備的函數。其file_operation結構體的定義如下:

  當應用程序對設備文件進(jìn)行諸如open、close、read、write等操作時(shí),內核將通過(guò)file_operation結構訪(fǎng)問(wèn)程序提供的函數。

  簡(jiǎn)單的讀寫(xiě)任務(wù)直接用read、write函數就可以完成,而復雜的控制則需要使用ioctl函數。ioctl函數是設備程序中對設備的I/O通道進(jìn)行管理的函數,可以對設備的一些特性進(jìn)行控制。因此,為實(shí)現對設備各種I/O資源的訪(fǎng)問(wèn)和實(shí)現不同的傳輸方式,通常都需要使用ioc-tl函數,程序的ioctl控制命令差不多完全是用一個(gè)switch語(yǔ)句來(lái)實(shí)現的,可實(shí)現初始化信息的初始化控制、讀寫(xiě)配置空間、讀寫(xiě)I/O端口地址空間、讀寫(xiě)I/O內存空間、DMA傳輸等多種控制操作。

3.3 中斷處理

  Linux將中斷處理程序分解為頂半部和底半部?jì)蓚€(gè)半部。驅動(dòng)程序在打開(kāi)設備時(shí),為系統安裝了中斷處理程序,當硬件設備觸發(fā)中斷時(shí),中斷處理程序首先調用頂半部程序以判斷中斷類(lèi)型,對中斷類(lèi)型的判斷可通過(guò)訪(fǎng)問(wèn)設備處理中斷的寄存器來(lái)實(shí)現。當有中斷信號來(lái)臨時(shí),驅動(dòng)程序將中斷處理任務(wù)排進(jìn)任務(wù)隊列中進(jìn)行“登記”并清除中斷標志,這樣做的目的是占用較少的內核時(shí)間,然后再通過(guò)調度底半部來(lái)運行,這樣,內核負責底半部的函數就會(huì )處理任務(wù)隊列中的中斷任務(wù)??梢哉f(shuō),底半部幾乎做了中斷處理程序所有的事情。

  驅動(dòng)程序在設備驅動(dòng)對象數據結構中為中斷處理定義了一個(gè)任務(wù)隊列Task_DpcForIsr,并將其rouTIne參數設置為負責底半部的函數,data參數設置為傳遞給底半部函數的參數,這樣,當系統獲得中斷信號時(shí),驅動(dòng)程序就可將中斷處理任務(wù)排進(jìn)該任務(wù)隊列中,以提供給底半部應用。

  34 釋放設備模塊及卸載

  釋放設備模塊主要負責釋放對設備的控制權,同時(shí)釋放所占用的內存和中斷等。具體來(lái)說(shuō),首先是釋放對設備的控制權。即對設備控制權的釋放,這只需簡(jiǎn)單地將控制設備控制權的信號量釋放即可。在Linux下可使用up,其調用形式是up(sem),它可遞增信號量的值,并換醒所有正在等待信號量轉為可用狀態(tài)的進(jìn)程。其次是釋放由open分配的、保存在filp->private_data中的所有內容,將其值設為NULL。接著(zhù)釋放中斷。最后釋放PCI設備I/O資源的占用權。對PCI設備的I/O端口資源而言,實(shí)現I/O端口資源占有權的釋放是通過(guò)release_region函數來(lái)完成的,而對于I/O內存資源,則需要使用iounmap函數同時(shí)釋放其內存映射。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>