<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 模塊化的設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)方法

          模塊化的設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)方法

          作者: 時(shí)間:2012-05-15 來源:網(wǎng)絡(luò) 收藏

          NTSTATUSDriverEntry(INPDRIVER_OBJECT

          }

          4應(yīng)用程序與驅(qū)動(dòng)程序之間的同步

          一般在程序中用中斷服務(wù)例程來訪問和操作硬件設(shè)備,它利用應(yīng)用程序傳遞過來的數(shù)據(jù)進(jìn)行中斷操作。為了保證外界設(shè)備正常工作,在驅(qū)動(dòng)程序中一定要有一個(gè)緩沖區(qū)來存儲(chǔ)一定數(shù)量的數(shù)據(jù)。例如在數(shù)控加工中,讓機(jī)床切一個(gè)圓,必須保證機(jī)床在切這個(gè)圓時(shí)的動(dòng)作連續(xù),如果沒有一個(gè)緩沖區(qū)存儲(chǔ)一定數(shù)量的數(shù)據(jù),就有可能出現(xiàn)驅(qū)動(dòng)程序等待應(yīng)用程序傳遞數(shù)據(jù),從而造成機(jī)床的暫時(shí)停頓。然而如果在驅(qū)動(dòng)程序中開一個(gè)緩沖區(qū)來存儲(chǔ)數(shù)據(jù),也會(huì)產(chǎn)生一個(gè)問題:應(yīng)用程序傳遞的數(shù)據(jù)與這些數(shù)據(jù)的執(zhí)行之間有一定的時(shí)間差,導(dǎo)致應(yīng)用程序不知道設(shè)備正在進(jìn)行什么操作。為了解決這個(gè)問題,也就是要保證應(yīng)用程序與驅(qū)動(dòng)程序之間的同步。有了這個(gè)同步信號,可以讓應(yīng)用程序了解設(shè)備正在進(jìn)行何種操作。解決同步問題可以用Event對象。

          具體:在驅(qū)動(dòng)程序中創(chuàng)建內(nèi)核的Event對象,但是又因?yàn)轵?qū)動(dòng)程序和應(yīng)用程序分別運(yùn)行于核心層和用戶層,因此他們之間要看到對方定義的事件相對比較困難,必須要有一個(gè)專門的事件名存放空間。這里有一個(gè)命名可以使用戶層和核心層都可看到Event對象,事件命名應(yīng)為L\BaseNamedObjects\xxx形式。

          在核心層用IoCreateNotificationEvent創(chuàng)建一個(gè)Event對象,用KeSetEvent把Event對象設(shè)置為Signal。用戶層用OpenEvent創(chuàng)建Event對象,這個(gè)Event對象名一定要與在核心層創(chuàng)建的Event對象名一樣,然后用戶層用WaitForSingleObject等待Event對象的狀態(tài)為Signal,一旦Event對象的狀態(tài)為Signal,讓應(yīng)用程序訪問一次驅(qū)動(dòng)程序,從而可以讓應(yīng)用程序知道設(shè)備正在進(jìn)行的操作,保證應(yīng)用程序與驅(qū)動(dòng)程序之間的同步。

          5程序的安裝

          程序的安裝可以分為:手動(dòng)安裝、非標(biāo)準(zhǔn)驅(qū)動(dòng)程序的最終用戶安裝和標(biāo)準(zhǔn)驅(qū)動(dòng)程序的最終用戶安裝。這里主要介紹前兩種。

          5.1手動(dòng)安裝

          主要用于驅(qū)動(dòng)程序的開發(fā)過程中,主要執(zhí)行以下的基本步驟:

          (1)把編譯好的*.sys文件拷貝到系統(tǒng)的%SystemRoot%\system32\drivers目錄下。

          (2)在注冊表中加入合適的項(xiàng):

          (3)使用控制面板中的Device應(yīng)用小程序啟動(dòng)驅(qū)動(dòng)程序。

          5.2非標(biāo)準(zhǔn)驅(qū)動(dòng)程序的最終用戶安裝

          主要是使用下面一些Win32API調(diào)用建立自己的安裝程序:

          (1)CopyFile把驅(qū)動(dòng)程序文件(包括一些自己定義的參數(shù)文件)拷貝到指定的目錄。

          (2)RegCreateKeyEx和RegSetValueEx在Registry中建立驅(qū)動(dòng)程序需要的鍵和值。

          (3)CreateService和StartService創(chuàng)建和啟動(dòng)驅(qū)動(dòng)程序。

          (4)OpenService和DeleteService來卸載驅(qū)動(dòng)程序。

          6結(jié)論

          通過的方法介紹了驅(qū)動(dòng)程序的寫法、驅(qū)動(dòng)程序的開發(fā)環(huán)境和安裝,給讀者一個(gè)清晰的驅(qū)動(dòng)程序的開發(fā)過程,有助于初學(xué)者快速抓住驅(qū)動(dòng)程序開發(fā)的框架。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();