Kernel Regmap
Regmap是什么东西?
Regmap就是对i2c/spi/spmi等总线的一层封装,同时利用了缓存及压缩技术,
以期达到操作总线更简单、操作效率更高的目标。(个人认为对IO性能优化有限)
一、关于优化IO性能
Regmap读操,如果懂合理利用cache功能,是可能能提升IO性能,因为读的只是cache内容,未真正操作外设的寄存器。
文章图片
Regmap写操作,必须去操作外设寄存器,否则操作就达不到预期效果啦。根本没有提升IO性能。
文章图片
基于Regmap读、写操作的实现方法,总结:
对于读非主动变化寄存器(即,此类寄存器读出来的值,就上次写进去的值。)才有优化作用。
==============》这种场景情况很少吧。
对于读主动变化寄存器(比如,状态寄存器,Sensor/TP/TPS等数据寄存器),根本不能使用缓存值,无优化作用。
=============》这才是频繁的现实需求啊。
对于写寄存器 ,如果cache的话,后面也要去主动sync到外设。
=============》这种需求很少会用吧。
二、关于regmap使用
regmap缓存及缓存压缩类型,其中REGCACHE_NONE不是缓存类型,直接操作外设寄存器。
文章图片
regmap 初始化需要配置的重要项:寄存器位宽 ,地址位宽,寄存器总数,等 。
如果要使用cache功能,注意:前面提到的变化的状态寄存器,变化的数据寄存器,必须使用volatile_reg()用于指明。
文章图片
使用cache功能regmap_config例子:
文章图片
不使用cache功能regmap_config例子:
文章图片
Regmap初始化、及操作接口
文章图片
文章图片
regmap_update_bits() , regmap_write_bits() 接口很方便对按位操作寄存器 。
Regmap操作i2c例子:
文章图片
文章图片
Regmap总结:
使用确实更简单,效率提升有限。
【Kernel Regmap】
推荐阅读
- 跟着白泽读paper丨kAFL:|跟着白泽读paper丨kAFL: Hardware-Assisted Feedback Fuzzing for OS Kernels
- 如何检查linux|如何检查linux kernel 信息
- kernel|lcd:mipi各种clock计算
- TP多点触摸协议
- 安卓5.1源码 lcd驱动移植
- 如何交叉编译|如何交叉编译 linux kernel 内核
- Uncompressing Linux... done, booting the kernel (问题集锦)
- 原创|静态集成 OpenCL 的 Kernel 源代码到可执行文件
- 修改kernel version的方法及后果
- kernel|kernel version does not match DSO version