You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核获取可用DRAM大小位置及限制内核可用内存方法咨询

限制内核识别DRAM大小的实现方法

设备树修改方案(你当前的思路完全可行)

该方案无需修改bootloader代码,适配门槛低,修改后的内存节点只会给内核上报前4GB的可用内存,示例修改如下:

/* 修改前(总内存8GB) */
memory_0: memory@80000000 {
    device_type = "memory";
    reg = <0x0 0x80000000 0x80000000>;
};
memory@880000000 {
    device_type = "memory";
    reg = <0x00000008 0x80000000 0x80000000>;
};
memory@900000000 {
    device_type = "memory";
    reg = <0x00000009 0x00000000 0x80000000>;
};
memory@980000000 {
    device_type = "memory";
    reg = <0x00000009 0x80000000 0x80000000>;
};

/* 修改后(总内存4GB) */
memory_0: memory@80000000 {
    device_type = "memory";
    reg = <0x0 0x80000000 0x80000000>;
};
memory@880000000 {
    device_type = "memory";
    reg = <0x00000008 0x80000000 0x80000000>;
};

注意:如果LK会动态覆盖设备树的memory节点,你需要同时修改LK的相关逻辑,否则设备树的修改会被LK冲掉。

LK相关代码位置

  • LK识别DRAM大小的代码:位于平台相关初始化路径,通用路径为platform/[对应芯片平台]/memory.c中的dram_get_size()、board_get_memory_size()类函数,部分厂商定制平台会放在target/[对应设备型号]/init.c中实现DRAM探测逻辑,探测到的总内存会存入全局变量供后续调用。
  • LK向内核传递内存信息的代码:通用逻辑在app/aboot/aboot.c的update_device_tree()函数中,该函数会将LK探测到的内存信息动态写入设备树的memory节点,你也可以直接在这个函数中截断超过4GB的内存区域,无需修改静态设备树。

更简单的替代方案

不需要修改任何代码,直接在内核启动参数cmdline中添加mem=4G参数,内核启动时会自动忽略超过4GB的内存区域,适配性更高。

内容的提问来源于stack exchange,提问作者CH J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:24:00