前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SoC系统物理地址空间布局的决定性因素

SoC系统物理地址空间布局的决定性因素

作者头像
不脱发的程序猿
发布于 2025-03-13 13:17:07
发布于 2025-03-13 13:17:07
460
举报

系统的物理地址空间布局(如/proc/iomem所展示的)是由多个因素共同决定的,主要涉及到硬件架构、板级设计(板子)、固件配置以及操作系统的设备管理方式。我们来逐步拆解这个问题。

1

物理地址空间布局由什么决定?

物理地址空间布局是由多个层面共同决定的。

不同的CPU架构(如x86、ARM)对物理地址空间有不同的规划方式。

处理器架构决定了地址空间的大小以及如何映射到内存、外设等资源。

SoC设计者会为内部模块、外设控制器(如GPIO、UART、SPI等)以及外部存储器(如DDR、Flash)预留地址范围。

这些地址往往是硬编码在硬件中的,例如某些外设的寄存器地址是固定的。

板级设计决定了如何将物理地址空间分配给板上的外设、扩展存储器等硬件资源。这里涉及到PCB上的内存、外设连接方式。

设备树文件用于描述嵌入式系统中硬件资源的具体分布,包括外设的地址映射。

这些信息最终由操作系统的设备驱动程序解释,并显示在类似/proc/iomem这样的文件中。

在系统启动时,固件负责初始化硬件,并根据系统配置将硬件资源映射到特定的物理地址空间。

例如,U-Boot初始化DDR、Flash、外设时,会设置它们在物理地址空间中的位置。

内核从固件和设备树中读取硬件布局信息,并负责管理和调度物理地址空间中的资源。

最终,这些信息会反映在/proc/iomem等内核接口中,供用户态程序查看。

2

是由板子上的什么决定的?

SoC或处理器与外设之间的连接方式决定了外设的物理地址。

例如,外部存储器(如NOR Flash、NAND Flash)和外设控制器(如GPIO、SPI)通常有固定的地址映射方式,板级电路设计会根据这些要求来布线。

设计时需要为各种外设(如UART、I2C、SPI控制器等)预留地址空间,通常这些是硬件预先定义的。

SoC的数据手册或参考手册会指定不同外设的地址范围。

例如,DDR的起始地址、外设控制器的寄存器地址等都由处理器的数据手册规定,这些通常在硬件设计阶段就确定了。

3

添加外设时的地址布局如何确定?

在嵌入式系统中,设备树描述了硬件的物理地址布局。

新添加的外设可以通过设备树文件配置,将外设的寄存器地址映射到物理地址空间的某个空闲区域。

设备树中的地址映射配置会被内核读取,并展示在/proc/iomem中。

对于可枚举的设备(如PCI设备),操作系统启动后会自动扫描总线,发现新的设备并为其分配物理地址。这种地址分配方式是动态的。

