1.如果是在bootloader中訪問設備寄存器,可以直接操作物理地址。
2.wince啓動後,硬件上ARM和X86體系的處理器啓動了MMU,操作系統只能訪問到虛擬地址,不能直接操作物理內存了。但是如果是X86的CPU,由於它的外設I/O端口和存儲器空間分開編址,可以直接嵌入彙編或者使用read_port_xxx,write_port_xxx來讀寫設備寄存器的物理地址。
3.wince軟件結構裏對應MMU的是一個名爲OEMAddressTable的數據結構(源文件oeminit.asm中),其中建立了物理地址和虛擬地址的靜態映射關係,也可以在其中改動系統所能識別物理內存的大小,以支持大內存。
4.我們也可以在wince啓動後調用CreateStaticMapping和NKCreateStaticMapping來實現OEMAddressTable中的這種物理地址和虛擬地址的靜態映射關係。
5.建立了靜態映射關係的虛擬地址只能由內核模式下的程序來操作,例如 ISR。除非你在定製系統時,選擇了full kernal mode,使所有程序都運行在完全內核模式下,這將導致系統不穩定。
6.如果要在驅動程序中訪問設備寄存器,必須建立動態虛擬地址映射,可以調用MmmapIoSpace函數來實現,或者通過VirtualAlloc和VirtualCopy函數來實現。其實MmmapIoSpace內部就調用了後者。
7.在驅動中訪問虛擬地址時,必須是非緩存段(位於0xA0000000 到 0xBFFFFFFF )。
8.使用VirtualCopy函數映射物理內存時,其lpvSrc參數必須右移8位,且相應的fdwProtect參數必須帶page_physical。
9.如果是ARM體系的處理器,訪問掛在系統總線上的設備寄存器前,必須先把總線地址轉化成CPU的地址,通過HalTranslateBusAddress實現兩種物理地址的變換,然後再調用MmmapIoSpace函數作虛實地址的轉換。
wince5.0下可以使用CreateBusAccessHandle(總線註冊表路徑)+BusTransBusAddrToVirtual來實現總線物理地址到系統虛擬地址的直接變換。
wince下的地址映射知識點滴
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
俄文windows-1251編碼及其對應的碼錶
Yao_GUET
2020-06-27 13:34:32
WinCE BSP工程文件分析
czg1984
2020-06-03 12:59:53
從SD卡啓動wince(來自阿莫ARM論壇)
俺总在笑
2020-02-21 10:25:35
WINCE嵌入式系統學習規劃(借鑑)
xiaoxueer20
2018-09-01 04:54:57
ActiveSync如何連接模擬器
xiaoxueer20
2018-09-01 04:54:57
ActiveSync安裝應用簡介
xiaoxueer20
2018-09-01 04:54:57
初學WinCE——安裝PB5.0中遇到的問題
xiaoxueer20
2018-09-01 04:54:57
什麼是eboot,nboot,uboot
xiaoxueer20
2018-09-01 04:54:57
WinCE驅動開發問題精華集錦
xiaoxueer20
2018-09-01 04:54:56
PB 5.0 Build OS菜單詳解
xiaoxueer20
2018-09-01 04:54:56
兩臺WINCE的網絡通信
xiaoxueer20
2018-09-01 04:54:51
讀書筆記----深入理解WinCE
俺总在笑
2018-08-28 13:46:14
windows環境中驅動的開發簡例
gaosentao
2018-08-27 21:39:43
wince徹底隱藏任務欄
lin179590026fly
2018-08-26 02:26:11
WinCE USB驅動開發 錯走冤枉路
lin179590026fly
2018-08-26 02:26:11