内核中操作寄存器的方法

本文详细介绍了Linux内核中操作寄存器的三种方法:1) 利用内核提供的读写接口,确保读写顺序;2) 动态映射操作寄存器,通过request_mem_region和ioremap进行地址映射;3) 结构体动态映射,将寄存器封装在结构体中,简化操作。每种方法都有其适用场景和优势。
摘要由CSDN通过智能技术生成

内核中操作寄存器的方法

由于Linux开启了MMU,所以我们在访问寄存器时,必须要使用寄存器物理地址对应的虚拟地址来访问。

1.内核提供的读写接口

利用内核提供的寄存器读写接口会有较好的可移植性,最重要的是拥有“读写屏障”

  • 何谓“读写屏障”?其有何意义?试看以下代码
#define XXX_SET   0xe0200240
#define XXX_EN    0xe0200244

*((volatile unsigned int *)XXX_SET) = 0xffffffff;
*((volatile unsigned int *)XXX_EN) = 0xffffffff;
  • 现代编译器为了提高效率,采用的乱序编译,同样,现代soc采用的是乱序执行。对于soc和编译器来说,它们判断这两个寄存器设置的先后顺序没有逻辑关系,所以上述两个寄存器的设置顺序是不定的。但是某些外设硬件来说,需要先配置再使能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值