Code: Select all
pushl %ebx # Push the pointer to the multiboot info struct
pushl %eax # Push the magic to be checked by the kernel
call kernel_main
Code: Select all
void kernel_main(uint32_t magic, uint32_t physaddr)
The value of physaddr is 65536 (0x10000), and since I'm working with a higher-half kernel, I convert physaddr to a virtual address as follows:
Code: Select all
multiboot_info_t *addr = (multiboot_info_t*)(physaddr + 0xC0000000);
Is it a paging problem? How could I confirm that? Is there something else I should check?