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

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>
            日韩一区二区久久| 日韩小视频在线观看| 欧美一区二区私人影院日本| 国产精品久久久久免费a∨| 在线亚洲精品| 亚洲一区免费看| 国产日韩精品入口| 久久亚洲风情| 欧美91视频| 亚洲一区二区视频| 亚洲欧美欧美一区二区三区| 国产在线乱码一区二区三区| 欧美成人中文字幕| 国产精品sss| 久久午夜电影网| 欧美精品一区二区三区一线天视频 | 欧美日韩成人在线视频| 中日韩美女免费视频网址在线观看| 一区二区国产日产| 国产欧美一区二区三区国产幕精品| 久久天天躁狠狠躁夜夜av| 久久一二三国产| 在线亚洲国产精品网站| 亚洲欧美中文另类| 亚洲人成在线播放| 亚洲欧美精品在线观看| 亚洲精品久久久久久下一站| 亚洲综合大片69999| 亚洲国产色一区| 亚洲欧美色一区| 夜夜嗨av一区二区三区| 欧美一区二区| 中国成人在线视频| 久久久久久久久久久成人| 亚洲视频国产视频| 免费国产自线拍一欧美视频| 性8sex亚洲区入口| 欧美日韩播放| 女同一区二区| 国产视频亚洲精品| av成人黄色| 亚洲精品乱码久久久久久| 欧美亚洲视频在线看网址| 一区二区三区产品免费精品久久75 | 亚洲综合99| 欧美精品一区二区三区在线看午夜| 欧美一级淫片播放口| 欧美日韩激情小视频| 免费国产自线拍一欧美视频| 国产精品无码永久免费888| 亚洲日韩成人| 国产专区欧美精品| 亚洲欧美日韩综合国产aⅴ| 亚洲一区二区精品| 欧美日韩www| 亚洲清纯自拍| 日韩亚洲在线| 欧美成人一区二区在线| 欧美v亚洲v综合ⅴ国产v| 国内精品视频久久| 亚欧成人在线| 久久久之久亚州精品露出| 国产日韩精品久久| 午夜久久一区| 久久精品国产亚洲高清剧情介绍| 国产精品久久久久久久久久尿 | 欧美一区二区三区免费看| 亚洲淫性视频| 国产精品久久久久久久浪潮网站| 亚洲另类春色国产| 一区二区三区鲁丝不卡| 欧美午夜一区| 亚洲综合成人在线| 久久久久久久久久久久久女国产乱 | 新狼窝色av性久久久久久| 欧美一区二区三区视频免费播放| 国产精品亚洲精品| 亚洲在线视频观看| 久久精品中文字幕一区二区三区| 国产亚洲欧美一区在线观看 | 亚洲激情另类| 在线一区视频| 国产精品一区=区| 久久精品在线播放| 亚洲电影激情视频网站| 一区二区高清| 国产精品香蕉在线观看| 先锋亚洲精品| 亚洲国产高清aⅴ视频| 亚洲一本视频| 国产亚洲欧美日韩精品| 麻豆91精品| 亚洲视频一区| 老色鬼久久亚洲一区二区| 亚洲美女精品久久| 国产欧美日韩一区二区三区在线| 欧美一区二区三区婷婷月色 | 正在播放欧美一区| 久久久久免费| 亚洲深夜影院| 韩曰欧美视频免费观看| 欧美日本久久| 欧美专区第一页| 日韩西西人体444www| 久久久久一区二区三区四区| 亚洲精选一区二区| 国产亚洲精品v| 欧美日韩国产综合视频在线观看 | 亚洲欧洲日产国产网站| 亚洲欧美日韩中文视频| 曰韩精品一区二区| 国产精品日产欧美久久久久| 老牛国产精品一区的观看方式| 亚洲特级毛片| 最新国产成人av网站网址麻豆| 欧美中文字幕在线观看| 99国产精品一区| 亚洲电影专区| 国产日韩久久| 国产精品色在线| 欧美日韩黄色大片| 欧美福利在线| 免播放器亚洲| 久久精品视频免费| 午夜精品久久久久久久久久久 | 久久综合一区| 性久久久久久久久久久久| 一区二区三区成人| 91久久综合| 亚洲福利视频网| 国产专区一区| 国内精品久久久久久| 国产精品日日做人人爱| 欧美日韩国产美女| 欧美日韩国产影院| 欧美精品亚洲| 欧美日韩高清在线一区| 欧美日本一道本| 欧美精品一区二区精品网| 男同欧美伦乱| 美女视频一区免费观看| 狼人社综合社区| 免费亚洲电影在线观看| 欧美高清视频一二三区| 免费成人毛片| 欧美大片免费看| 欧美福利视频在线| 欧美电影免费观看| 欧美精品免费观看二区| 欧美日韩亚洲激情| 欧美三日本三级少妇三2023| 欧美日韩在线高清| 国产精品香蕉在线观看| 国产一区二区三区高清在线观看 | 欧美韩日一区二区三区| 欧美伦理一区二区| 欧美视频一区二区三区| 国产精品久久久亚洲一区| 国产精品欧美在线| 国产综合在线视频| 亚洲高清在线观看一区| 亚洲美女尤物影院| 亚洲欧美日韩国产成人精品影院| 欧美一区三区二区在线观看| 久久亚洲综合网| 亚洲国产精品一区二区第一页| 亚洲啪啪91| 亚洲欧美在线另类| 久久这里有精品15一区二区三区| 欧美激情第三页| 国产精品毛片a∨一区二区三区|国| 国产精品高潮粉嫩av| 国内精品美女在线观看| 亚洲日本在线观看| 午夜精品久久久久久久白皮肤| 久久午夜视频| 日韩亚洲欧美中文三级| 午夜精品视频在线观看| 久久尤物视频| 国产精品久久久亚洲一区 | 欧美日韩一区二区在线播放| 国产精品推荐精品| 91久久久久久久久| 午夜精品久久| 欧美成人在线免费视频| 亚洲一区成人| 老司机成人网| 国产精品美女一区二区| 亚洲黄一区二区三区| 午夜久久久久久| 亚洲国产精品一区二区第四页av| 亚洲免费在线视频| 欧美二区在线观看| 在线不卡中文字幕| 久久av在线看| 99re热精品| 免费成人在线视频网站| 国产视频久久| 亚洲欧美在线一区| 亚洲免费不卡|