Linux IO空间与内存空间

Sentinel--哨兵系列数据下载地址及流程更新【202310】 哨兵系列数据下载地址及流程更新。哨兵系列卫星作为哥白尼计划的一部分,主要目标便是对地球的观测任务。哥白尼计划由三部分组成:空间部分(哨兵系列太空任务与其他太空机构任务)、测量部分(提供海洋、大陆表面和大气信息的陆基和机载数据收集网络)、数据管理与全球共享。 阅读详情

编址方式

外设都是通过读写设备上的寄存器来进行工作的,外设寄存器也称为“IO端口”,而IO端口的编址方式有两种,独立编址和统一编址。

统一编址:外设接口中的IO寄存器(即IO端口)与主存单元一样看待,每个端口占用一个存储单元的地址,将主存的一部分划出来用作IO地址空间。 统一编址的原理是将IO的端口地址存储器寻址的地址空间范围之内,此方法也成为存储器映像编址。CPU访问一个端口的操作与访问内存的操作相同,也使用访问内存的指令。

独立编址:为端口地址单独开辟一部分地址空间,其访问指令也需要使用单独的指令(不同于内存访问指令)。

根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:

  (1)I/O映射方式(I/O-mapped)
  典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元。
  (2)内存映射方式(Memory-mapped)
  RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址空间,外设I/O端口成为内存的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。
  但是,这两者在硬件实现上的差异对于软件来说是完全透明的,驱动程序开发人员可以将内存映射方式的I/O端口和外设内存统一看作是"I/O内存"资源。
 一般来说,在系统运行时,外设的I/O内存资源的物理地址是已知的,由硬件的设计决定。但是CPU通常并没有为这些已知的外设I/O内存资源的物理地址预定义虚拟地址范围,驱动程序并不能直接通过物理地址访问I/O内存资源,而必须将它们映射到核心虚地址空间内(通过页表),然后才能根据映射所得到的核心虚地址范围,通过访内指令访问这些I/O内存资源。

void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) 
入口: phys_addr:要映射的起始的IO地址; 
size:要映射的空间的大小; 
flags:要映射的IO空间的和权限有关的标志; 
功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问; 
实现:对要映射的IO地址空间进行判断,低PCI/ISA地址不需要重新映射,也不允许用户将IO地址空间映射到正在使用的RAM中,最后申请一 个 vm_area_struct结构,调用remap_area_pages填写页表,若填写过程不成功则释放申请的vm_area_struct空 间;
意义:
比如isa设备和pci设备,或者是fb,硬件的跳线或者是物理连接方式决定了硬件上的内存影射到的cpu物理地址。 
在内核访问这些地址必须分配给这段内存以虚拟地址,这正是__ioremap的意义所在 ,需要注意的是,物理内存已经"存在"了,无需alloc page给这段地址了. 

为了使软件访问I/O内存,必须为设备分配虚拟地址.这就是ioremap的工作.这个函数专门用来为I/O内存区域分配虚拟地址(空间).对于直接映射的I/O地址ioremap不做任何事情。有了ioremap(和iounmap),设备就可以访问任何I/O内存空间,不论它是否直接映射到虚拟地址空间.但是,这些地址永远不能直接使用(指物理地址),而要用readb这种函数。

使用I/O内存首先要申请,然后才能映射,使用I/O端口首先要申请,或者叫请求,对于I/O端口的请求意思是让内核知道你要访问这个端口,这样内核知道了以后它就不会再让别人也访问这个端口了.毕竟这个世界僧多粥少啊.申请I/O端口的函数是request_region, 申请I/O内存的函数是request_mem_region。request_mem_region函数并没有做实际性的映射工作,只是告诉内核要使用一块内存地址,声明占有,也方便内核管理这些资源。重要的还是ioremap函数,ioremap主要是检查传入地址的合法性,建立页表(包括访问权限),完成物理地址到虚拟地址的转换。

使用方法:

内核中的使用,往往是为某个设备预留一块内存,当使用的时候需要在board中定义这个设备的内存resource。通过 platform_get_resource获得设备的起始地址后,可以对其进行request_mem_region和ioremap等操作,以便应用程序对其进行操作

Rk3128投影仪救砖操作和固件分享思路 大家搞一条比较硬的东西,插入耳机口,就可以进入刷机模式了的,我的机器是这样的,大家也可以试试。(看不懂可以往下看) 阅读详情

相关推荐

Word标题样式基准重置:彻底解决重新打开后自动缩进问题

本文深入剖析了Word文档中标题样式在重新打开后自动缩进问题的根源,并提供了两种根治方案。通过调整标题样式基准或将其设为“无样式”,并配合检查修正多级列表设置,可彻底解决这一常见格式顽疾,确保文档格式的稳定性与专业性。

