應用程式訪問實體地址之MmMapIoSpace

2021-09-17 06:56:22 字數 3293 閱讀 6109

應用程式訪問實體地址之mmmapiospace 來自

2009-04-10 15:05

應用程式訪問實體地址之mmmapiospace

應用環境:wince500

在應用程式中使用的都是虛擬位址,如果要對實體地址進行操作

如:pbaseaddress = (puchar)mmmapiospace(iophysicalbase, size, false);

同上,訪問pbaseaddress的指向位址,就為訪問被對映後iophysicalbase定義的實體地址。

pvoid mmmapiospace(

boolean cacheenable                    引數3:是否使用cache(驅動中要使用uncached)

);

與oalpatova不同,在使用mmmapiospace後,必須使用mmunmapiospace。

void mmunmapiospace(

);

在一般的nk驅動編寫中,為了規範程式設計風格,請勿直接使用g_oaladdresstable中的虛擬位址。統一使用mmmapiospace、mmunmapiospace函式。

如:pbaseaddress = (puchar)mmmapiospace(iophysicalbase, size, false);

同上,訪問pbaseaddress的指向位址,就為訪問被對映後iophysicalbase定義的實體地址。

pvoid mmmapiospace(

boolean cacheenable                    引數3:是否使用cache(驅動中要使用uncached)

);

與oalpatova不同,在使用mmmapiospace後,必須使用mmunmapiospace。

void mmunmapiospace(

);

在一般的nk驅動編寫中,為了規範程式設計風格,請勿直接使用g_oaladdresstable中的虛擬位址。統一使用mmmapiospace、mmunmapiospace函式。

mmmapiospace這個函式是在ceddk裡面實現的,所以只要link了ceddk.lib就可以使用了。它的原始碼實現在:

x:/wince500/public/common/oak/drivers/ceddk/ddk_map

原始碼中是呼叫了virtualalloc來預留虛擬記憶體,然後virtualcopy來做對映的。

這兩個函式都不需要kernel許可權,所以沒有full kernel也可以用。

ps:在非full kern模式下,對映物理記憶體可能會失敗,但是可以呼叫。

可以用setkmode去讓ap臨時進入kernel模式,然後在對記憶體進行操作。——哦,那wince6.0 也可以這樣哦

在ce5下,ap可以做任何驅動可以做的事情,你可以寫個程式訪問kernel的空間,破解系統,也可以dump或修改flash上面的raw data。但是從ce6開始,這一切都沒那麼自由了。

我在這裡補充一下,

由於link了ceddk.lib的問題,很多人都會遇到不少的問題。這裡有解決的辦法。

sunrain_hjb牛人寫的暫存器讀寫軟體裡面包括了ceddk.dll這個東西,就不用什麼鏈結了,直接載入了這個dll,有異曲同工之妙。

應用程式訪問實體地址之mmmapiospace 來自

2009-04-10 15:05

應用程式訪問實體地址之mmmapiospace

應用環境:wince500

在應用程式中使用的都是虛擬位址,如果要對實體地址進行操作

如:pbaseaddress = (puchar)mmmapiospace(iophysicalbase, size, false);

同上,訪問pbaseaddress的指向位址,就為訪問被對映後iophysicalbase定義的實體地址。

pvoid mmmapiospace(

boolean cacheenable                    引數3:是否使用cache(驅動中要使用uncached)

);

與oalpatova不同,在使用mmmapiospace後,必須使用mmunmapiospace。

void mmunmapiospace(

);

在一般的nk驅動編寫中,為了規範程式設計風格,請勿直接使用g_oaladdresstable中的虛擬位址。統一使用mmmapiospace、mmunmapiospace函式。

如:pbaseaddress = (puchar)mmmapiospace(iophysicalbase, size, false);

同上,訪問pbaseaddress的指向位址,就為訪問被對映後iophysicalbase定義的實體地址。

pvoid mmmapiospace(

boolean cacheenable                    引數3:是否使用cache(驅動中要使用uncached)

);

與oalpatova不同,在使用mmmapiospace後,必須使用mmunmapiospace。

void mmunmapiospace(

);

在一般的nk驅動編寫中,為了規範程式設計風格,請勿直接使用g_oaladdresstable中的虛擬位址。統一使用mmmapiospace、mmunmapiospace函式。

mmmapiospace這個函式是在ceddk裡面實現的,所以只要link了ceddk.lib就可以使用了。它的原始碼實現在:

x:/wince500/public/common/oak/drivers/ceddk/ddk_map

原始碼中是呼叫了virtualalloc來預留虛擬記憶體,然後virtualcopy來做對映的。

這兩個函式都不需要kernel許可權,所以沒有full kernel也可以用。

ps:在非full kern模式下,對映物理記憶體可能會失敗,但是可以呼叫。

可以用setkmode去讓ap臨時進入kernel模式,然後在對記憶體進行操作。——哦,那wince6.0 也可以這樣哦

在ce5下,ap可以做任何驅動可以做的事情,你可以寫個程式訪問kernel的空間,破解系統,也可以dump或修改flash上面的raw data。但是從ce6開始,這一切都沒那麼自由了。

我在這裡補充一下,

由於link了ceddk.lib的問題,很多人都會遇到不少的問題。這裡有解決的辦法。

sunrain_hjb牛人寫的暫存器讀寫軟體裡面包括了ceddk.dll這個東西,就不用什麼鏈結了,直接載入了這個dll,有異曲同工之妙。

Linux下訪問記憶體實體地址

linux核心裡提供的 dev mem驅動,為我們讀寫記憶體實體地址,提供了乙個渠道。下面講述2種利用mem裝置檔案進行實體地址讀寫的方法,一種是裝置驅動的方法,另一種是系統呼叫的方法。首先我們看下mem這個裝置檔案,dev mem是linux下的乙個字元裝置,原始檔是 drivers char m...

Linux下訪問記憶體實體地址

原文 linux核心裡提供的 dev mem驅動,為我們讀寫記憶體實體地址,提供了乙個渠道。下面講述2種利用mem裝置檔案進行實體地址讀寫的方法,一種是裝置驅動的方法,另一種是系統呼叫的方法。首先我們看下mem這個裝置檔案,dev mem是linux下的乙個字元裝置,原始檔是 drivers cha...

WINCE 對實體地址的訪問

wince程式設計 對實體地址的訪問 1 io介面是xscale處理器的外部裝置,對於一般的微控制器,可以直接操作硬體,即通過直接讀寫io埠來訪問硬體.而對於wicne作業系統,它遮蔽了使用者應用程式對硬體訪問的許可權,只有核心應用程式才可以訪問硬體資源.如果要直接訪問某一址的物理記憶體 對於arm...