應(yīng)用層操作寄存器
驅(qū)動中操作寄存器,需要先進(jìn)行映射將物理地址轉(zhuǎn)為虛擬地址。
但如果想在應(yīng)用層中操作寄存器,也是可以實現(xiàn)的。
應(yīng)用層中只需打開/dev/mem
設(shè)備節(jié)點,然后用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配置選項打開才有/dev/mem節(jié)點
-
寄存器
+關(guān)注
關(guān)注
31文章
5421瀏覽量
123323 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1410瀏覽量
41095 -
Linux
+關(guān)注
關(guān)注
87文章
11459瀏覽量
212789 -
應(yīng)用層
+關(guān)注
關(guān)注
0文章
46瀏覽量
11664
發(fā)布評論請先 登錄
寄存器是什么?怎么操作寄存器點亮LED燈?

嵌入式linux驅(qū)動對gpio的基本操作
如何在嵌入式linux中應(yīng)用層操作gpio口
寄存器操作方法_對寄存器操作的通用方法總結(jié)
寄存器變量
linux spi應(yīng)用層驅(qū)動以及回環(huán)測試代碼
嵌入式Linux驅(qū)動 GPIO操作 包括驅(qū)動和應(yīng)用層程序?qū)︱?qū)動進(jìn)行測試

STM32的寄存器操作

簡述RAL寄存器模型基礎(chǔ)

Linux驅(qū)動操作寄存器
如何在shell中操作寄存器
Linux應(yīng)用層操作寄存器

評論