青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

milkyway的窩

最初想法的誕生地

 

wince5.0 I/O操作基礎(2)

X86ARM架構的CPU,wince訪問系統內存的方法隨程序所屬模式層次的不同而有所區別.
? 1.
在系統內核模式下(kernel mode),在OAL層訪問,只需要在OEMAddressTable 中做靜態的虛實地址映射就可以了.例如X86架構的映射表格式如下:
???; OEMAddressTable defines the mapping between Physical and Virtual Address? //
定義4GB的虛擬地址和512MB存儲的映射關系
?? ;?? o MUST be in a READONLY Section
?? ;?? o First Entry MUST be RAM, mapping from 0x80000000 -> 0x00000000
?? ;?? o each entry is of the format ( VA, PA, cbSize )
?? ;?? o cbSize must be multiple of 4M
?? ;?? o last entry must be (0, 0, 0)
?? ;?? o must have at least one non-zero entry
?? ; RAM 0x80000000 -> 0x00000000, size 64M?????? //
把物理地址為0x00000000映射到虛擬地址為 0x80000000?
?? dd? 80000000h,??? 0,?? 04000000h
?? ; FLASH and other memory, if any
?? ; dd? FlashVA,????? FlashPA,??? FlashSize
?? ; Last entry, all zeros
?? dd? 0?? 0?? 0
2.
在驅動或應用程序(user mode)中訪問RAM,既可以通過OEMAddressTable+VirtualCopy方式,也可以直接用MmMapIoSpace函數建立物理地址到當前進程虛擬地址的映射關系.
經過OEMAddressTable,實現的只是CPU物理地址到OS內核層虛擬地址的一次映射,如果需要在普通的應用程序中訪問內存,還要再用VirtuaAlloc+VirtualCopy做一個內核到當前進程的二次映射(有一種情況例外,就是你的OS被配置成Full Kernel Mode,這時任何應用程序都可以訪問OS內核地址).
?????
簡單說明幾個關鍵函數:
?????VirtualAlloc
用于在當前進程的虛擬地址空間中保留或者提交空間,在保留時以64KB為單位,提交時以4KB為單位。其函數原型為

?LPVOID VirtualAlloc(

? LPVOID lpAddress, ?// 分配虛擬地址的起始指針

? DWORD dwSize, ????// 大小,以字節為單位

? DWORD flAllocationType, // 類型,設為MEM_RESERVE

? DWORD flProtect????//? 存取保護,設為PAGE_NOACCESS

);

? VirtualCopy 用來綁定物理地址到靜態映射虛擬地址:

? BOOL VirtualCopy(

? LPVOID lpvDest, ????????// 虛擬目的地址指針,接受VirtualAlloc的返回值

? LPVOID lpvSrc, ????????// 源物理地址指針

? DWORD cbSize, ?????????// 大小必須與虛擬地址相同

? DWORD fdwProtect??// 存取保護類型

);

