linux下静态映射与动态映射原理分析

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

 

2017年10月1号

(1)外设IO寄存器地址独立编址的CPU,这时该称外设IO寄存器为IO端口,访问IO寄存器可通过ioport_map将其映射到虚拟地址空间,但实际上这是给开发人员制造的一个“”假象”,并没有映射到内核虚拟地址,仅仅是为了可以使用和IO内存一样的接口访问IO寄存器

例如:x86平台普通使用了名为内存映射的技术,IO设备端口被映射到内存空间,映射后,CPU访问IO端口就如同访问内存一样。

 

(2)外设IO寄存器地址统一编址的CPU,这时应该称外设IO寄存器为IO内存,访问IO寄存器可通过ioremap将其映射到虚拟地址空间,然后在使用read/write接口访问

访问的方法:首先调用request()申请资源,接着将寄存器地址通过ioremap()映射到内核空间的虚拟地址,之后就可以Linux设备访问编程接口访问这些寄存器了,访问完成后,使用ioremap()对申请的虚拟地址进行释放,并释放release()申请的io内存资源

 

2、动态映射和静态映射2017年12月18日补充

2.1  这里涉及到动态映射和静态映射,比如某个公司开发可一块板子,针对linux2.6.35移植内核,该公司在内核里面添加针对自己板子物理地址对应虚拟地址的静态映射表,也就是4G的虚拟地址的某个地址(如0xFDF000240)对应的实际板子IO寄存器物理地址(0xE0001234),这个虚拟地址被静态绑定对应的物理地址后,我们的内核代码使用动态映射时无法在使用这个虚拟地址虚拟地址4G,实际物理可能只有256M,我们编写代码时,是想象有4G能使用,其实,很多时候是动态映射,如虚拟地址0xFF000000动态映射到物理地址0xEE000000,使用了这个地址的寄存器运算,因为我们写代码时想象有4G,所以虚拟地址用的很奢侈,0到4G的范围使用,就想在虚拟地址0xFFF0000F

Linux】动静态库&&如何加载到内存 引言:当我们使用别人的库时该怎么使用或者怎么发布自已制作的库,库是怎么从磁盘加载到物理内存从而被我们使用的,Linux下的静态库后缀为*.a 动态库为*.so ,使用动态库时加载到内存静态库是将需要的内容拷贝到进程调用处。 阅读详情

相关推荐

60、深入解析Linux系统:内存映射、链接方式文件系统

本文深入解析了Linux系统的多个核心机制,包括内存映射进程调度的工作原理静态链接动态链接的技术差异及其优缺点,以及Linux虚拟文件系统(VFS)的设计关键对象。文章还详细介绍了标准Linux文件系统ext2fs的发展历程、磁盘分配策略性能优化,并探讨了文件系统日志功能的实现原理优势。最后,阐述了/proc文件系统的特性作用,展示了Linux如何通过VFS实现灵活高效的系统接口。

opencv7vision的博客 32

静态映射动态映射

内核访问外设I/O内存资源 为什么需要映射 动态映射静态映射的比较 动态映射 静态映射 https://blog.csdn.net/maopig/article/details/58056652

weixin_42031299的博客 3714

VFIO框架源码分析(二十一)- IOMMUFD 模式下的 DMA 映射机制

在虚拟化 I/O 的世界里,无论上层管理面(如对象模型、设备绑定)如何重构,数据面最核心的任务始终未变——DMA 映射(DMA Mapping)。即如何建立 Guest Physical Address (GPA) 到 Host Physical Address (HPA) 的映射关系,并将其填入 IOMMU 的硬件页表中,使得直通设备能够正确访问虚拟机内存。在 Legacy VFIO (Type1) 时代,这一职责由承担,它通过ioctl 操作 Container。

qq_36071928的博客 994

帧中继动态映射静态映射主要区别

帧中继动态映射静态映射主要区别现在的理解是一个: 1.动态映射 :frame-relay inverse-arp (这个是默认配置) 它会自动将PVC另一端的设备的IP地址映射到本地DLCI。(在做实验时,最好先clear frame-relay inarp  删除映射表) 2.静态映射当然就要自己配置了,在配置静态映射时,切记要在接口下 no frame-relay inverse-arp

我喜欢你快乐 2628

外设I/O资源的访问方式

们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射内核空间中来,然后才能在内核空间中访问它。

华清远见 | 程序员的学习天堂 1067

Elasticsearch - 动态映射 vs 静态映射 Elasticsearch 该选哪种

本文探讨了Elasticsearch中动态映射静态映射的选择策略。动态映射能自动推断字段类型,适合开发初期日志类数据,但存在类型不准确的风险;静态映射需要手动定义结构,适合生产环境精确控制字段的场景。文章对比了两者的优缺点,介绍了动态映射的三种模式(true/false/strict),并通过示例代码展示了Java环境下的实现方式。建议开发阶段用动态映射快速验证,生产环境采用严格静态映射确保数据一致性。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

网络穿透音视频技术(1)——NAT的概念及工作模式(上)

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上(摘自百度)。本文后续几篇文章将按照NAT基本概念、NAT映射模式、NAT映射实现方式、NAT检验这样的顺序进行知识介绍梳理。

JAVA入门中 3685

动态映射静态映射

https://blog.csdn.net/maopig/article/details/58056652 linux访问io 动态映射静态映射

u012787604的博客 430

Linux内核访问外设I/O资源的方式(设备物理地址设备虚拟地址),静态映射动态映射