在某些情况下,固件会在系统启动时初始化新设备,并分配地址。这种情况下,地址布局会在固件阶段确定。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 美男子玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Revit二次开发小案例之喷头与管道自动连接
最近小编在使用某榄山翻喷淋的模型的时候,发现有很多的喷淋喷头和管道都没办法自动连接,而且喷淋的量比较大,因此写了一个自动喷头与管道连接的插件让其自动连接,分享一下方法和代码。
一席青衣卧龙城
2022/04/21
9730
Revit二次开发小案例之喷头与管道自动连接
这是一期Revit二次开发小案例(自动布置支吊架)
之前几期讲过很多创建实例的文章,我们这次来应用一下,平时是不是做支吊架要手工来点很麻烦呢?现在我们做一个小程序让他自动把支吊架布上吧!
一席青衣卧龙城
2022/04/21
1.3K0
这是一期Revit二次开发小案例(自动布置支吊架)
Revit二次开发——多管道线性标注(第十八期)
2020年还真的是见证历史的一年,疫情爆发,美元熔断,原油暴跌,所以是玛雅预言的2012推迟了?
一席青衣卧龙城
2022/04/21
7670
Revit二次开发——多管道线性标注(第十八期)
Revit二次开发案例之拆分梁(按照梁跨进行拆分梁打断梁)
作为2020的首篇文章,要给大家分享一篇小案例,关于梁如何拆分及自动遇柱拆分的方法。
一席青衣卧龙城
2022/04/21
2.1K0
Revit二次开发案例之拆分梁(按照梁跨进行拆分梁打断梁)
Revit二次开发之管线自动留洞(链接文件的管线自动留套管)
最近要进行管线留洞,核对施工图的留洞正确性,虽然很多插件都有这个功能,原理也很简单,无非就是创建一个洞口族或者套管族,毕竟插件要掏钱,那就自己码码代码生成一下吧。
一席青衣卧龙城
2022/04/21
6250
Revit二次开发之管线自动留洞(链接文件的管线自动留套管)
Revit二次开发案例之常规模型任意斜面创建钢筋
最近几天在研究如何创建钢筋,本来想的是在板上创建钢筋,奈何没有难度。后来在网上看见一个基坑喷锚网筋的模型,确实这个要是使用手动建模是非常费劲的,由于平时接触基坑的项目也不多,正好借此研究一下如何在倾斜的构件里创建钢筋,以备不时之需。当然以下这套方法同样适用于板钢筋的创建。
一席青衣卧龙城
2022/04/21
1.3K0
Revit二次开发案例之常规模型任意斜面创建钢筋
Revit二次开发——接触式过滤(第十七期)
这期讲一个接触式过滤选择,什么是接触式过滤选择呢?又有什么作用呢?请继续往下看……
一席青衣卧龙城
2022/04/21
5300
Revit二次开发——接触式过滤(第十七期)
Revit二次开发之创建宿主元素(门窗等)(第十四期)
Document.NewFamilyInstance Method (XYZ, FamilySymbol, Element, Level, StructuralType)
一席青衣卧龙城
2022/04/21
7710
Revit二次开发之创建宿主元素(门窗等)(第十四期)
Revit二次开发——创建楼板(第十二期)
不知道你们有多少人和小编一样天天加班4-5小时还走不了的加班狗。。。。。。最主要是。。。。。。。
一席青衣卧龙城
2022/04/21
1.3K1
Revit二次开发——创建楼板(第十二期)
Visio二次开发(二)----Shape的添加和连接
先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中就可以使用,但是有些是需要通过代码也就是二次开发来实现的!
令仔很忙
2018/09/14
9840
Visio二次开发(二)----Shape的添加和连接
Revit二次开发——创建和切换标记(第十六期)
开头先讲一个问题,平时做施工图标记的时候一根梁的标记是非常多的,所以我们会通过切换标记的形式来切换标记(如下图所示),那这在代码中是如何实现的呢?
一席青衣卧龙城
2022/04/21
9510
Revit二次开发——创建和切换标记(第十六期)
Revit二次开发模板(第三期)
本期我们就正式上手开撸Revit二次开发的代码了,小伙伴们有没有很激动啊~~~反正小编是没有啦!因为这是一个无尽的深渊,至于原因,小伙伴们自己慢慢体会吧!一起痛并快乐着。
一席青衣卧龙城
2022/04/21
7040
[工作随笔]JumpServer排坑安装及二次开发
koko是用来连接Linux服务器的跳板机,原来用python写的,现在用go重写的
DriverZeng
2022/10/31
1.3K0
VB.NET CAD二次开发环境搭建及简单示例
首先,先来了解一下objectarx或者.net DLL 与AutoCAD版本兼容问题!
办公魔盒
2019/09/24
5.4K1
VB.NET CAD二次开发环境搭建及简单示例
ZanDB基于Celery定时任务的二次开发
ZanDB早期的任务需求中,大部分都是针对servant(跑在主机上的agent)做任务调度。也就是说,一期的任务系统,满足的是在特定时刻调用特定主机执行特定的脚本,包括一天的某个时间点,一周的某个时间点,每隔多少时间执行一次调用。
用户1278550
2018/08/09
8430
网页CAD二次开发(在线CAD SDK)用到的数学库
在CAD二次开发中, 正确的使用数学库是十分重要的, 我们不需要会很多数学知识, 只要会普通的四则运算和调用mxcad提供的api即可,通过[快速入门]了解了打开图纸后,如果要对图形进行处理,就需要各种计算, mxcad提供了一些类来参与计算或者表示一些数据结构,相关的API查询如下:
梦想云图网页CAD
2024/06/20
1000
网页CAD二次开发(在线CAD SDK)用到的数学库
微服务架构中,二次浅封装实践
分布式系统中存在很多拆分的服务,在不断迭代升级的过程中,会出现如下常见的棘手情况:
知了一笑
2021/11/30
5280
微服务架构中,二次浅封装实践
React与Koa一起打造一个仿稀土掘金全栈个人博客(技术篇)
那么我们需要精简一下。注意原来的App.js我改成App.jsx。因为 React 使用 JSX 来替代常规的 JavaScript,所以用JSX比较好。
Vam的金豆之路
2021/11/30
1.5K0
React与Koa一起打造一个仿稀土掘金全栈个人博客(技术篇)
Nginx脆弱性一览表
注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。。
全栈工程师修炼指南
2022/09/29
1.1K0
Nginx脆弱性一览表
爬虫框架scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
菲宇
2019/06/12
1.8K0
爬虫框架scrapy
推荐阅读
相关推荐
Revit二次开发小案例之喷头与管道自动连接
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文