0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux应用层操作寄存器

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-08 15:16 次阅读

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

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

    关注

    30

    文章

    5041

    浏览量

    117765
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39862
  • Linux
    +关注

    关注

    87

    文章

    10993

    浏览量

    206748
  • RISC
    +关注

    关注

    6

    文章

    431

    浏览量

    83252
  • 应用层
    +关注

    关注

    0

    文章

    43

    浏览量

    11441
收藏 人收藏

    评论

    相关推荐

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。
    的头像 发表于 07-21 16:59 2983次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>点亮LED灯?

    寄存器操作

    [table=98%][tr][td]寄存器操作 一, 寄存器的设置和操作特性1,一个寄存器的每个位有其不同的意义,进行不同的设置会使硬件产
    发表于 10-23 18:23

    嵌入式linux驱动对gpio的基本操作

    ;amp;amp;gt;&amp;amp;gt;&amp;amp;gt;应用编写(闪烁灯)。目标板是iTOP4412。CPU为 Exynos4412。代码代码部分包括 驱动代码对GPIO寄存器的直接操作。然后是
    发表于 11-05 07:59

    如何在嵌入式linux应用层操作gpio口

    嵌入式linux文件io方式操作gpio口示例在嵌入式linux应用层操作gpio口,如果懒得写驱动或者懒得翻
    发表于 12-16 06:19

    寄存器操作方法_对寄存器操作的通用方法总结

    本文主要详解寄存器操作方法以及对寄存器操作的通用方法总结,具体的跟随小编来了解一下。
    的头像 发表于 05-22 15:53 2.1w次阅读

    使用寄存器的逻辑操作指令是什么?

    操作系统中硬件相关的部分集中体现在汇编指令和对寄存器操作中,因此我们对ARM体系结构的介绍也围绕ARMv8-A的汇编指令和寄存器来展开。
    的头像 发表于 06-18 15:49 3449次阅读

    C语言位操作在(单片机)寄存器中的应用

    C语言位操作寄存器中的应用本文参考另一篇博客写成附链接,个人感觉内容过多不便于吸收,就写了这篇博客。整体思想:设置一个位就是设置该位为1,清除就是设置该位为0寄存器操作的要求:特定位
    发表于 11-29 10:06 8次下载
    C语言位<b class='flag-5'>操作</b>在(单片机)<b class='flag-5'>寄存器</b>中的应用

    C语言:寄存器操作

    C语言:寄存器操作
    发表于 01-13 12:56 6次下载
    C语言:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    寄存器reg &= ~1 位与操作的问题

    在网上偶尔看到一个关于寄存器某位清零的操作,有人指出如题写法并不健壮,此博客记录。问题的关键在于 ~1 的值,假设 1 占8位(由编译器决定),二进制表示为 0000 0001那么
    发表于 01-13 14:06 0次下载
    <b class='flag-5'>寄存器</b>reg &= ~1 位与<b class='flag-5'>操作</b>的问题

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器操作,库函数就是一系列寄存器
    发表于 01-13 15:43 18次下载
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    RAL寄存器模型操作图鉴

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 05-17 09:01 563次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>图鉴

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 07-12 09:37 709次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南

    Linux驱动操作寄存器

    ,第四个参数是映射的大小。 驱动中操作: #define OFFSET  0x60 //某个寄存器的偏移地址 static int my_probe(struct platform_device
    的头像 发表于 09-26 16:34 426次阅读

    Linux应用层操作寄存器

    应用层操作寄存器 驱动中操作寄存器,需要先进行映射将物理地址转为虚拟地址。 但如果想在应用层
    的头像 发表于 09-26 16:37 450次阅读

    如何在shell中操作寄存器

    shell 中操作寄存器可以使用 devmem 命令. devmem 命令其实就是上述应用层操作寄存器生成的可执行文件,只不过busybox
    的头像 发表于 09-26 16:39 510次阅读