来源:http://blog.csdn.net/gzzaigcnforever/article/details/18053873 我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射内核空间中来,然后才能在内核空间中访问它。   Linux内核访问外设I/O内存资源的方式有两种:动态映射(iorem

xiaoxiaozhu2010的专栏 1170

Linux静态原理使用实践

在真实项目中,推荐将非核心功能封装为动态库以节省资源,关键模块则使用静态库确保稳定性。遇到动态库加载失败时,可先用ldd命令检查依赖关系。对于需要频繁更新的功能,动态库的热更新特性会带来显著优势。通过。

BlackironFalcon78的博客 400

Linux 库开发入门:静态动态库的 2 种构建方式 + 5 个编译差异 + 3 个加载技巧,新手速看

本文探讨了Linux静态库(.a)动态库(.so)的权限差异及程序加载机制。静态库在编译时被完整拷贝到可执行文件中,运行时无需访问原库文件,故不需要可执行(x)权限;动态库需在运行时加载执行,必须具有x权限。文章通过实例演示了删除静态库不影响已编译程序的运行,而删除动态库会导致程序崩溃。最后解析了程序从磁盘加载到内存的地址转换过程,包括虚拟地址物理地址的映射关系,以及CPU通过MMU执行指令的流程。这些底层机制解释了静态动态库在权限要求程序依赖上的本质区别。

2301_78847073的博客 934

Linux系统编程:库制作原理

本文系统介绍了程序库的概念、分类及实现原理。主要内容包括:1. 库是预编译的可复用代码集合,分为静态库(.a/.lib)动态库(.so/.dll);2. 静态库在编译时链接到程序中,生成独立可执行文件;动态库在运行时加载,支持多进程共享;3. 详细讲解了静态动态库的生成使用方法,包括路径配置、符号表管理等;4. 深入分析了ELF文件格式加载过程,解释section合并为segment的原理;5. 对比了静态链接动态链接的机制,重点阐述了动态链接的GOT表、地址重定位等关键技术;6. 最后总结了两

_dindong的博客 783

嵌入式Linux之我行——内核访问外设I/O资源的方式

嵌入式Linux之我行,主要讲述总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 共享资源,欢迎转载:http://blog.chinaunix.net/u3/99873/showart_

君子当自强不息 667

Linux内核访问外设I/O资源的方式

Linux内核访问外设I/O资源的方式 我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射内核空间中来,然后才能在内核空间中访问它。 Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)静态映射(map_desc)。 一、动态映射(ioremap)方式 动态映射方式是大家使用了比较多的,也比较简单。即直接通过内核提供的ioremap函数动态创建一段外设I/O内存资源到内核虚拟地址的映射表,

myspor的专栏 540

Linux:文件】Linux静态可执行文件深度解析

库是写好的、现有的、成熟的、可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。本文系统梳理 Linux静态库的制作使用、ELF 文件结构、程序加载过程等核心知识点,确保所有概念表述严谨准确,每个结论都有充分的依据支撑。静态库(.a)是指程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候将不再需要静态库。动态库(.so。

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 1389

Linux STM32 环境下 C 程序的编译链内存管理实践

适合人群:Linux C/C++ 开发初学者、跨平台开发技术学习者、嵌入式初学者开发环境目标成果:理解GCC 编译工具链,ubuntustm32跨平台代码适配能力开发工具:电脑、STM32F103C8T6、面包板、CH340G模块、杜邦线、stlink电脑需安装好ubuntu、keil5串口助手,本文不过多赘述,教程可参考其他博主的Ubuntu22.04保姆级安装教程keil5安装配置江科大自化协6.1. 内存布局核心差异特性地址类型虚拟地址(操作系统管理,隔离进程)

2301_79852562的博客 1866

smart3250中的静态I/O映射情况

根据网络大虾们的指导,基本上搞清楚了smart3250中的静态I/O映射情况。写个blog供以后参考。 ****************************网络摘录************************************** 内核提供了在系统启动时通过map_desc结构体静态创建I/O资源到内核地址空间的线性映射表(即page table)的方式,这种映射表是一种一一映射

yongan1006的专栏 1396

对于Linux:动静态库的制作原理的解析—下

本文深入解析了Linux环境下编译链接的原理过程,通过通俗易懂的比喻(如"自动洗衣机vs手动洗衣机"、"买工具vs租工具")大量实操示例,系统性地讲解了从源码到可执行程序的全流程。主要内容包括: 编译四部曲:详细拆解预处理(文本替换)、编译(生成汇编)、汇编(生成目标文件)、链接(合并目标文件)每个步骤的原理操作验证。 ELF文件结构:阐释ELF头、程序头表、节头表节的关系,通过"快递盒+零件箱"的比喻说明其组织结构,并分析链接视图执行视

2503_92929084的博客 745

含大量图文解析及例程 | Linux下的ELF文件、链接、加载库(中)

可执行文件的装载进程装载的基本概念的介绍程序(可执行文件)进程的区别程序是静态的概念,它就是躺在磁盘里的一个文件。进程是动态的概念,是动态运行起来的程序。现代操作系统如何装载可执行文件给进程分配独立的虚拟地址空间将可执行文件映射到进程的虚拟地址空间(mmap)将CPU指令寄存器设置到程序的入口地址,开始执行可执行文件在装载的过程中实际上如我们所说的那样是映射的虚拟地址...

Peter的专栏 1292
上一篇: 移植加载自己的写的驱动(关键字:makefile和kconfig的编写、头文件包含)
下一篇: linux杂散知识点
VClol
博客等级 码龄9年 104粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值