如何在内核中保留物理内存(arm64)

时间:2018-06-13 11:18:29

标签: memory-management kernel arm64

我想保留一些内存来保存内核信息。我将reserve_crashkernel函数复制到arm64并对其进行了修改:

/* 16M alignment for crash kernel regions */
#define CRASH_ALIGN     (16 << 20)
/* Location of the reserved area for the crash kernel */
struct resource crashk_res = {
    .name  = "Crash kernel",
    .start = 0,
    .end   = 0,
    .flags = IORESOURCE_MEM
};

static void __init reserve_crashkernel(void)
{
    unsigned long long crash_size, crash_base, total_mem;
    int ret;

    crash_size = CRASH_ALIGN;

    total_mem = memblock_phys_mem_size();

    pr_info("crashkernel find memory %x - %llx.\n", CRASH_ALIGN, memblock_end_of_DRAM());
    crash_base = memblock_find_in_range(CRASH_ALIGN, memblock_end_of_DRAM(),
                        crash_size, CRASH_ALIGN);
    if (!crash_base) {
        pr_info("crashkernel reservation failed - No suitable area found.\n");
        return;
    }

    ret = memblock_reserve(crash_base, crash_size);
    if (ret) {
        pr_err("%s: Error reserving crashkernel memblock.\n", __func__);
        return;
    }

    pr_info("Reserving %ldMB of memory at %ldMB for crashkernel (System RAM: %ldMB)\n",
        (unsigned long)(crash_size >> 20),
        (unsigned long)(crash_base >> 20),
        (unsigned long)(total_mem >> 20));

    crashk_res.start = crash_base;
    crashk_res.end   = crash_base + crash_size - 1;
    insert_resource(&iomem_resource, &crashk_res);
}

当内核启动时,我可以找到这样的内核打印:

[    0.000000] crashkernel find memory 1000000 - 210000000.
[    0.000000] Reserving 16MB of memory at 8272MB for crashkernel (System RAM: 8190MB)

但/ proc / iomem看起来不对。没有我的代码就有一个'System RAM'区域:

100000000-20fffffff : System RAM 

现在使用reserve_crashkernel,区域更改为:

205000000-205ffffff : Crash kernel

我不知道为什么'System RAM'区域消失了,我不确定我的代码是否正确。

0 个答案:

没有答案