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 | |
| parent | a7ca82133bcb8139bb9d11aa717657ef42ab6cfe (diff) | |
little cleanup vmem, parse kernel section headers
| -rw-r--r-- | README.md | 3 | ||||
| -rw-r--r-- | fs/elf.c | 19 | ||||
| -rw-r--r-- | fs/elf.h | 2 | ||||
| -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 |
10 files changed, 45 insertions, 19 deletions
@@ -98,8 +98,9 @@ Discontinued Features Todos ----- +* Mouse & KB processing in seperate task. +* Kernel Stuff Reentrancy & Newlib Reeentrancy Struct * Unit Tests -* Newlib Reeentrancy Struct * Ethernet driver E1000 / NS2000 & Networking stack (ipxe network drivers?) * Porting (ncurses, gcc, binutils, vim, apache...) * Posix getdents @@ -65,6 +65,25 @@ typedef struct { } Elf32_Phdr; +void elf_multiboot_read(multiboot_information *info) +{ + uint32_t num=info->syms[0]; + uint32_t addr=info->syms[2]; + uint32_t stridx=info->syms[3]; + + klog("ELF Kernel Sections:"); + // iterate over section headers. + Elf32_Shdr *shdr=addr; + for(int i=0;i<num;i++) + { + uint32_t nameidx=shdr[i].sh_name; + char *name=shdr[stridx].sh_addr+nameidx; + klog("section %d: %s addr: 0x%08X offset: 0x%08X size: 0x%08X",i,name,shdr[i].sh_addr,shdr[i].sh_offset,shdr[i].sh_size); + + + } +} + // returns elf entry point uint32_t load_elf(char *name, uint32_t *alloc) { @@ -1 +1,3 @@ +//https://docs.oracle.com/cd/E19455-01/806-3773/elf-2/index.html uint32_t load_elf(char *name, uint32_t *alloc); +void elf_multiboot_read(multiboot_information *info); 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(); |
