河北美丽乡村建设网站,网站建设人文环境,网站建设找睿智骄阳,图片 网站源码 采集1、前言
linux系统是不知道当前设备接了多少内存#xff0c;需要bootloader在启动时告诉linux系统感知到当前设备接了多少物理内存有两种方式 动态识别#xff08;X86架构大多是这种#xff09;#xff1a;可以插拔的内存条#xff0c;bootloader能识别出内存条的容量代码…1、前言
linux系统是不知道当前设备接了多少内存需要bootloader在启动时告诉linux系统感知到当前设备接了多少物理内存有两种方式 动态识别X86架构大多是这种可以插拔的内存条bootloader能识别出内存条的容量代码里写死ARM架构大多是这种设备的内存是贴片上去的不支持动态改变内存的容量在代码里写死系统工程师在适配程序时要根据实际物理内存容量去修改代码
2、linux系统知道实际物理内存大小的方式
设备树中可以通过/memory节点来指定内存的起始地址、大小等信息uboot启动内核时可以通过ATAG_MEM类型的struct tag结构体向内核传递内存起始地址、大小等信息uboot启动内核时可以通过ATAG_CMDLINE类型的struct tag结构体向内核传递内存起始地址、大小等信息内存信息生效的优先级ATAG_CMDLINE类型的tag ATAG_MEM类型的tag 设备树/memory节点
3、插拔的内存条
X86架构芯片在硬件上常采用插拔内存条的方式可以实现动态识别内存条的容量BIOS可以识别出内存条的容量并且在启动内核时将内存容量大小告诉内核BIOS是怎么识别出内存条大小的原理不太清楚猜测和内存插槽的硬件结构有关系有知道原理的博友欢迎在评论区交流
4、贴片的内存
采用贴片的内存的方式在嵌入式设备中是最常见的内存容量是固定死的因为内存是固定死的所以可以直接在代码里指定内存的容量。比如在uboot中指定或者在设备树中指定
5、参考资料
《linux内存管理——内存大小、起始地址的解析与修改》《设置海思芯片MMZ内存、OS内存详解》