• <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>

            milkyway的窩

            最初想法的誕生地

             

            VirtualCopy in WinCE6.0

            http://blog.csdn.net/fredzeng/archive/2007/04/04/1551898.aspx

            在CE4.2/5.0里面滾打多年的兄弟應(yīng)該經(jīng)常用這個(gè)函數(shù)吧。這個(gè)函數(shù)方便驅(qū)動(dòng)和應(yīng)用程序范圍任何的物理地址,包括物理內(nèi)存啊,設(shè)備控制器的寄存器啊,甚至GPIO也可以在AP里面隨便拉上拉下。

            這個(gè)函數(shù)雖然方便,但是并不安全,你想你好不容易把一個(gè)功能完善的image給build出來(lái)了,結(jié)果碰到了一個(gè)寫(xiě)AP的“高手”,把你的寄存器和共享內(nèi)存中的數(shù)據(jù)修改得一塌糊涂,最后報(bào)出bug來(lái)說(shuō)你驅(qū)動(dòng)的你會(huì)不會(huì)暈倒!

            還好從CE6.0開(kāi)始我們可以安枕無(wú)憂了,因?yàn)锳P再也不能調(diào)用VirtualCopy函數(shù)來(lái)直接訪問(wèn)物理地址了,但因此帶來(lái)了一些應(yīng)用上的不便。

            VirtualCopy的限制來(lái)源于CE6.0之后kernel的巨大變革,在CE5.0之前的Windows CE操作系統(tǒng)中,kenrel就僅僅是kern.exe(nk.exe),這個(gè)exe其實(shí)是OAL、KITL和Kernel三個(gè)的合體,nk.exe是運(yùn)行于內(nèi)核模式(kernel mode),也就具有了訪問(wèn)特殊地址的權(quán)限,然后除此之外的代碼默認(rèn)都是運(yùn)行于用戶模式(user mode),所以它們的驅(qū)動(dòng)和AP都是等級(jí)的,都在用戶模式運(yùn)行,要運(yùn)行在kernel模式也可以,調(diào)用一個(gè)API SetKmode()就行了。因?yàn)轵?qū)動(dòng)是肯定要訪問(wèn)物理地址的,所以CE5.0以前的OS都是運(yùn)行用戶模式的程式訪問(wèn)物理地址的,然后又為了方便做從物理地址到虛擬地址的映射,就提供了一系列的幫助函數(shù),virtualcopy就是最常用的函數(shù)之一。

            CE6.0開(kāi)始,kernel模式變得比較正規(guī),類似于臺(tái)式機(jī)上的windows系統(tǒng)了,驅(qū)動(dòng)和ap的權(quán)限是嚴(yán)格區(qū)分的,大部分的驅(qū)動(dòng)程序運(yùn)行在kernel模式,它們可以用virtualcopy讀寫(xiě)物理地址對(duì)應(yīng)的物理設(shè)備,但用戶模式的AP將從此沒(méi)有直接訪問(wèn)物理地址的權(quán)限,virtualcopy每次調(diào)用都會(huì)失敗返回。

            在這里還要注意的是,其實(shí)并不是用戶模式就不能使用virtualcopy,virtualcopy只是不能在用戶模式的AP中使用,但是卻還可以在用戶模式的驅(qū)動(dòng)使用,但是在用戶模式的驅(qū)動(dòng)中使用也有條件,那就是必須在對(duì)應(yīng)的注冊(cè)表中設(shè)置可以訪問(wèn)的內(nèi)存地址的范圍才行。

            在某些場(chǎng)合,一些特殊功能的AP確實(shí)需要訪問(wèn)物理地址的,比如設(shè)置保存物理內(nèi)存指定位置的全局變量,開(kāi)發(fā)讀寫(xiě)GPIO的測(cè)試工具等等。在這種情況下一種簡(jiǎn)單的方法是實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的跑在kernel模式的流驅(qū)動(dòng),提供一個(gè)deviceiocontrol的接口來(lái)幫助AP申請(qǐng)對(duì)應(yīng)于物理內(nèi)存地址的虛擬內(nèi)存地址。

            除了virtualcopy之外,CE6下還有很多API是AP和user模式的驅(qū)動(dòng)不能調(diào)用的,給大家參考一下,大家要把CE50下的AP移植到6.0下一定要注意找到替代

            Virtual Memory APIs
            CeVirtualSharedAlloc
            LockPages
            LockPagesEx
            UnlockPages
            UnlockPagesEx
            VirtualAllocCopyEx
            VirtualCopyEx
            VirtualSetAttributes
            CreateStaticMapping
            NKDeleteStaticMapping
            VirtualCopy

            File System APIs
            ReadRegistryFromOEM
            SetStoreQueueBase
            WriteRegistryToOEM

            Power APIs
            PowerOffSystem (很多測(cè)試AP用到)

            Miscellaneous APIs
            SetOOMEvent

            posted on 2007-04-18 10:56 milkyway 閱讀(2263) 評(píng)論(1)  編輯 收藏 引用 所屬分類: wince(別人的文章技巧總結(jié))

            評(píng)論

            # re: VirtualCopy in WinCE6.0 2008-04-16 14:22 amy

            你好,我最近在做WINCE,我用VS2005編譯后在ARM上無(wú)法運(yùn)行,什么原因?
            我的MSN:amywang1840@hotmail.com  回復(fù)  更多評(píng)論   

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            隨筆皆原創(chuàng),文章乃轉(zhuǎn)載. 歡迎留言!

            常用鏈接

            留言簿(37)

            隨筆分類(104)

            隨筆檔案(101)

            文章分類(51)

            文章檔案(53)

            wince牛人

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            99久久精品免费国产大片| 久久精品国产亚洲av麻豆小说| 亚洲中文字幕无码久久2017| 国产精品热久久毛片| 久久久久久亚洲AV无码专区| 一本色道久久综合亚洲精品| 伊人伊成久久人综合网777| 午夜视频久久久久一区| 久久精品三级视频| 色偷偷88欧美精品久久久| 久久国产精品一区| 亚洲国产成人久久综合一区77| 久久亚洲AV无码西西人体| 精品久久久久久国产免费了| 久久久久亚洲AV无码专区网站| 久久最新免费视频| 久久久久人妻一区二区三区| 久久午夜夜伦鲁鲁片免费无码影视 | 欧美日韩精品久久久久 | 伊人久久成人成综合网222| 亚洲国产精品综合久久一线| 久久99九九国产免费看小说| 久久亚洲中文字幕精品有坂深雪| 久久免费的精品国产V∧ | 人妻久久久一区二区三区| 成人久久久观看免费毛片| 国产精品亚洲综合专区片高清久久久 | 久久99精品久久久久久野外| 亚洲精品成人久久久| 久久精品免费一区二区| 91精品国产乱码久久久久久| 久久伊人影视| 久久综合给合久久狠狠狠97色| 91精品国产91久久久久久蜜臀| 久久国产精品波多野结衣AV| 无码人妻久久一区二区三区免费 | 久久国产免费直播| 久久精品这里热有精品| 久久久久亚洲AV无码观看| 亚洲国产成人久久精品影视 | 久久精品人人做人人爽电影|