wince儲存與位址對映技術

2021-05-07 18:06:48 字數 1211 閱讀 1713

1.如果是在bootloader中訪問裝置暫存器,可以直接操作實體地址。

2.wince

啟動後,硬體上arm和x86體系的處理器啟動了mmu,作業系統只能訪問到虛擬位址,不能直接操作物理記憶體了。但是如果是x86的cpu,由於它的外設i/o埠和儲存器空間分開編址,可以直接嵌入彙編或者使用巨集read_port_***,write_port_***來讀寫裝置暫存器的實體地址。

3.wince

軟體結構裡對應mmu的是乙個名為oemaddresstable的資料結構(原始檔oeminit.asm中),其中建立了實體地址和虛擬位址的靜態對映關係,也可以在其中改動系統所能識別物理記憶體的大小,以支援大記憶體。

4.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函式作虛實位址的轉換。

也可以使用transbusaddrtovirtual ()直接把匯流排上的位址轉化成系統的虛擬位址。在一般的應用程式中訪問i/o 是訪問它的快取段虛擬位址,而驅動中必須訪問無快取段虛擬位址。簡單來說無快取段虛擬位址= 快取段虛擬位址+0x20000000 。

總結起來,如果是wince 核心(如hal)訪問外部i/o ,只需要在oemaddresstable 中定義實體地址到虛擬位址間的對映關係就可以了;如果是應用程式或者驅動要訪問i/o ,要做的工作包括:1 。在cpu 實體地址和虛擬位址間做乙個動態對映,2 。對虛擬位址進行操作。

wince5.0下可以使用createbusaccesshandle(匯流排登錄檔路徑)+bustransbusaddrtovirtual來實現匯流排實體地址到系統虛擬位址的直接變換。

位址對映,儲存器對映

學習乙個事項的時候,注意三點 是什麼,有什麼用 功能 如何配置 實現 操作 1,為了保證 cpu執行指令時可正確訪問 儲存單元 需將使用者程式 中的邏輯 位址轉換 為執行時由機器 直接定址 的實體地址,這一過程稱為位址對映。2,位址對映結構 在tornado target h vmlib.h檔案中 ...

wince下的位址對映知識點滴

引自 http blog.csdn.net gooogleman archive 2008 07 29 2731747.aspx 1.如果是在bootloader中訪問裝置暫存器,可以直接操作實體地址。2.wince啟動後,硬體上arm和x86體系的處理器啟動了mmu,作業系統只能訪問到虛擬位址,不...

專題 主儲存器與Cache的位址對映方式

我們在題中或者遇到問題是 首先看cpu的位址匯流排有多少位,然後字長 1個位元組是8位,字長看所給要求有多少個位元組,一般是16位,也就是兩個位元組 有多少。然後我們看cache,一般給出2k 16位的cache,16就是字長,然後關注塊 這裡關係到塊內位址的位數如果是8b,可以化成4 16bit,...