J'écris un noyau 32 bits plus haut chargé à l'adresse virtuelle 0xC0000000 (3GByte) et j'utilise la structure multiboot_info pour obtenir la mappe mémoire physique. Lorsque j'utilise # 1, le premier mmap_addr que j'obtiens est 0x9000 mais je ne suis pas capable d'examiner l'adresse en utilisant gdb. Par hit et trail, j'ai écrit # 2 et ça marche parfaitement. Puis-je savoir si ce que j'ai fait était correct? Et comment est-ce exact? Je vous remercie.Carte de mémoire Grub dans le noyau x86 supérieur
#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));
}