Как зарезервировать физическую память в ядре (arm64) - PullRequest
0 голосов
/ 13 июня 2018

Я хочу зарезервировать немного памяти для сохранения информации о ядре.Я скопировал функцию 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 этого не делаеткажется правильным.Без моего кода есть область 'Системная память':

100000000-20fffffff : System RAM 

Теперь с помощью Reserve_crashkernel область изменилась на:

205000000-205ffffff : Crash kernel

Я не понимаю, почему область 'Системная память'исчез, и я не уверен, что мой код правильный.

...