Ich schreibe einen höheren 32-Bit-Kernel geladen bei 0xC0000000 (3GByte) virtuellen Adresse und ich benutze Multiboot_info-Struktur, um die physische Speicherabbild zu erhalten. Wenn ich # 1 verwende, ist die erste mmap_addr, die ich bekomme, 0x9000, aber ich bin nicht in der Lage, die Adresse mit gdb zu untersuchen. Durch Hit und Trail schrieb ich # 2 und es funktioniert perfekt. Darf ich wissen, ob das, was ich getan habe, richtig war? Und wie genau ist es richtig? Vielen Dank.Grub Speicherabbild in höherer Hälfte x86 Kernel
#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));
}