summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-11 00:33:28 +0200
committerMiguel <m.i@gmx.at>2018-09-11 00:33:28 +0200
commit75f0977e41004511bd475ee75a24fd04db4ddc39 (patch)
treef0062b01f1f57c31be007c2c01b580a2081e399b /kernel
parenta7ca82133bcb8139bb9d11aa717657ef42ab6cfe (diff)
little cleanup vmem, parse kernel section headers
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.c10
-rw-r--r--kernel/kernel.h2
-rw-r--r--kernel/multiboot.c2
-rw-r--r--kernel/scheduler.c6
-rw-r--r--kernel/smp.c8
-rw-r--r--kernel/vmem.c8
-rw-r--r--kernel/vmem.h4
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();