請問要如何去測試有MMU的記憶體

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

請問要如何去測試有MMU的記憶體

文章Hfoxconn » 週四 9月 20, 2007 6:30 pm

請問各位前輩:

公司要在Linux下測試含MMU的MIPS主版,
請問一下要如何去測試主版上和周邊memory呢?

手上是可以拿到硬體給的memory mapping表,
之前的測試環境是在OS運作前做測試,所以可以直接參照硬體的memory mapping表任意用指標去讀寫想要測試的主版或周邊裝置的記憶體。

但現在因為有MMU的關係,沒辦法參照memory mapping表直接指,請問是不是要用mmap去做呢?還是要用ioremap會好一點?

如果是要用mmap,mmap不是一個driver的系統呼叫嗎?如果周邊的裝置沒有實現這個driver呼叫的話,是不是要自己一個一個裝置的全幫他補上才可以完成對個別裝置映攝,然後再去控制個別裝置。

如果是要用ioremap,書上說ioremap 可以將裝置的實體位址 mapping 到 user指定的虛擬空間,所以我只要參照版子的memory mapping表上的周邊實體位址,再配合一個 User space 的虛擬位址,去餵給 ioremap 即可對我指定周邊去做控制是嗎??

請問各位先進會建議使用哪一種方法,還是有別的更好的方法可以做到?何處能夠找到simaple code參考呢?感謝~ <(_ _)>
Hfoxconn
可愛的小學生
可愛的小學生
 
文章: 1
註冊時間: 週四 9月 20, 2007 4:39 pm

文章rz600000 » 週五 9月 21, 2007 12:17 am

我也很想知道這個問題 有人可以回答嗎 ....

拜託各位了....我目前 也遇到此問題
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm

文章giantbicycle » 週一 10月 15, 2007 5:27 pm

一般透過 user space mmap的方式,會從 00001000 ~ TASK_SIZE-1 的範圍內配置(實際範圍要看情況而改),
如果是透過 kernel space ioremap的方式,會從VMALLOC_START ~ VMALLOC_END這個範圍配置記憶體

以Kernel 的角度來看:

有的平台會透過定義出自己的 Virtual Address和 Physical Address的轉換函數
(大部分是配合IO Peripheral Base Address,PHYS_OFFSET,PAGE_OFFSET等Symbol或是 __va( ) 等 函數轉換)
這種方法需同時配合系統初使化時,透過註冊 platform 將這個應對關係告知kernel

以 driver 的角度來看:

在MMU有啟動的kernel運行下,
(1) 如果有使用上述註冊 platform的 IO Address應對關係,可透過直接存取Virtual Address達到控制IO Device 的功效,
這個方法的好處是可以明確知道 IO Virtual Address和 IO Physical Address的對應關係。

(2) 如果沒有使用上述註冊方式,可能就要研究ioremap的方式,但這邊似乎就是動態決定IO Address Mapping到的位置,
不過還是有一個range (VMALLOC_START ~ VMALLOC_END)


詳細用到的kernel資料結構或是函數可以參考source code
上述如果有誤的地方請告知更正,謝謝
giantbicycle
可愛的小學生
可愛的小學生
 
文章: 23
註冊時間: 週六 7月 07, 2007 4:16 pm


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客