modified some syscall code in rlibc, fs stuff
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "gdt.h"
|
||||
#include "scheduler.h"
|
||||
#include "common.h"
|
||||
#include "initrd.h"
|
||||
|
||||
#include <lib/print.h>
|
||||
#include <lib/stream.h>
|
||||
@@ -23,15 +24,32 @@
|
||||
extern char __kernel_start;
|
||||
extern char __kernel_end;
|
||||
|
||||
void first_task() {
|
||||
kprintf("task started\n");
|
||||
int i = 5;
|
||||
while (i--) {
|
||||
sleep(1000);
|
||||
kprintf("task awake [%d]\n", i);
|
||||
void parse_multiboot_modules(uint32_t mbi_vaddr) {
|
||||
// find where grub put the boot module containing initrd
|
||||
multiboot_info* mbi = (multiboot_info*)mbi_vaddr;
|
||||
|
||||
uint32_t mod_count = mbi->mods_count;
|
||||
multiboot_module_t* mod = (multiboot_module_t*)((uint32_t)mbi->mods_addr + 0xC0000000);
|
||||
|
||||
kprintf("found %d mods starting @ [v]0x%x\n", mod_count, (uint32_t)mod);
|
||||
|
||||
for (uint32_t i = 0; i < mod_count; i++) {
|
||||
uint32_t start = mod[i].mod_start;
|
||||
uint32_t end = mod[i].mod_end;
|
||||
uint32_t cmdline = mod[i].cmdline;
|
||||
|
||||
multiboot_module_info_table[i].mod_start = start + 0xC0000000;
|
||||
multiboot_module_info_table[i].mod_end = end + 0xC0000000;
|
||||
multiboot_module_info_table[i].cmdline = cmdline + 0xC0000000;
|
||||
}
|
||||
kprintf("exiting\n");
|
||||
exit();
|
||||
}
|
||||
|
||||
void load_initrd() {
|
||||
multiboot_module_t* initrd_module = &multiboot_module_info_table[0];
|
||||
kprintf("initrd found @ [v] 0x%x\n", initrd_module->mod_start);
|
||||
kprintf("reading initrd\n");
|
||||
|
||||
parse_cpio((void*)initrd_module->mod_start);
|
||||
}
|
||||
|
||||
void kmain(uint32_t magic, multiboot_info* mbi) {
|
||||
@@ -53,16 +71,13 @@ void kmain(uint32_t magic, multiboot_info* mbi) {
|
||||
|
||||
init_page_tables();
|
||||
|
||||
parse_multiboot_modules((uint32_t)mbi);
|
||||
|
||||
load_initrd();
|
||||
|
||||
kprintf("basic initializations complete\n");
|
||||
|
||||
disable_interrupts(); // just paranoid... do it again
|
||||
init_scheduler();
|
||||
enable_interrupts();
|
||||
|
||||
create_task((uint32_t)first_task, fetch_cr3());
|
||||
|
||||
while(1) {
|
||||
sleep(5000);
|
||||
kprintf("kernel awake\n");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user