grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to detect the amount of RAM on non-EFI platforms?


From: Cyan
Subject: How to detect the amount of RAM on non-EFI platforms?
Date: Tue, 11 Jul 2023 10:08:19 +0800

Hi,

I am modifying GRUB for a Linux LiveOS, which boots into separate images 
depends on
how much RAM presents on the system. GRUB has a memory map initialized, so I 
think
it is relatively easy to do so.

However, I discovered this method only works on EFI systems, if I load it on 
i386-pc
(not a real i386 PC, just using BIOS to boot), the memory usage returns 0.

Here's my code[1]:

grub-core/commands/phymem.c

grub_uint64_t total_mem_bytes = 0ULL;

static int
traverse_mmap_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t 
type,
                    void *data __attribute__ ((unused)))
{
  total_mem_bytes += size;
}

grub_err_t
grub_cmd_phymem (...) {
        grub_mmap_iterate (traverse_mmap_hook, NULL);
}

Then I convert the integer into a string and export to the environment 
variables,
and print it out.

On EFI systems, I can get the correct amount of system memory:

grub> insmod phymem
grub> phymem
The total system memory is 16384 MiB.

However on BIOS systems, the result is zero:

grub> insmod phymem
grub> phymem
The total system memory is 0 MiB.

So, how can I detect the amount if RAM on non-EFI systems? If I recalled it 
right,
GRUB can boot kernels which complies with Multiboot specification, so the memory
info should be always present. If I missed something, please point it out.

Thanks,
Cinhi Young



reply via email to

[Prev in Thread] Current Thread [Next in Thread]