內核配置devmem
devmem命令依賴于/dev/mem設備節點,需要在Linux內核中打開/dev/mem的配置:
Device Drivers --- >
Character devices --- >
[*] /dev/mem virtual device support
Linux應用層操作寄存器
除了直接使用devmem,我們也可以在Linux應用層自己實現一個devmem。
devmem的實現原理,就是打開/dev/mem,然后通過mmap映射物理地址,從而實現讀寫寄存器。因此,我們只要實現這些操作,就可以自己實現類似devmem的功能。
例如,在Linux應用層讀取物理地址為0x40000000的值:
#include < stdio.h >
#include < stdlib.h >
#include < time.h >
#include < unistd.h >
#include < fcntl.h >
#include < unistd.h >
#include < sys/mman.h >
#define MAP_SIZE 0x80000
#define base 0x40000000
int main(int argc, char **argv)
{
int fd = open("/dev/mem",O_RDWR|O_NDELAY);
if (fd < 0)
{
printf("open /dev/mem error!n");
return -1;
}
void *map_base = mmap(NULL,MAP_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,base);
if (map_base == MAP_FAILED)
return -1;
printf("%x n",*(volatile unsigned int*)(map_base));
close(fd);
munmap(map_base,MAP_SIZE);
return 0;
}
總結
devmem是一個很常用的工具,主要給驅動開發人員在Linux應用層調試使用。devmem不僅僅是訪問寄存器,只要有權限訪問某個物理地址,就可以使用devmem,方便我們調試。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
寄存器
+關注
關注
31文章
5394瀏覽量
122429 -
內核
+關注
關注
3文章
1401瀏覽量
40843 -
Linux
+關注
關注
87文章
11399瀏覽量
212029 -
RISC
+關注
關注
6文章
476瀏覽量
84446 -
應用層
+關注
關注
0文章
46瀏覽量
11615
發布評論請先 登錄
相關推薦
嵌入式linux驅動對gpio的基本操作
;amp;amp;gt;&amp;gt;&amp;gt;應用編寫(閃爍燈)。目標板是iTOP4412。CPU為 Exynos4412。代碼代碼部分包括 驅動層代碼對GPIO寄存器的直接操作。然后是
發表于 11-05 07:59
寄存器變量
C語言中使用關鍵字register來聲明局部變量為寄存器變量。寄存器變量的值會被存放在CPU的寄存器中,每當需要使用它們時,CPU就可以直接使用,而無須再通過控制器從內存中獲取。由于
發表于 06-03 10:13
?2509次閱讀
嵌入式Linux驅動 GPIO操作 包括驅動和應用層程序對驅動進行測試
;amp;amp;amp;amp;gt;&amp;amp;gt;&amp;amp;gt;應用編寫(閃爍燈)。目標板是iTOP4412。CPU為 Exynos4412。代碼代碼部分包括 驅動層代碼對GPIO寄存器的直接
發表于 11-02 14:36
?10次下載

STM32的寄存器操作
STM32的寄存器操作在使用STM32單片機編程時一般都用ST給的庫函數編程,庫函數編程的底層就是對單片機寄存器的操作,庫函數就是一系列寄存器
發表于 01-13 15:43
?19次下載

Linux驅動操作寄存器
,第四個參數是映射的大小。 驅動中操作: #define?OFFSET??0x60?//某個寄存器的偏移地址 static?int?my_probe(struct?platform_device
如何在shell中操作寄存器
shell 中操作寄存器可以使用 devmem 命令. devmem 命令其實就是上述應用層操作寄存器生成的可執行文件,只不過busybox
評論