gpt4 book ai didi

c - 上半部分 x86 内核中的 Grub 内存映射

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:07 27 4
gpt4 key购买 nike

我正在编写加载到 0xC0000000 (3GByte) 虚拟地址的高半部分 32 位内核,并且我正在使用 multiboot_info 结构来获取物理内存映射。当我使用#1 时,我得到的第一个 mmap_addr 是 0x9000,但我无法使用 gdb 检查地址。通过命中和追踪,我写了#2,它运行得很好。我可以知道我所做的是否正确吗?它到底有多正确?谢谢。

#1
void get_mbmmap(void){
memory_map_t* mmap = (memory_map_t*)(mbinfo_addr -> mmap_addr);
while((uint32_t)mmap < mbinfo_addr->mmap_addr + mbinfo_addr->mmap_length)
mmap = (memory_map_t*)((uint32_t)mmap + mmap->size + sizeof(mmap->size));}

#2
void get_mbmmap(void){
memory_map_t* mmap = (memory_map_t*)(mbinfo_addr -> mmap_addr + 0xC0000000);
while((uint32_t)mmap < mbinfo_addr->mmap_addr + 0xC0000000 + mbinfo_addr->mmap_length)
mmap = (memory_map_t*)((uint32_t)mmap + mmap->size + sizeof(mmap->size));
}

最佳答案

回答我自己的问题:

我现在觉得很傻,因为答案很简单,我意识到我的错误。当我将我的内核移动到更高的一半时,我制作了两个页表。第一,该身份映射第一个 4MB 和一个映射第一个 4MB(物理)到 3GB(虚拟)。但是映射完成后,我将取消映射前 4MB,从而导致访问 Grub 内存映射时出现问题。

关于c - 上半部分 x86 内核中的 Grub 内存映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42454520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com