weixin_29266647的博客 528

linux的io空间和内存空间

1   IO空间和内存空间 并不是所有的体系结构都有IO空间这个定义的,我所了解的只有X86体系上有,而ARM 体系结构就没有这种区别,ARM统一编址, 在X86上,IO空间和内存是独立的,他们各自有各自的总线,并且IO空间一般是64K, 即16位,采用IN和OUT指令访问。内存空间为4G。 可见他们的差别是很大。 2  静态映射:

u012590688的专栏 2369

PT32F030与MT6826S SPI通讯实战:从硬件连接到数据交互全流程解析

本文详细解析了PT32F030与MT6826S通过SPI通讯的全流程,包括硬件连接、电路设计、SPI外设初始化配置以及数据交互协议实现。通过实战案例和代码示例,帮助开发者快速掌握PT32F030与MT6826S的SPI通讯技术,实现精准的角度和速度数据采集。

weixin_29189373的博客 420

第11章--内存与IO访问

目前,大多数嵌入式微控制器中并不提供I/O空间,而仅存在内存空间。内存空间可以直接通过地址、指针来访问,程序及在程序运行中使用的变量和其他数据都存在于内存空间中。

qq_38500362的博客 574

如何在win11中用双硬盘或移动硬盘装Ubuntu 20.04 双系统

win11 安装双系统

qq_42817360的博客 5138

微信小程序 - 最新详细实现调起手机摄像头拍摄身份证人像面和国徽面取景框功能,在拍照相机上增加身份证证件照的轮廓或自定义文字,支持替换扫描拍摄辅助线图片及文本,小程序实现拍照身份证时带取景轮廓框拍摄!

微信小程序,身份证,证件照,人像,证件照提示框模板,vue身份证拍照框,摄像机相机里有引导内容,取景框拍摄,微信小程序实现拍照界面自定义实现,自拍人相框拍摄,取景框,户口簿取景框,画布指定区域生成图片,微信小程序身份证正反面拍照如何加入辅助图片引导照片,身份证取景框拍摄,服务器,上传,正反面,调起手机摄像头: 拍摄身份证的正反面,自定义身份证取景框,在相机上绘制 “身份证轮廓“ 与提示文字,拍摄身份证时出现人像框怎么实现,在相机上增加图片和文字,微信小程序怎么给调起的相机加入自定义图片,小程序实现给相机上面

🏆 前端领域优质创作者 3404

Linux 文件IO、虚拟地址空间

文件IO

weixin_43349440的博客 388

基于STM32的嵌入式平台实现EtherCAT主站

本文将介绍如何在基于STM32的嵌入式平台上构建EtherCAT主站,并提供相应的源代码。使用SOEM库提供的API函数,我们可以实现与EtherCAT从站设备的实时通信和数据交换。在STM32的代码中,使用SOEM库提供的API函数初始化EtherCAT主站。在SOEM库中,我们可以找到EtherCAT主站的实现代码和相关的API函数。使用SOEM库提供的API函数实现EtherCAT主站的功能,包括发送和接收EtherCAT数据帧、处理从站设备的状态等。确保连接正常并且设备能够相互通信。

CodeSageX的博客 2833

Linux驱动开发10 --- 内存和I/O

内存和IO在Linux

weixin_43604927的博客 1949

092、多sensor帧同步在环视系统中的实现——基于瑞芯微RK3588的PPS同步与曝光同步方案

摘要: 本文探讨了瑞芯微RK3588平台在360环视系统中实现多摄像头帧同步的技术方案。针对环视拼接常见的动态场景错位问题,提出了PPS同步与曝光同步相结合的解决方案。通过GPIO硬件触发实现四路摄像头同步曝光,配合I2C全局曝光控制,将时间误差控制在0.5ms内。文章详细解析了RK3588设备树配置、内核驱动实现中的关键细节,包括同步信号处理、寄存器原子写入等核心技术点,并分享了量产中遇到的温度漂移、信号完整性等实际问题及解决方法。最终通过硬件整形和电源优化,将同步抖动控制在±5μs以内,有效解决了动态拼

zzfmlxs的博客 33

AI智算-K8s如何利用GPFS分布式并行文件存储加速训练or推理

GPFS(General Parallel File System,通用并行文件系统)是由 IBM 开发的高性能分布式文件系统,最初设计于 1990 年代,用于满足高性能计算(HPC)环境对大规模数据存储和访问的需求。GPFS 现已广泛应用于企业级存储、云计算、大数据分析、人工智能和媒体处理等领域。它以其高性能、可扩展性和可靠性著称,能够支持从小型集群到超大规模系统的各种部署场景。

Kason_iWiki 1131

