繁体   English   中英

如何使用GRUB查询BIOS?

[英]How to query BIOS using GRUB?

我正在尝试为80386处理器制作一个小内核,主要用于学习目的,并希望获得可用RAM的完整内存映射。

我已经读过,在GRUB的帮助下,直接查询BIOS是可能的,也是更好的。

任何人都可以告诉我该怎么办?

特别是,为了在实模式下使用bios功能,我们使用bios中断并在某些寄存器中获得所需的值,当我们想要使用GRUB提供的函数时,实际的等效方式是什么?

这是我在我的内核中使用的过程(请注意,这是32位)。 在我的bootstrap程序集文件中,我告诉GRUB为我提供了一个内存映射:

.set MEMINFO,  1 << 1                   # Get memory map from GRUB

然后,GRUB为您将多引导信息结构的地址加载到ebx中(此结构包含内存映射的地址)。 然后我调用C代码来处理内存映射的实际迭代和处理。 我做这样的事情迭代地图:

/* Macro to get next entry in memory map */

#define MMAP_NEXT(m) \
            (multiboot_memory_map_t*)((uint32_t)m + m->size + sizeof(uint32_t))

void read_mmap(multiboot_info_t* mbt){

    multiboot_memory_map_t* mmap = (multiboot_memory_map_t*) mbt->mmap_addr;


    /* Iterate over memory map */

    while((uint32_t)mmap < mbt->mmap_addr + mbt->mmap_length) {

        // process the current memory map entry

        mmap = MMAP_NEXT(mmap);
    }
}

其中multiboot_info_tmultiboot_memory_map_t在Gnu multiboot.h文件中定义。 正如Andrew Medico在评论中所说, 是一个很好的链接,可以开始使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM