132 }

IO_CONCAT定义在include/asm-$(arch)目录下的IO.H中

#define IO_CONCAT(a,b)_IO_CONCAT(a,b)

#define _IO_CONCAT(a,b)a ## _ ## b

这段代码前几天看过了,是标示将两边的字符串连接起来的意思,即ab。

include/asm-$(arch)/core_apecs.h

/*

* APECS is the internal name for the 2107x chipset which provides

* memory controller and PCI access for the 21064 chip based systems.

*

* This file is based on:

*

* DECchip 21071-AA and DECchip 21072-AA Core Logic Chipsets

* Data Sheet

*

* EC-N0648-72

*

* david.rusling@reo.mts.dec.com Initial Version.

*/

继续阅读代码,看看定义__IO_PREFIX之后紧接着包含了哪个头文件。在哪个头文

件里面寻找答案。对于你的apsec,看看以下代码段(linux-2.6.28-rc4)

#undef __IO_PREFIX

#define __IO_PREFIX             apecs

#define apecs_trivial_io_bw     0

#define apecs_trivial_io_lq     0

#define apecs_trivial_rw_bw     2

#define apecs_trivial_rw_lq     1

#define apecs_trivial_iounmap   1

#include

前往include/asm-$(arch)/io_trivial.h

__EXTERN_INLINE void

IO_CONCAT(__IO_PREFIX,writel)(u32 b, volatile void __iomem *a)

{

*(volatile u32 __force *)a = b;

}

就是最终通过*(volatile u32 __force *)a = b;

来写入数据的。

同样的readl读取数据也和writel类似,这里就不重复了。

# define __force __attribute__((force))

表示所定义的变量类型是可以做强制类型转换的,在进行Sparse分析的时候,是不用报告警信息的。

(如果在没有os,没有mmu的情况下,当开发板裸跑的时候,我们只需要一句话就一切ok:

*(unsigned long *)addr = value)

linux内存映射边读边写,内存映射IO空间的读写函数writeb(), writew(), writel()相关推荐

  1. linux flash擦除命令,Linux下flash操作读、写、擦除步骤

    描述 1. 背景介绍 在板上,ZYNQ PL部分通过EMC连接一片NOR FLASH,地址空间如下: 可以看到NOR FLASH的起始地址为0x80000000,这是物理地址,可以把数据存放在以该地址 ...

  2. Linux系统chmod命令读、写、执行

    一.chmod命令  u - 表示用户 (user)      g - 表示用户组 (group)       o - 表示其它 (others)        a - 表示所有 (all) 1.ch ...

  3. c语言中读和写的作用,c语言文件读写

    c语言文件读写 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种. ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码.ASCII码 ...

  4. Linux下有关可读可写可执行权限rwx:.sh:权限不够

    在某天之前,我运行Linux下的.sh文件,都是采用./xxx.sh的方式. 突然有一天,我发现这个方式运行不了了...提示我 然后,我才知道,原来文件夹还是有权限的... 所以,请教了一下公司大神, ...

  5. Linux 文件权限 -rwxr-xr-- 可读 可写 可执行 什么意思 ?

    2.1.文件信息含义解释 文件信息:drwxr-xr-x. 2 root root 4096 Oct 29 16:43 Desktop drwxr-xr-x:文件类型和权限.第1位:文件类型,剩余9位 ...

  6. linux c 串口可读可写,串口编程可写入不能读取 怎么解决

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #define DEV_NAME "/dev/ttySP1" #define EXPORT_PATH "/sys/class ...

  7. 在linux c 以结构体形式写文件 结构体参数如何在函数中传递,Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量、函数定义...

    原标题:Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量.函数定义 2.4.3文件三auditsc.c2.4.3.1 文件描述 kernel/auditsc ...

  8. c语言标准io中可读可写,C语言标准IO: [先读再feof] VS [先feof再读]

    刚学习C语言读取文件的时候,可能都遇到过这个"bug",读到末尾时数据有重复. 解决方案也是五花八门,甚至有人把数据先缓存了,再忽略掉最后一组.... 不妨看一段代码,两种解决方案 ...

  9. blp模型 上读下写_Java高并发编程(三):Java内存模型

    1 Java内存模型的基础 在并发编程里,需要处理两个问题: 线程之间如何通信 线程之间如何同步. 通信指的是线程之间以何种机制来交换信息.在命令式编程里中,线程之间的通信机制有两种:共享内存和消息传 ...

最新文章

  1. Domino+Qucikplace+Sametime构建企业办公平台图文攻略(三)
  2. 学习WINDOWS内核好书
  3. Xgboost调参小结
  4. angular 数字逗号分隔,如何在Angular 4中为数字管道指定区域设置千位分隔符
  5. java中break标记的使用
  6. thinkphp5 验证码出不来的常见问题
  7. centos 卸载docker_五分钟安装docker并启动第一个docker容器
  8. IBM主机增加“交易实时分析”新能力
  9. 【机器学习】GBDT+LR算法进行特征扩增
  10. 记kali下使用metasploit木马进行远程控制
  11. SpringBoot项目实现网络测速功能
  12. 【BI学习作业04-ALS算法与推荐系统】
  13. webflux之reactor-Subscriber
  14. KUDU(三)kudu的模式设计
  15. 腾讯云技术认证考试综述 腾讯云技术认证题库
  16. 位宽512bit显卡_显卡位宽是什么?详解显卡位宽基础知识科普!
  17. AUTH权限通用后台管理控制系统、阿里云UI高端大气
  18. 网页自动弹窗被拦截 html,JS弹出新窗口被拦截的解决方法
  19. Java学习日记-Day01
  20. C# WPF 实现英雄联盟图片 宝宝识图

热门文章

  1. 计算机专业文书范文,优秀留学文书汇总(计算机专业).pdf
  2. oracle中怎样查看job,查看oracle数据库job及会话信息
  3. 移植 linux-5.8.5 到 iTOP-4412(一)build config
  4. PHP规范之PSR规范
  5. 【Mongodb和Solr】Mongodb和solr整合
  6. matplotlib eps格栅化,透明度被改变的问题 pdf->eps
  7. 2022年陕西省中级工程师职称评定流程是怎样的,仔细看哦
  8. 记录一次工作中的问题以及解决(POI对于Excel的数据导出覆盖问题)
  9. C# 仿360悬浮球开发demo程序
  10. 使用markdown玩转代码架构设计