Linux中的文件IO和虚拟地址空间模型 [Linux高并发服务器开发]

Linux文件IO 与 虚拟地址空间的概念

Appleeatingboy的博客 1504

实战案例七:Claude Code 构建完整的 Web 应用

前面的案例大多是单一功能的演示,本章将展示如何使用 Claude Code 从零开始构建一个完整的 Web 应用,涵盖需求分析、架构设计、编码实现、测试部署的全流程。

gaoxiang_120的专栏 581

linux驱动学习笔记(五)内存空间与IO映射

前言 一般高性能处理器都会提供一个叫MMU(内存管理单元),MMU帮助操作系统进行内存管理,虚拟地址和物理地址的映射。 对于包含MMU的处理器来说,linux提供了一种复杂的存储管理系统,可以让进程访问可以访问的空间达到4GB,这4GB分别表示用户空间(0 ~ 3GB) ,内核空间(3 ~ 4GB)。用户空间通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址,用户空间只能通过系统调用才能访问内核空间 内存申请 用户空间的内存申请 用户空间中动态申请内存的函数为malloc,申请的内存的释放函数为fr

weixin_35429431的博客 816

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

区分:内存空间、物理内存、IO空间、IO端口、IO内存

内存空间: 内存地址寻址范围,32位操作系统内存空间为2的32次幂,即4G。 物理内存: 实实在在的物理设备,一般 IO空间: X86特有的一个空间,与内存空间彼此独立的地址空间,32位X86有64K的IO空间。 IO端口: 当一个寄存器或内存位于IO空间时,称

SdustLiYang的专栏 3238

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

weixin_36028342的博客 388

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

{博学谷学习记录} 超强总结,用心分享|狂野架构师-网络IO(同步阻塞IO)

我们的应用程序是不能直接操作计算机的需要通过内核来进行中转由内核向上提供api,我们应用程序调用从而达到中转的效果我们的应用程序刚开始启动的时候就是一个进程,进程的话操作系统就会为我们的进程分配空间和相应的资源以内存资源为例,操作系统为我们分配的内存空间,内存空间分为两部分一个是内核缓冲区空间,一个是用户空间,内核缓冲区空间用于存储内核给我们处理任务所产生的任务数据,用户空间就是应用程序占用的空间,比如我们启动一个jvm,就会在用户空间中开辟相应的堆栈信息。

zhixin0067的博客 306

Linux I/O 端口和 I/O 内存

http://huzoy.blog.163.com/blog/static/560963152010263747121/ 在Arm ,Linux里面,全部都会做phy->virt的映射。映射方式中的一种是静态映射,ioremap是动态映射。在静态映射之后,仍然可以通过ioremap动态映射,也就是一个IO物理地址可以映射到多个虚拟地址。 (1)关于IO与内存空间:      在X

kklvsports的专栏 548

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

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

weixin_30662011的博客 214

PCIe配置空间和PCI设备中的寄存器

1、访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在 int pci_read_config_byte(struct pci_dev *pdev, int where, u8 *val); int pci_read_config_word(struct pci_dev *pdev, int where, u8 *val); int pci_read_config_d

chengch512的专栏 1万+

Linux系统对IO端口和IO内存的管理

Linux系统对IO端口和IO内存的管理 一、I/O端口       端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。 二、IO内存

Eric的专栏 603

内存和IO访问

内存和IO访问

qiaogua的专栏 4152

排查 Linux 系统运行速度慢

排查 Linux 系统运行速度慢一、检查CPU信息二、使用top检查cpu负载三、iotop进行检查四、检查启动的服务五、free检查闲置内存空间 一、检查CPU信息 在 Linux 系统中,提供了 proc 文件系统显示系统的软硬件信息。那么可以执行命令 cat /proc/cpuinfo文件系统中查看 CPU 的提供商和相关详细配置信息; cat /proc/cpuinfo lscpu ...

爱是与世界平行 1456

linux常用命令

查看根目录inode编号 root@vm:~# ls -i -d / 2 / 1 表示虚拟文件系统。 其他目录的inode编号 root@vm:~# ls -i 79953929 Desktop 79953933 Documents 79953930 Downloads 79954396 gocode 79953934 Music 79953935 Pictures 79953932...

Geek猫的专栏 194

io端口

io端口 ***********************************************************   io端口设备访问流程为 ----------------------------------------------------------- 1 request_region() 1 request_region()  2 ioport_map()...

weixin_34406086的博客 254

驱动中的IO访问

1,内存空间与IO空间   1)I/O 映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元。   2)内存映射方式(Memory-mapped)  RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址...

weixin_30813225的博客 319
上一篇: gdb stdout重定向
下一篇: ubuntu软件安装常用命令
dataowner
博客等级 码龄19年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值