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

    文章

    5342

    浏览量

    120301
  • 内核
    +关注

    关注

    3

    文章

    1372

    浏览量

    40288
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209430
  • 应用层
    +关注

    关注

    0

    文章

    46

    浏览量

    11501
收藏 人收藏

    评论

    相关推荐

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

    寄存器,是集成威廉希尔官方网站 中非常重要的一种存储单元,通常由触发组成。在集成威廉希尔官方网站 设计中,寄存器可分为威廉希尔官方网站 内部使用的寄存器和充当内外部接口的寄存器这两
    的头像 发表于 07-21 16:59 4031次阅读
    <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.3w次阅读

    寄存器变量

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

    嵌入式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 2716次阅读
    简述RAL<b class='flag-5'>寄存器</b>模型基础

    RAL寄存器模型操作图鉴

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

    RAL寄存器模型操作指南

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

    如何在shell中操作寄存器

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

    Linux应用层操作寄存器

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