Linux应用层操作寄存器

描述

内核配置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,方便我们调试。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分