Linux在應用層讀寫暫存器

2021-10-09 18:07:53 字數 903 閱讀 9536

先說結論:在應用層可以通過操作/dev/mem裝置檔案,以及mmap函式,將暫存器的位址對映到使用者空間,然後直接在應用層對暫存器進行操作。

該裝置檔案是物理記憶體的全映像,通過分析dev/mem裝置驅動可以知道,通過這個裝置檔案可以對映整個處理器的位址空間,而不單單是記憶體。這裡的位址空間指的是處理器匯流排上的全部可定址空間。除了記憶體,還有外設io空間。也就是說通過/dev/mem可以對映0-0xffffffff的全部實體地址(這個實體地址是真是有效的,處理器訪問這個實體地址能夠獲取有效資料)。

/*

* addr:指定要對映到的虛擬位址,如果寫null則表示由sys_mmap來分配該虛擬位址

* length:需要對映的長度

* port:對映頁的許可權

* flags: 標記位

* fd: 控制代碼,通常為open("/dev/mem/" ,o_rdwr | o_ndelay);的返回值

*/void *mmap(void *addr,size_t length,int prot,int flags,int fd,off_t offset);

1:對映範圍不能超過4g

#include #include #include #include #include #include #define map_size 0x200

#define phy_reg_base 0xffb00000

static int fd;

int main (int argc,char *ar**)

unsigned char *var_reg_base = (unsigned char *)mmap(null,map_zize,prot_sread|prot_write,map_shared,fd,phy_reg_base);

for(int i = 0;i

Linux在應用層讀寫暫存器的方法

dev mem 物理記憶體的全映象。可以用來訪問物理記憶體。由於應用執行都在使用者空間,使用的是虛擬記憶體,不能直接訪問實體地址空間,通過 dev mem檔案可以用來訪問系統的全部定址空間。dev kmem kernel看到的虛擬記憶體的全映象。可以用來訪問kernel的內容。在開啟mmu之前,你可...

Linux在應用層讀寫暫存器的方法

在某些情況下,需要移植的 是直接訪問暫存器的,當移植到linux時,可利用mmap建立乙個適配層,減少開發工作量。通過操作 dev mem裝置檔案,以及mmap函式,將暫存器的位址對映到使用者空間,直接在應用層對暫存器進行操作。mmap的使用示例 define reg area len 1024 s...

Linux下讀寫暫存器

arm裸機下讀寫暫存器很容易,各個暫存器和記憶體的位址是單一位址空間,他們是用相同的指令進行讀寫操作的.而在linux下就要複雜很多,因為linux支援多個體系架構的cpu。比如arm和x86就不一樣,具體的差別我暫時也說不上來,這個涉及到cpu體系的設計。目前我只關心 linux為了支援多個硬體體...