這里需要注意的是 fdwProtect 參數。如果是驅動程序訪問,需要設置為 PAGE_NOCACHE ,以訪問無緩存段虛擬地址。如果映射的物理地址范圍在 0x1FFFFFFF 之上,必須使用 PAGE_PHYSICAL ,此時必須把 lpvSrc 右移八位,實現地址對齊。(這是由內核中 VirtualCopy 的實現決定的,在那個函數中會判斷如果是 PAGE_PHYSICAL 就將 PHYSADDR 左移 8 位移回來,源代碼位于 private/winceos/coreos/nk/kernel 目錄下的 virtmem.c中的DoVirtualCopy

? ??? MmMapIoSpace 用來把物理地址直接映射到與進程無關的虛擬地址上。函數原型為

?PVOID MmMapIoSpace(

? PHYSICAL_ADDRESS PhysicalAddress,

? ULONG NumberOfBytes,

? BOOLEAN CacheEnable

);

? 一個使用 VirtualAlloc+Copy 的例子:把物理地址為 0x10000000 的單元映射到虛擬地址空間中。

#include <windows.h>

?

#define PHYSADDR? ((PVOID)0x10000000)

// PHYSADDR is the physical address of the peripheral

// registers

?

#define SIZE? (4800*4)

?

LPVOID lpv;

BOOL bRet;

?

lpv = VirtualAlloc(0, SIZE, MEM_RESERVE, PAGE_NOACCESS);

// For a user mode driver, always leave the first

// parameter 0 and use only the flags MEM_RESERVE

// and PAGE_NOACCESS Check the return value: lpv == 0

// is an error

?

printf(TEXT("VirtualAlloc reservation @%8.8lx\r\n"), lpv);

bRet = VirtualCopy(lpv, PHYSADDR>>8, SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);

// The lpv parameter is the virtual address returned

// by VirtualAlloc().

// Always use PAGE_NOCACHE */

?

// Check the return value: bRet ==0 is an error */

printf(TEXT("VirtualCopy returned: %d\r\n"), bRet);

?

// At this point lpv is a virtual address which maps

// the I/O registers

// at PHYSADDR for SIZE bytes */

?

posted on 2007-03-19 16:10 milkyway 閱讀(1761) 評論(0)  編輯 收藏 引用 所屬分類: Wince學習小結

導航

統計

公告

隨筆皆原創,文章乃轉載. 歡迎留言!

常用鏈接

留言簿(37)

隨筆分類(104)

隨筆檔案(101)

文章分類(51)

文章檔案(53)

wince牛人

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲人成人99网站| 99精品国产在热久久下载| 午夜亚洲视频| 国产三级精品在线不卡| 久久av一区| 午夜视频精品| 韩国成人理伦片免费播放| 久久婷婷影院| 久久中文精品| 99国产精品99久久久久久| 亚洲激情国产精品| 欧美美女福利视频| 羞羞漫画18久久大片| 午夜精品视频一区| 尤物yw午夜国产精品视频| 欧美成年人网站| 欧美极品aⅴ影院| 香蕉久久夜色| 久久久www免费人成黑人精品| 在线观看91久久久久久| 亚洲黄色片网站| 国产精品美女黄网| 蜜乳av另类精品一区二区| 欧美大片在线观看一区二区| 日韩视频永久免费观看| 亚洲一级免费视频| 亚洲成色777777女色窝| aa级大片欧美三级| 在线观看视频欧美| 日韩视频不卡中文| 国产一区二区三区免费观看| 亚洲国产欧美一区| 国产欧美视频一区二区| 亚洲高清视频一区| 国产精品视频yy9099| 另类专区欧美制服同性| 欧美精品日韩www.p站| 亚洲欧美日韩另类精品一区二区三区| 久久久国产一区二区| 99精品福利视频| 久久福利一区| 亚洲专区免费| 欧美激情一区二区三区成人| 欧美在线亚洲| 欧美日韩一区二区在线| 欧美不卡视频一区| 国产精品午夜在线| 亚洲三级视频在线观看| 国产自产女人91一区在线观看| 91久久久一线二线三线品牌| 国际精品欧美精品 | 国产亚洲欧洲| 一区二区三区国产在线| 亚洲黄色在线视频| 久久狠狠亚洲综合| 欧美在线观看视频一区二区三区| 欧美激情一区二区三区成人| 欧美不卡福利| 狠狠久久亚洲欧美专区| 在线综合视频| 一区二区日韩伦理片| 欧美成人综合网站| 欧美a级一区| 在线观看亚洲精品| 久久精品亚洲国产奇米99| 久久国产精品第一页| 国产精品久久久久av| 99精品欧美一区二区三区综合在线| 亚洲国产毛片完整版| 久久久免费精品视频| 久久亚洲一区二区三区四区| 激情视频亚洲| 久久精品中文字幕免费mv| 久久久亚洲高清| 狠狠色综合色区| 久久久欧美一区二区| 欧美91大片| 亚洲精品欧美一区二区三区| 欧美黄色大片网站| 99国内精品| 午夜精品久久久久久久久久久久| 国产欧美精品国产国产专区| 午夜激情综合网| 久久精品欧美| 亚洲成色777777在线观看影院| 免费不卡中文字幕视频| 亚洲国产精品久久| 日韩视频一区| 欧美视频在线观看视频极品| 亚洲黄色在线视频| 99精品免费视频| 欧美国产日韩视频| 亚洲日本黄色| 亚洲免费观看高清完整版在线观看熊 | 亚洲日韩欧美视频一区| 嫩草影视亚洲| 欧美激情欧美激情在线五月| 在线免费观看一区二区三区| 美国三级日本三级久久99| 欧美福利视频网站| 日韩一区二区福利| 久久综合中文| 亚洲欧洲精品一区二区三区 | 亚洲二区视频在线| 亚洲精品视频在线看| 欧美日韩成人在线视频| 亚洲视频在线观看免费| 欧美一区日韩一区| 激情综合在线| 欧美wwwwww| 欧美一区二区精品| 免费亚洲电影在线| 一个色综合av| 国产欧美一区二区精品仙草咪| 欧美中文字幕在线观看| 欧美国产日韩一区二区在线观看| 一区二区三区在线观看欧美| 欧美成人午夜激情| 亚洲视频一区二区在线观看| 久久久久久久久久久一区 | 欧美一区二区黄| 亚洲经典在线| 午夜天堂精品久久久久| 精品福利免费观看| 国产嫩草影院久久久久| 久久影视精品| 一区二区三区日韩精品视频| 久久精品午夜| 亚洲午夜一二三区视频| 在线播放视频一区| 国产日韩欧美不卡| 欧美日韩另类视频| 久久久蜜桃精品| 亚洲在线视频一区| 99re8这里有精品热视频免费 | 亚洲第一在线| 国产精品一二一区| 久久亚洲精品欧美| 久久久97精品| 宅男噜噜噜66一区二区66| 欧美成人亚洲成人| 久久精品视频免费| 亚洲欧美色婷婷| 亚洲国产日韩欧美在线图片| 极品尤物一区二区三区| 国产乱肥老妇国产一区二| 欧美精品色一区二区三区| 久久久久久一区| 午夜精品久久| 亚洲午夜一二三区视频| 这里只有精品视频在线| 亚洲欧洲日本mm| 麻豆精品精华液| 久久天堂成人| 久久久精品五月天| 久久国产精品一区二区三区| 久久精品国产一区二区三区免费看 | 亚洲电影有码| 久久久欧美一区二区| 欧美制服丝袜| 欧美伊人久久| 欧美一区二区私人影院日本| 午夜在线观看欧美| 99视频一区二区| 1769国内精品视频在线播放| 亚洲国产一区二区a毛片| 美女黄色成人网| 免费成人小视频| 亚洲人成在线观看| 亚洲国产你懂的| 亚洲第一精品影视| 亚洲激情影院| 亚洲黄色在线观看| 夜夜爽av福利精品导航| 中文无字幕一区二区三区| 在线亚洲高清视频| 亚洲一区观看| 久久国产精品电影| 老司机成人网| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美在线综合| 久久视频这里只有精品| 你懂的国产精品| 欧美丝袜一区二区三区| 国产精品入口尤物| 欧美片第1页综合| 国产亚洲一区在线| 亚洲第一中文字幕在线观看| 99re热这里只有精品视频| 亚洲午夜精品视频| 欧美在线综合| 欧美激情精品久久久久久变态| 最近中文字幕日韩精品| 亚洲欧美视频一区二区三区| 久久琪琪电影院| 欧美日韩综合网| 在线观看日韩av电影| 亚洲日本欧美日韩高观看| 欧美有码视频| 亚洲精品老司机|