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


/dev/mem:物理內存的全鏡像。可以用來訪問物理內存。由於應用運行都在用戶空間,使用的是虛擬內存,不能直接訪問物理地址空間,通過/dev/mem文件可以用來訪問系統的全部尋址空間。
/dev/kmem:kernel看到的虛擬內存的全鏡像。可以用來訪問kernel的內容。
在開啟MMU之前,你可以直接用物理地址訪問。在開啟MMU之后,你需要先將物理地址映射為虛擬地址,然后用虛擬地址訪問。還是絕個簡單的例子,比如某一個外設的寄存器物理地址為:
regaddr = 0x0200000,要讀出/寫入的值為value(unsigned int類型);那么: 
  ①、在開啟MMU之前: 
  讀: 
  value = *(volatile unsigned int*)regaddr; 
  寫: 
  *(volatile unsigned int*)regaddr = value; 
  ②、在開啟MMU之后: 
  需要先用ioremap來做映射,如下 
  unsigned int virt_regaddr = 0; 
  virt_regaddr = ioremap (regaddr, sizeof (unsigned int)); 
  讀: 
  value = *(volatile unsigned int *)virt_regaddr; 
  寫: 
  *(volatile unsigned int*)virt_regaddr = value;  
  當然,如果不使用了,記得用iounmap()來回收資源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM