Linux下对IO内存的访问

Linux的内存和IO访问技术 这是讲解LInux的内存访问和IO技术的最好的文档,非常详细,看了就明白了 立即下载

1.引言

1.1文档目的
本文档描述IO内存的概念和访问流程。

1.2背景

1.3参考资料
名称 类型 作者 备注
Linux设备驱动开发详解:基于最新的Linux4.0内核 书籍 宋宝华 第11章
国嵌内核驱动深入班5-1-2(硬件访问) 视频 谢老师

2.几个概念

2.1 IO空间与内存空间
在X86处理器才存在IO空间,是相对于内存空间的概念。目前大多数嵌入式处理器(如ARM、PowerPC等)并不提供IO空间。所以内存空间是必须的,IO空间是可选的。嵌入式开发只关心内存空间即可。
IO空间和内存空间是彼此独立的地址空间,在32位的X86处理器中,IO空间大小为64K ,内存空间为4G。

2.2 IO端口和IO内存
设备通常会提供一组寄存器开控制设备、读写设备和获取设备状态,既控制寄存器、数据寄存器和状态寄存器。这些寄存器可能位于IO空间,也可能位于内存空间中。
当位于IO空间,称为IO端口;当位于内存空间时,对应的内存空间称为IO内存。

3. IO端口和IO内存的访问

Linux是支持嵌入式处理器,也支持X86处理器,所以Linux支持IO空间(IO端口)和内存空间(IO内存)的访问,只是API不同而已。

3.1 IO端口的访问
前面说过了,嵌入式开发不关心IO空间,所以也不关心IO端口的访问。这里不详述。

3.2 IO内存的访问
IO内存的访问,在设备驱动开发中,用的非常多的。比如在ZYNQ平台,操作FPGA的寄存器。FPGA与ARM共享的内存区域,中间的一段用做寄存器的控制。FPGA看做是ZYNQ的一个外设,挂在内存空间。知道物理地址后,对地址进行映射操作即可。具体的IO空间操作流程如下图3.2.1所示。
在这里插入图片描述图3.2.1 IO内存访问步骤

3.2.1 mmap访问
在驱动中访问,可以按上面ioremap的方式。如果在应用层进行访问。就可以mmap的方式实现啦。这种方式,在实际使用中,也比较常用。

PCL Super4PCS算法实现点云粗配准(版本一)【2025最新版】 Win11系统下实现[Super4PCS: Fast Global Pointcloud Registration via Smart Indexing一文中的配准算法。 阅读详情

相关推荐

2024年下半年软考系统架构设计师案例分析题

摘要: 本文包含两个软件系统设计案例。案例一讨论了大语言模型智能系统的质量属性需求分析,识别了功能性、性能、可靠性等需求,并对比了ping/echo和心跳两种故障检测策略。案例二探讨了购物网站的缓存设计,包括Cache-Aside策略的数据读取/更新流程,以及解决缓存一致性的多种方案(消息队列、数据库插件、锁机制等)。此外还涉及Elasticsearch分词器的特点比较和RESTful架构实现前后端分离的原理。这些案例展示了软件架构设计中的质量属性权衡、缓存策略选择及系统解耦等关键技术考量。<|end

卿着飞翔 1047

Linux下的IO port, IO mem, IO space, Mem space及访问方式

经常看到这些个名词,大致弄清了他们的区别和联系,以x86架构为例,简要说明下。哪里不对,还请指正。 关键词:内存空间、I/O空间,I/Oport,I/O mem 1 内存空间和I/O空间 所有的设备中的每一个可访问单元,要想被CPU访问,都要有一个独立的可识别的地址,不然就混乱了。CPU所能访问的全部地址范围,被化分到内存空间和IO空间。 两个空间彼此独立,各有自己的访问方式,硬件...

Dalek的博客 4183

Unity学习笔记之【IK反向动力学操作】

反向动力学,简称IK。相较于正向动力学,反向动力学旨在子级对父级产生的影响。使用IK,可以实现根据目标位置或方向来计算并调整角色的关节(骨骼)链,以使角色的末端(如手臂、腿部等)达到预期的位置或取向。通过使用 Unity 的 IK 功能,你可以实现各种复杂的角色动画效果,如角色抓取、足部对齐、手臂跟随等。 2. 将所视的目标物体拖拽绑定 4. 实现效果如下 :移动角色时注释立方体 实现效果如下

m0_47351846的博客 2954

探索Linux内核空间文件IO实现

探索Linux内核空间文件IO实现 2011年05月04日   http://blog.youkuaiyun.com/wby0322/archive/2010/11/11/6002249.aspx   本文参考《深入理解Linux内核》完成,详情请查阅相关书籍   前言   将磁盘上的文件读入到内存中,将内存中的一段数据写到磁盘的文件上或另一个存储设备。看似很简单的事情,却有一些出人意料的东西...

ecm943ef 156

DSMA时序修复避坑指南:当Setup和Hold互卡时,除了调Margin还能做什么?

本文深入探讨DSMA时序修复中的Setup与Hold互锁问题,提供7种高阶策略,包括优先级判断、高级参数组合、单元类型智能替换等,帮助工程师突破时序收敛瓶颈。特别针对fix_eco_timing命令的隐藏参数和物理协同优化进行详细解析,助力芯片设计实现时序收敛。

weixin_30162121的博客 295

windchill安装搭建(保姆式)

保姆式搭建windchill 材料准备 Vmware工具,用来创建和打开虚拟机的工具 安装系统的镜像文件 数据库安装文件,这里是Oracle数据库 Windchill的安装包 Vmware工具,用来安装和打开虚拟机的软件 Windowsserver2008的镜像工具,用来安装虚拟机环境的系统,如果你有win2007或win2010的也可以,在做虚拟机时,需要先安装系统。 Oracle数据库安装包 Windchill11M030的安装包 (安装包如有需要可以私信邮箱发送) 虚拟机安装 安装虚拟机VMware

tr1294937662的博客 6217

linux 内存和I/O访问

2012-08-14 19:22 内存空间和I/O空间                 ,大多数嵌入式微控制器如ARM 等不提供I/O空间,而仅仅存在内存空间,内存空间可以直接通过地址,指针来访问,程序和程序运行中使用的变量和其他数据都存在于内存空间内。         内存地址可以直接由C指针操作,例如:(186处理器中):  unsigned  char * p = (unsig

hurry_liu的嵌入式之路 517

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

linux 一次io大小,Linux——标准IO篇

主要知识点:标准IO(fopen、perror、fputc、fgetc,stdin、三种缓冲区、读写偏移、fseek、ftell、fgets、fputs)[主要内容]【1】IOIO: inputoutput输入输出IO:对文件的读写操作IO: 标准IO、文件IO标准IO:采用库函数的方式对文件进行读写操作(对文件的操作函数接口功能出自于库文件)文件IO:采用系统调用的方式对文件进行读写操作(对文件...

weixin_36319219的博客 878

gem5 prefetcher

最近在gem5上做预取实验,添加自己的预取算法,这里采用hardware stream prefetcher , 修改了几个bug才给实验调试通过,发文记录下实验过程。 gem5上添加自己的预取算法步骤: (1)路径gem5-master/configs/common/Caches.py下,开启预取:class L1Cache(Cache): assoc = 2 tag_late

编程邦 3844

2026年高教社杯数学建模国赛A题解题思路:从物理方程推导到MATLAB高效求解的全流程实战指南

□所有代码能够从头运行到尾,不报错(清除workspace重新跑一遍)□论文中的每个图号、表号、公式编号与正文引用一致□附录中附上核心代码(注意:不是全部代码,而是关键求解器和后处理部分)□支撑材料压缩包包含完整代码、数据文件、README说明□摘要字数严格控制在1000字以内,突出创新点和核心结果□。

YOLO 110

linux的每次IO大小控制,Linux IO磁盘篇整理小记

起源本篇起源于对Kafka的一个问题排查,大体的缘由是达到磁盘性能瓶颈。在追踪问题的时候用到iostat -x这命令,详细示例以下:ios 能够看到%idle(%idle小于70%说明IO压力已经比较大了)和%util的值都处于非正常状态。不过这里并不讲述Kafka的问题排查过程,反而是来说述下IO指标的一些知识。每次遇到须要查看磁盘相关信息的时候,一些指标都会或多或少的遗忘,还要翻阅各类资料了解...

weixin_39722946的博客 1247

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

Linux IO内存访问

注:本文资料全部来源于网络,同时加上个人理解。若有侵权,告知即删。若有错误,告知商讨。 1、IO内存访问 32位Linux系统,内核使用高端内存的vmalloc区来映射IO地址空间。具体地址可以自己定义。 例如:三星4412提供的源码使用0xF6000000 至0xF6000000+96MB的内存空间映射IO端口的寄存器。 2、内存和IO基础知识 内核访问外设IO内存之前,先要将...

weixin_38812277的博客 412

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

linux驱动静态分配内存,Linux驱动设计——内存与IO访问

名词解释内存空间与IO空间内存空间是计算机系统里面非系统内存区域的地址空间,现在的通用X86体系提供32位地址,寻址4G字节的内存空间,但一般的计算机只安装256M字节或者更少的内存,剩下的高位内存就被用于PCI或者AGP及系统桥设备的使用上面,主机可以像访问系统内存一样访问这些高端内存,这样对于扩展的设备有更大的空间。IO空间是X86系统上面的专用空间,现在的IO空间大小是64K字节,从0x00...

weixin_36028342的博客 388

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Linux驱动设计——内存与IO访问

名词解释 内存空间与IO空间 内存空间是计算机系统里面非系统内存区域的地址空间,现在的通用X86体系提供32位地址,寻址4G字节的内存空间,但一般的计算机只安装256M字节或者更少的内存,剩下的高位内存就被用于PCI或者AGP及系统桥设备的使用上面,主机可以像访问系统内存一样访问这些高端内存,这样对于扩展的设备有更大的空间。 Linux用户空间与内核空间 IO空间是X86系统上面的专用空间...

weixin_30662011的博客 214

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

linux下对IO端口和IO内存的访问

Chinaunix首页 |  论坛 |  问答 |  博客 登录 | 注册 博文 博主 私人消息() 系统消息() 好友请求() 通知管理() galaren77的ChinaUnix博客 前事不忘后事之师 有奖征集:文集--博客系列博文管理 CU博客频道6月技术图书有奖试读

lin364812726的专栏 2280

linux内存访问,Linux 内存与IO访问

[1] 应用程序动态分配内存/** @brief 内存动态分配* @param[in] nbytes 分配内存的字节数* @return 内存的开始地址*/void *malloc(size_t nbytes);/** @brief 内存动态分配,并且初始化为0* @param[in] cnt 分配对象的个数* @param[in] nbyte...

weixin_36044132的博客 178

Linux 内存与IO访问

[1] 应用程序动态分配内存 /* * @brief 内存动态分配 * @param[in] nbytes 分配内存的字节数 * @return 内存的开始地址 */ void *malloc(size_t nbytes); /* * @brie...

Tree_in_sea的博客 394

linux驱动访问内存,linux驱动笔记八(内存与IO访问)

X86处理器中存在I/O空间的概念,I/O空间是相对于内存空间而言的,通过特定的指令in, out 来访问。目前,大多数嵌入式微控制器如ARM, POWERPC等并不提供I/O空间,而仅存在内存空间。typedef void (*lpFunction) (); //定义一个无参数,无返回类型的函数指针类型lpFunction lpReset = (lpFunction) 0xF000FFF0; /...

weixin_39687814的博客 274

Linux Kernel编程 --- 内存与IO访问

本文档参考宋宝华老师的《linux设备驱动开发详解》 内存访问与映射是linux驱动常见操作,操作硬件时离不开内存的映射,本章比较重要。 1 CPU与内存、I/O 嵌入式处理器,一般不提供专门的I/O空间,而仅存在内存空间;各种外设寄存器都直接映射到内存空间,可以通过指针直接访问 x86一般提供专门的I/O空间, 用特殊指令访问这些空间; CPU访问虚拟地址(VA),MMU把虚拟地址转换为物理地址(PA),同时提供内存访问权限保护和Cache缓存控制等硬件支持。MMU的知识点还是比较多,也比较复

huofengfeihu的博客 1254

linux设备驱动开发学习--内存和IO访问

I/O 端口 I/O 内存 把 I/O 端口映射到内存空间 I/O 端口申请 I/O 内存申请 字符设备与块设备 I/O 操作的不同

Rocky_zhm的博客 831

外设获取物理内存数据_Linux系统对IO端口和IO内存的管理

一、I/O端口 端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。二、IO内存 例如,在PC上可以插上一块图形卡,有2M...

weixin_39807691的博客 236

内存和IO访问

内存和IO访问

qiaogua的专栏 4152

IO端口和IO内存访问

主要包括由驱动做IO Port和IO Memory访问所衍生出来的一系列问题。包含总线、驱动(或者内核)想对IO Port和IO Memory操作的方法,设备地址通过mmap向用户空间映射,VMA(virtual memory area)。讨论了remap_pfn_range创建物理与虚拟内存连接的一些问题。

从前有个花果山 3089
上一篇: *****Linux下PCIe驱动以及DMA机制
下一篇: Linux设备模型(一):kobject
Linuxxulin
博客等级 码龄16年 41粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值