如何使用GRUB查询BIOS



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

我已经读到,在GRUB的帮助下这样做是可能的,而且比直接查询BIOS更好。

有人能告诉我该怎么做吗?

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

这是我在内核中使用的进程(注意这是32位)。在我的引导程序汇编文件中,我告诉GRUB为我提供一个内存映射:

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

然后,GRUB将multiboot信息结构的地址加载到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);
    }
}

其中CCD_ 2和CCD_。正如Andrew Medico在评论中所说,这里有一个很好的链接,可以开始学习。

相关内容

  • 没有找到相关文章

最新更新