diff options
| author | Miguel <m.i@gmx.at> | 2018-09-11 00:33:28 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-11 00:33:28 +0200 |
| commit | 75f0977e41004511bd475ee75a24fd04db4ddc39 (patch) | |
| tree | f0062b01f1f57c31be007c2c01b580a2081e399b /kernel | |
| parent | a7ca82133bcb8139bb9d11aa717657ef42ab6cfe (diff) | |
little cleanup vmem, parse kernel section headers
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel.c | 10 | ||||
| -rw-r--r-- | kernel/kernel.h | 2 | ||||
| -rw-r--r-- | kernel/multiboot.c | 2 | ||||
| -rw-r--r-- | kernel/scheduler.c | 6 | ||||
| -rw-r--r-- | kernel/smp.c | 8 | ||||
| -rw-r--r-- | kernel/vmem.c | 8 | ||||
| -rw-r--r-- | kernel/vmem.h | 4 |
7 files changed, 22 insertions, 18 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c index ccc7446..ad09360 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -27,6 +27,7 @@ #include "smp.h" #include "fs/fs.h" +#include "fs/elf.h" #include "kmalloc.h" #include "driver/vesa.h" #include "asm_pit.h" @@ -59,9 +60,11 @@ void kernel_main(uint32_t eax,uint32_t ebx) klog("Read Advanced Power Configuration Interface (ACPI) Structures ..."); acpi_information cfg_acpi; bool acpi_found=acpi_fill(&cfg_acpi); - fixme("try to read (legacy) multiprocessor mp strucutres (see: xxx/mp.c)"); + fixme("Try to read (legacy) multiprocessor mp strucutres as well (see: xxx/mp.c)"); if(!acpi_found) kpanic("We Currently rely on ACPI Structures Sorry!"); + elf_multiboot_read(cfg_multiboot); + // -- GDT -- // klog("Global Descriptor Table (GDT) init ..."); gdt_init(); @@ -88,10 +91,7 @@ void kernel_main(uint32_t eax,uint32_t ebx) fixme("write convenneint management funcs as: mapCPU, mapKErnel, map USerspace.."); fixme("move stack and guard with empty pages!"); - vmem_init(0, // this is hardcoded to first 32megs anyway - (uint32_t)cfg_multiboot->framebuffer_addr, - cfg_acpi.local_apic_address, - cfg_acpi.io_apic_address); + vmem_init(cfg_multiboot,&cfg_acpi); struct pdirectory_struct *dir=vmem_kernel_dir(); x86_set_page_directory(dir); diff --git a/kernel/kernel.h b/kernel/kernel.h index d175965..0949b68 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -31,7 +31,7 @@ #ifndef FOOLOS_LOG_OFF #define kpanic(...) {log(FOOLOS_LOG_COLOR,__FILE__,0," \033[41;37m [KERNEL PANIC] \033[37;40m " __VA_ARGS__ ); while(1);} #define klog(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__), 10, __VA_ARGS__) -#define fixme(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) "[FIXME]:" , 10, __VA_ARGS__) +#define fixme(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) "[FIXME/TODO]:" , 10, __VA_ARGS__) #endif #ifdef FOOLOS_LOG_OFF diff --git a/kernel/multiboot.c b/kernel/multiboot.c index ada9a4e..62583b2 100644 --- a/kernel/multiboot.c +++ b/kernel/multiboot.c @@ -41,7 +41,7 @@ multiboot_information* multiboot_read(uint32_t eax, uint32_t ebx, bool silent) if(info->flags&&1<<5) { - klog("[4/5] ELF table: %d entries (sized %d) at 0x%08X",info->syms[0],info->syms[1],info->syms[2]); + klog("[4/5] ELF table: %d entries (sized %d) at 0x%08X with strings at %d",info->syms[0],info->syms[1],info->syms[2],info->syms[3]); } if(info->flags&&1<<6) diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 19e670f..751cff9 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -158,8 +158,8 @@ void task_syscall_worker() // volatile uint32_t my_scheduler(uint32_t oldesp,uint32_t force_pid) { - uint32_t *apic_id=0x8000000; - klog("scheduler 0x%x",*apic_id); // TODO: do not log we are inisde an interrupt!! + uint32_t *apic_id=0x8000000; //TODO: test cpu private pages + //klog("scheduler 0x%x",*apic_id); // TODO: do not log we are inisde an interrupt!! // static bool first=true; @@ -329,5 +329,3 @@ void userfunc() task_syscall_worker(); } } - - diff --git a/kernel/smp.c b/kernel/smp.c index 084f730..1b1659b 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -12,6 +12,7 @@ #include "asm_pit.h" #include "asm_smp.h" #include "apic.h" +#include "vesa.h" void smp_main() @@ -40,7 +41,6 @@ void kernel_ap() uint32_t *cpu_mem=0x8000000; //1024 pages from here on are mapped per cpu for testing! TODO: dynamic! *cpu_mem=apic_id(); - klog("%x",*cpu_mem); klog("Setup the LAPIC Timer on CPU with lapic_id=0x%x ...",apic_id()); apic_init_timer(1);// freq 1HZ @@ -50,7 +50,11 @@ void kernel_ap() asm_smp_unlock(); - while(1)asm("hlt"); +// cpu_mem[1]=0; + while(1){ + PutString("cpu cnt: %d",10,10+(*cpu_mem)*20,0xff0000,cpu_mem[1]++); + asm("hlt"); + } } // this will start all our application processors! diff --git a/kernel/vmem.c b/kernel/vmem.c index c18b0a2..b12b3b8 100644 --- a/kernel/vmem.c +++ b/kernel/vmem.c @@ -716,10 +716,10 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir,bool stack_only) return dir; } -void vmem_init(uint32_t kernel_blocks, uint32_t frameb_addr, uint32_t apic_ad, uint32_t ioapic_ad) +void vmem_init(multiboot_information *cfg_multiboot, acpi_information *cfg_acpi) { fixme("do not share fb_addr with syscalls like that!"); - fb_addr=frameb_addr; - apic_addr=apic_ad; - io_apic_addr=ioapic_ad; + fb_addr=cfg_multiboot->framebuffer_addr; + apic_addr=cfg_acpi->local_apic_address; + io_apic_addr=cfg_acpi->io_apic_address; } diff --git a/kernel/vmem.h b/kernel/vmem.h index d6a6fe9..6bc1394 100644 --- a/kernel/vmem.h +++ b/kernel/vmem.h @@ -48,10 +48,12 @@ */ #include <stdint.h> +#include "multiboot.h" +#include "acpi.h" struct pdirectory_struct; -void vmem_init(uint32_t kernel_blocks,uint32_t fb_addr,uint32_t apic_addr, uint32_t ioapic_addr); +void vmem_init(multiboot_information *cfg_multiboot, acpi_information *cfg_acpi); void vmem_free_dir(struct pdirectory_struct *dir); struct pdirectory_struct* vmem_new_space_dir(struct pdirectory_struct *copy_dir,bool stack_only); struct pdirectory_struct* vmem_kernel_dir(); |
