系统的物理地址空间布局(如/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设备),操作系统启动后会自动扫描总线,发现新的设备并为其分配物理地址。这种地址分配方式是动态的。
在某些情况下,固件会在系统启动时初始化新设备,并分配地址。这种情况下,地址布局会在固件阶段确定。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有