應(yīng)用層操作寄存器
驅(qū)動(dòng)中操作寄存器,需要先進(jìn)行映射將物理地址轉(zhuǎn)為虛擬地址。
但如果想在應(yīng)用層中操作寄存器,也是可以實(shí)現(xiàn)的。
應(yīng)用層中只需打開/dev/mem設(shè)備節(jié)點(diǎn),然后用mmap映射寄存器地址就可以訪問了。
例如,應(yīng)用層讀取物理地址為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;
}
注意,內(nèi)核必須將CONFIG_STRICT_DEVMEM=y配置選項(xiàng)打開才有/dev/mem節(jié)點(diǎn)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129973 -
內(nèi)核
+關(guān)注
關(guān)注
4文章
1468瀏覽量
42874 -
Linux
+關(guān)注
關(guān)注
88文章
11760瀏覽量
219024 -
應(yīng)用層
+關(guān)注
關(guān)注
0文章
49瀏覽量
11810
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
寄存器是什么?怎么操作寄存器點(diǎn)亮LED燈?
寄存器,是集成電路中非常重要的一種存儲(chǔ)單元,通常由觸發(fā)器組成。在集成電路設(shè)計(jì)中,寄存器可分為電路內(nèi)部使用的寄存器和充當(dāng)內(nèi)外部接口的寄存器這兩
嵌入式linux驅(qū)動(dòng)對(duì)gpio的基本操作
;amp;amp;gt;&amp;gt;&amp;gt;應(yīng)用編寫(閃爍燈)。目標(biāo)板是iTOP4412。CPU為 Exynos4412。代碼代碼部分包括 驅(qū)動(dòng)層代碼對(duì)GPIO寄存器的直接操作。然后是
發(fā)表于 11-05 07:59
如何在嵌入式linux中應(yīng)用層操作gpio口
嵌入式linux文件io方式操作gpio口示例在嵌入式linux中應(yīng)用層操作gpio口,如果懶得寫驅(qū)動(dòng)或者懶得翻
發(fā)表于 12-16 06:19
寄存器操作方法_對(duì)寄存器操作的通用方法總結(jié)
本文主要詳解寄存器操作方法以及對(duì)寄存器操作的通用方法總結(jié),具體的跟隨小編來了解一下。
寄存器變量
C語言中使用關(guān)鍵字register來聲明局部變量為寄存器變量。寄存器變量的值會(huì)被存放在CPU的寄存器中,每當(dāng)需要使用它們時(shí),CPU就可以直接使用,而無須再通過控制器從內(nèi)存中獲取。由于
發(fā)表于 06-03 10:13
?2951次閱讀
linux spi應(yīng)用層驅(qū)動(dòng)以及回環(huán)測(cè)試代碼
linux spi應(yīng)用層驅(qū)動(dòng)以及回環(huán)測(cè)試代碼
發(fā)表于 10-22 15:47
?2次下載
嵌入式Linux驅(qū)動(dòng) GPIO操作 包括驅(qū)動(dòng)和應(yīng)用層程序?qū)︱?qū)動(dòng)進(jìn)行測(cè)試
;amp;amp;amp;amp;gt;&amp;amp;gt;&amp;amp;gt;應(yīng)用編寫(閃爍燈)。目標(biāo)板是iTOP4412。CPU為 Exynos4412。代碼代碼部分包括 驅(qū)動(dòng)層代碼對(duì)GPIO寄存器的直接
發(fā)表于 11-02 14:36
?10次下載
STM32的寄存器操作
STM32的寄存器操作在使用STM32單片機(jī)編程時(shí)一般都用ST給的庫函數(shù)編程,庫函數(shù)編程的底層就是對(duì)單片機(jī)寄存器的操作,庫函數(shù)就是一系列寄存器
發(fā)表于 01-13 15:43
?19次下載
簡(jiǎn)述RAL寄存器模型基礎(chǔ)
RAL(Register Abstract Layer,寄存器抽象層),通常也叫寄存器模型,顧名思義就是對(duì)寄存器這個(gè)部件的建模。本文要介紹的內(nèi)容,包括對(duì)UVM
Linux驅(qū)動(dòng)操作寄存器
,第四個(gè)參數(shù)是映射的大小。 驅(qū)動(dòng)中操作: #define?OFFSET??0x60?//某個(gè)寄存器的偏移地址 static?int?my_probe(struct?platform_device
如何在shell中操作寄存器
shell 中操作寄存器可以使用 devmem 命令. devmem 命令其實(shí)就是上述應(yīng)用層操作寄存器生成的可執(zhí)行文件,只不過busybox
Linux應(yīng)用層操作寄存器
--- > [*] /dev/mem virtual device support Linux應(yīng)用層操作寄存器 除了直接使用devmem,我們也可以在
Linux應(yīng)用層操作寄存器
評(píng)論