linux分配iomem,linux 下__iomem 解析【转】
-iomem解析
在看Linux的i2s源码时,里面有个定义:void __iomem *base;
这个__iomem是个什么东西,蒙蔽了。在include/linux/compile.h这个文件查看其宏定义为:
#ifdef __CHECKER__
# define __user __attribute__((noderef, address_space(1)))
# define __kernel __attribute__((address_space(0)))
# define __safe __attribute__((safe))
# define __force __attribute__((force))
# define __nocast __attribute__((nocast))
# define __iomem __attribute__((noderef, address_space(2)))
# define __must_hold(x) __attribute__((context(x,1,1)))
# define __acquires(x) __attribute__((context(x,0,1)))
# define __releases(x) __attribute__((context(x,1,0)))
# define __acquire(x) __context__(x,1)
# define __release(x) __context__(x,-1)
# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)
# define __percpu __attribute__((noderef, address_space(3)))
#ifdef CONFIG_SPARSE_RCU_POINTER
# define __rcu __attribute__((noderef, address_space(4)))
#else
# define __rcu
#endif
iomem这个特性,即__attribute((noderef, address_space(2))),attribute是用来修饰一个变量的,这个变量必须是非解除参考(no dereference)的,即这个变量地址必须是有效的,而且变量所在的地址空间必须是2,即io存储空间。
0.1.2.3分别对应四个空间
address_space(v)
————————————-
v: 0 内核空间
v: 1 用户空间
v: 2 io存储空间
v: 3 cpu空间
那这个address_space(4)又是啥呢,查了一些资料,如下:
# define __rcu __attribute__((noderef, address_space(4)))
1
RCU代表的是 “read, copy, update”。它是一种算法,允许多个读者访问数据,并且同时允许修改者,删除者能够进行操作。
如果内核使用 CONFIG_SPARSE_RCU_POINTER 的编译, __rcu 就会被定义为上面的定义。
这是一种标记,可以给Sparse code 分析工具来对于某些东西进行警告。
引用 http://stackoverflow.com/questions/17128210/what-does-rcu-stands-for-in-linux
可以知道: __rcu sparse 检查:使用__rcu 附上 RCU保护的数据结构,如果你没有使用rcu_dereference()类中某个函数,Sparse就会警告你这个操作。
————————————————
版权声明:本文为CSDN博主「夜风~」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014470361/java/article/details/80682101
linux分配iomem,linux 下__iomem 解析【转】相关推荐
- linux分配iomem,Linux中__iomem
这是个IO map的问题,根据系统的具体情况,把寄存器映射到虚拟地址的特定位置,这样,访问寄存器就可以像访问普通内存一样简单方便了. __iomem是linux2.6.9内核中加入的特性.是用来个表示 ...
- linux分配内核,linux 内核分配算法
分配 unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) 直接从buddy系统中得到原始页.最原始的分配方式. sla ...
- Linux内核很吊之 module_init解析 (下)【转】
转自:https://blog.csdn.net/richard_liujh/article/details/46758073 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...
- 上海域格ASR和高通模块 USB端口分配及Linux下拨号说明
上海域格ASR和高通模块 USB端口分配及Linux下拨号说明 一.域格 ASR模块端口分配 1.Windows下模块端口分配如下: interface 0 → RNDIS interface 1 → ...
- Linux内核很吊之 module_init解析 (下)
Linux内核很吊之 module_init解析 (下) 转载 2017年01月23日 13:58:21 标签: 95 编辑 删除 转自: http://blog.csdn.net/richard_l ...
- Linux中/proc目录下文件详解
Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...
- 蜗蜗 Linux内核芬妮下,Linux内核的整体架构
作者:蜗蜗 发布于:2014-2-21 13:23 分类:Linux内核分析 1. 前言 本文是"Linux内核分析"系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内 ...
- linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...
第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...
- linux+分配挂载点权限,Linux系统管理(一)——初学者建议
学习Linux的注意事项(一) Linux严格区分大小写 Linux是严格区分大小写的,这一点和Windows不一样,所以操作时要注意区分大小写的不同,包括文件名和目录名.命令.命令选项.配置文件配置 ...
最新文章
- graylog2安装
- python画图哆啦a梦-Python小白绘图 哆唻A梦 turtle真的很强大!
- UA MATH563 概率论的数学基础 鞅论初步7 停时与Upcrossing不等式
- 全球著名 CMS 产品大全
- Selenium 与 PhantomJS
- 如何处理non-resolvable parent POM的错误
- uva minesweep 水题
- vue 获取url地址的参数_Vue 网络请求框架 axios 使用教程
- 最常用常见通用字体有哪些
- Cat5e、Cat6、Cat6a和Cat7网线有什么区别?哪个更好?
- 【物联网】全球SIM连接解决IoT设备换卡难问题
- 在Pytorch中显示网络每层的输出特征图大小、参数、显存占用、参数量的工具---pytorch-summary
- 什么是CBR,VBV,CPB
- 暮拾晨花,回望流年——我的2016
- 配置路由器console接口密码和vty接口密码
- 2022-2028年中国微创治疗行业市场运行态势及发展战略研究报告
- 如何评测光源的好坏?
- Human Pose Estimation with Spatial Contextual Information(CVPR2019)
- 聊一聊Spring中@Transactional注解及其失效的七种场景
- gRPC是什么,怎么用