搜尋此網誌

2013年11月21日 星期四

在Linux中,如何使用程式直接讀取記憶體中的資料。

這兩個鏈結中,提供Sample Code,關於如何存取記憶體,在Linux中。


將Physical Address轉成Virtual Address。
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
歸還Virtual Address。
int munmap(void *addr, size_t length);

devmem.c [Link1]

devmem2 [Link2]


[“Bus error” system error] 匯流排錯誤--系統錯誤

Bus Error通常是由應用程式試圖去存取記憶體空間,硬體不能實際定址。這原因可能是一個沒有對齊的存取,像是存取不存在的地址,或者是沒有足夠的權限來存取或更改記憶體。這很難說這到底是什麼問題你所遇到,不知道你改了什麼程式碼;甚至超過 - 使用不同的編譯器或編譯器的設置也可能會導致此行為。
from: http://stackoverflow.com/questions/5870353/bus-error-system-error

Unhandled fault: External abort on non-linefetch (0x18) at 0xb6f4d000
Bus error

可能的錯誤原因:

此錯誤的產生,當程式試圖去讀取RX FIFO Port時,但它的FIFO沒有任何資料。當/dev/mem讀取有正確回應時,表示那邊有東西被讀取到。
http://forums.xilinx.com/t5/Embedded-Linux/ZC702-Devmem-failure-accessing-AXI-port/td-p/284746

沒有留言:

張貼留言