應用程式訪問實體地址之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...