Exemplo n.º 1
0
Arquivo: main.c Projeto: s0lder/os
void k_main(multiboot_info_t *mbd, unsigned int magic) {
    if(magic != MULTIBOOT_BOOTLOADER_MAGIC) {
        return;
    }
    init_early_console();
#if 0
    if(!(mbd->flags & 0x01)) {
        kprint("The bootloader isn't giving us any memory information\n");
        kprint("Terminating execution!\n");
    }
#endif
    size_t kernel_size = &kernel_end - &kernel_start;
    kprint("Loaded at: ");
    kprint_hex(&kernel_start, 8);
    kprint("\n");
    kprint("Kernel size: ");
    kprint_hex(kernel_size, 8);
    kprint(" Bytes\n");
#if 0
    init_page_frame_map(mbd->mem_lower + mbd->mem_upper);
    if(mbd->flags & (1 << 6)) {
        multiboot_memory_map_t *mmap = (multiboot_memory_map_t *) mbd->mmap_addr; 
        while((uintptr_t) mmap < mbd->mmap_addr + mbd->mmap_length) {
            if(mmap->type != 1) {
                for(uint64_t i = 0; i < mmap->len; i += PAGE_SIZE) {
                    if(mmap->addr + i > 0xFFFFFFFF) {
                        break;
                    }
                    mark_frame((mmap->addr + i) & 0xFFFFF000);
                }
            }
            mmap = (multiboot_memory_map_t *) ((uintptr_t) mmap + mmap->size + sizeof(uintptr_t));
        }
    }
    init_paging();
    // Let's just not allocate low memory
    for(uintptr_t addr = 0; addr < kmalloc_ptr; addr += PAGE_SIZE) {
        mark_frame(addr);
    }
#endif
}
Exemplo n.º 2
0
Arquivo: main.c Projeto: pefoley2/os
void k_main(multiboot_info_t *mbd, unsigned int magic) {
    if(magic != MULTIBOOT_BOOTLOADER_MAGIC) {
        return;
    }
    init_early_console();
    if(!(mbd->flags & 0x01)) {
        kprint("The bootloader isn't giving us any memory information\n");
        kprint("Terminating execution!\n");
    }
    kprint("Kernel size: ");
    kprint_hex((&kernel_end - &kernel_start) * sizeof(int), 8);
    kprint(" Bytes\n");
    
    init_physpage_map();
    parse_mb_map(mbd);
}