Linux, 工作, 生活, 家人

Embedded, Linux

mmap Sample Code

在 Embedded System 的世界內, 常常要讀寫 Memory 做一些測試, 這時侯 mmap 就很好用了
mmap 可以讓 user space access physical memory.
雖然是很簡單的小動作, 但是對 debug 和驗證 hardware 非常的好用.

網路上應該有不少 mmap sample code, 應該寫得更好.
我只是拿來驗證一下我們的 Platform 有沒有問題.

我這一段是設定 Static Memory 以後, 再直接設定 Philip SC16C2552 到 Baud rate 38400
再印出 “This is test string” 這個字串.
當然中間有個 Bug, 不過我懶得修 XD

這時請記得, 這時候 UART 還沒有啟動 FIFO , 所以只能送出一個字, 加個 delay 再送出第二個字
要不然會看不到

不過 mmap 並不適合需要高速或是反應快的 Device
比較適合 Initial hardware 或是查詢 memory 內的值.
主要還是 mmap 是 User space , Data 要送到 kernel mode. 這一段要花一段時間, 而且 memcopy 非常耗時.

ref.
mmap Sample Code

2 留言

  1. 路人甲

    參考了大大link裡的sample code,不過文章最後的結論好像怪怪的。

    mmap()會在當前的user process page table做出一個的 entry 去對應 virtual address to physical address,return回來的雖然是virtual address,但是存取的時候,會真的寫到對應physical address,並不需要多出memcpy的動作,其實是比用ioctl來傳遞資料還快速,ioctl就會需要copy from user or copy to user 的動作。這也是為什麼越來越多 video & graphic card會轉向提供user mode driver,因為直接用mmap() 操作會加快速度,使用ioctl反而會產生context switch 和system call的overhead。

  2. Marv

    還是寫AP好啊~ 不知道底層還是可以寫得很高興~ 東西出來就好~~ 我是不是走錯路啦~~

發佈留言