• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            玩心未泯

            卡爾斯希普拉斯

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              19 Posts :: 0 Stories :: 98 Comments :: 0 Trackbacks
                    這兩天時(shí)間完全泡在CE的驅(qū)動(dòng)開發(fā)中,學(xué)習(xí)學(xué)習(xí),感覺就是資料不好找,難入門難上手,象我這樣僅僅只有eVc4的更是沒法調(diào)試沒法跟蹤,困難還是挺多的。學(xué)習(xí)了兩天,現(xiàn)在感覺有那么點(diǎn)意思了,記錄一下與大家分享。
                    首先說明一下,我可能仍然是個(gè)門外漢,因?yàn)橐郧盎緵]做過和硬件相關(guān)的東西,這方面知識(shí)缺乏的要命,現(xiàn)在公司要求做個(gè)驅(qū)動(dòng)出來,也只有硬著頭皮上了,學(xué)習(xí)研究了兩天,基本掌握了一些有用的信息,所以認(rèn)為自己入門了,但僅從自己的感覺出發(fā)都可以說我只是窺見了冰山之一角,還有很多很多都不懂。上次的帖子里面介紹了一些當(dāng)時(shí)收集到的比較有用的資料,那個(gè)PB我也試著下了,下了一兩天沒多少,公司網(wǎng)太破,那個(gè)ftp又不支持?jǐn)帱c(diǎn)續(xù)傳,可害苦了我了,一個(gè)個(gè)的文件包100多M,一掉線就得重來,最后我干脆放棄了。那個(gè)弟兄有的,干脆打個(gè)包把代碼發(fā)給我好了,謝謝了先。
                     好,怎們切入正題。首先介紹一下我的驅(qū)動(dòng)目標(biāo),目的是為了使在pda上運(yùn)行的應(yīng)用程序能夠通過USB口和我們這個(gè)外設(shè)通訊,可以發(fā)送指令給外設(shè),也要求從外設(shè)獲取數(shù)據(jù),因此我把它定位在流接口上,這就引出第一個(gè)概念,流接口,應(yīng)該說這里所說的流接口是Wince上驅(qū)動(dòng)的一種,象串口啊這樣的可以用CreateFile打開的都屬于這個(gè)范疇。其關(guān)鍵在于1)實(shí)現(xiàn)xxx_系列的函數(shù)2)注冊(cè)表中定義Prefix和Dll。其中xxx就是注冊(cè)表中Prefix的值,比如串口就是“COM”。而注冊(cè)表中的DLL就是你的驅(qū)動(dòng)程序dll(wince下的驅(qū)動(dòng)就是一個(gè)dll),加載驅(qū)動(dòng)的時(shí)候,會(huì)到你的dll中去找xxx_系列的函數(shù),所以你的dll一定要導(dǎo)出這些函數(shù)符號(hào)。
            XXX_Init
            XXX_Deinit
            XXX_Open
            XXX_Close
            XXX_Read
            XXX_Write
            XXX_Seek
            XXX_IOControl
            XXX_PowerDown
            XXX_PowerUp
            經(jīng)過測(cè)試,其中前六個(gè)是必須實(shí)現(xiàn)且導(dǎo)出的,否則是不能夠成功加載的。

                     好,先介紹了一些關(guān)于流接口驅(qū)動(dòng)的相關(guān)知識(shí),這部分在網(wǎng)上還是能夠找到不少資料的,我就不多說,回到我要開發(fā)的驅(qū)動(dòng)上,說到底我這個(gè)還首先是個(gè)USB設(shè)備,被識(shí)別之后才能將它驅(qū)動(dòng)成一個(gè)流設(shè)備
                    說到USB驅(qū)動(dòng),就要先介紹一下USB驅(qū)動(dòng)加載過程了。當(dāng)usb設(shè)備接到主機(jī)(usb host,因此你的pda必須是能夠作為usb host使用的)上時(shí),系統(tǒng)就會(huì)根據(jù)它的信息去從注冊(cè)表里查找它的驅(qū)動(dòng)相關(guān)信息,在HKLM\Drivers\Usb\LoadClients下面會(huì)有一些主鍵Group1_ID\Group2_ID\Group3_ID\DeviceID,而DeviceID下面有一個(gè)字符串Dll=DriverFile.dll
            注意,其中Group1_ID,Group2_ID,Group3_ID分別表示什么,以及其匹配的優(yōu)先級(jí)別,可以在《WindowsCE 驅(qū)動(dòng)開發(fā)指南》一書中USB驅(qū)動(dòng)開發(fā)一章去詳細(xì)研究。
                     如果找到匹配的注冊(cè)表信息,系統(tǒng)就會(huì)加載DriverFile.dll,否則就會(huì)提示用戶輸入一個(gè)驅(qū)動(dòng)名稱。
                     那么加載dll的時(shí)候會(huì)有些什么動(dòng)作呢?驅(qū)動(dòng)程序DLL和普通的DLL是否具備不同的入口點(diǎn)呢?
                     先回答第二個(gè)問題,答案是否定的,其入口點(diǎn)和普通的dll沒有區(qū)別。但是加載的過程就不那么簡(jiǎn)單了。你可以理解系統(tǒng)已經(jīng)作了一些事情,使得你可以用一個(gè)普通的dll來作為驅(qū)動(dòng)程序,但是顯然,你必須實(shí)現(xiàn)系統(tǒng)所要求的接口函數(shù)。
                     對(duì)于USB驅(qū)動(dòng)程序來說,有這么幾個(gè)接口函數(shù)是必須實(shí)現(xiàn)且導(dǎo)出的:
            BOOL USBDeviceAttach(USB_HANDLE hDevice,
                                                LPCUSB_FUNCS lpUsbFuncs, 
                                                LPCUSB_INTERFACE lpInterface,
                                                LPCWSTR szUniqueDriverId, 
                                                LPBOOL fAcceptControl,
                                                LPCUSB_DRIVER_SETTINGS lpDriverSettings,
                                                 DWORD dwUnused);
            BOOL USBInstallDriver(LPCWSTR szDriverLibFile);
            BOOL USBUnInstallDriver();
                      建議大家先讀一下sdk的include目錄下的usbdi.h頭文件,這里面定義了很多usb驅(qū)動(dòng)相關(guān)的結(jié)構(gòu)、函數(shù)接口,包括注釋。
                      下班了,明天再寫。 :P
            posted on 2007-04-27 17:54 SuperPlayeR 閱讀(4070) 評(píng)論(2)  編輯 收藏 引用 所屬分類: WinCE/Mobile應(yīng)用開發(fā)

            評(píng)論

            # re: WinCE下驅(qū)動(dòng)開發(fā)入門記錄 2007-04-28 09:35 Uranus
            學(xué)習(xí),學(xué)習(xí)!  回復(fù)  更多評(píng)論
              

            # re: WinCE下驅(qū)動(dòng)開發(fā)入門記錄(一)[未登錄] 2008-04-28 12:08 SEA
            作者悟性好強(qiáng),寫的也好,支持  回復(fù)  更多評(píng)論
              

            色婷婷综合久久久中文字幕| 久久r热这里有精品视频| 久久强奷乱码老熟女| 久久国产免费直播| 三级韩国一区久久二区综合| 亚洲国产精品成人久久| 久久精品国产免费| 久久久久亚洲爆乳少妇无| 成人久久免费网站| 精品久久一区二区| 亚洲性久久久影院| 久久se精品一区二区| 伊人久久大香线蕉AV一区二区| 亚洲精品美女久久777777| 精品无码久久久久久久动漫| 精品国产乱码久久久久软件| 日本久久久精品中文字幕| 狠狠色丁香久久婷婷综合| 久久www免费人成看国产片| 亚洲午夜久久久久久噜噜噜| 久久久久无码中| 91精品国产91久久| 久久久久无码精品国产不卡| 性做久久久久久久久浪潮| 国产亚洲美女精品久久久| 国产精品欧美久久久天天影视| 久久99热这里只有精品国产| 色欲综合久久躁天天躁| 久久996热精品xxxx| 91亚洲国产成人久久精品| 77777亚洲午夜久久多喷| 亚洲AV无一区二区三区久久| 亚洲国产精品成人AV无码久久综合影院 | 国产精品女同一区二区久久| 久久婷婷五月综合97色一本一本| 欧美色综合久久久久久| 亚洲性久久久影院| 亚洲人成无码网站久久99热国产| 日本精品久久久久影院日本 | 日日狠狠久久偷偷色综合0| 国产真实乱对白精彩久久|