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

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

3天内不再提示

Linux应用层操作寄存器

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

应用层操作寄存器

驱动中操作寄存器,需要先进行映射将物理地址转为虚拟地址。

但如果想在应用层中操作寄存器,也是可以实现的。

应用层中只需打开/dev/mem设备节点,然后用mmap映射寄存器地址就可以访问了。

例如,应用层读取物理地址为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;
}

注意,内核必须将CONFIG_STRICT_DEVMEM=y配置选项打开才有/dev/mem节点

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

    关注

    31

    文章

    5281

    浏览量

    119746
  • 内核
    +关注

    关注

    3

    文章

    1357

    浏览量

    40177
  • Linux
    +关注

    关注

    87

    文章

    11191

    浏览量

    208627
  • 应用层
    +关注

    关注

    0

    文章

    46

    浏览量

    11487
收藏 人收藏

    评论

    相关推荐

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

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

    嵌入式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

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定义  寄存器是中央处理内的组成部分。寄存器是有限存贮容量
    发表于 03-08 14:26 2.2w次阅读

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

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

    寄存器变量

    C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的值会被存放在CPU的寄存器中,每当需要使用它们时,CPU就可以直接使用,而无须再通过控制从内存中获取。由于
    发表于 06-03 10:13 2305次阅读

    嵌入式Linux驱动 GPIO操作 包括驱动和应用层程序对驱动进行测试

    ;amp;amp;amp;amp;gt;&amp;amp;amp;gt;&amp;amp;amp;gt;应用编写(闪烁灯)。目标板是iTOP4412。CPU为 Exynos4412。代码代码部分包括 驱动代码对GPIO寄存器的直接
    发表于 11-02 14:36 10次下载
    嵌入式<b class='flag-5'>Linux</b>驱动 GPIO<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>

    STM32的寄存器操作

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

    简述RAL寄存器模型基础

    RAL(Register Abstract Layer,寄存器抽象),通常也叫寄存器模型,顾名思义就是对寄存器这个部件的建模。本文要介绍的内容,包括对UVM
    的头像 发表于 02-14 16:55 2639次阅读
    简述RAL<b class='flag-5'>寄存器</b>模型基础

    RAL寄存器模型操作图鉴

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

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 07-12 09:37 997次阅读
    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 755次阅读

    如何在shell中操作寄存器

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

    Linux应用层操作寄存器

    --- > [*] /dev/mem virtual device support Linux应用层操作寄存器 除了直接使用devmem,我们也可以在
    的头像 发表于 10-08 15:16 1123次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>应用层</b><b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>