Я пишу 32-битное ядро старшей половины, загруженное по виртуальному адресу 0xC0000000 (3GByte), и я использую структуру 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));
}