summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.c17
-rw-r--r--kernel/mem.c5
-rw-r--r--kernel/mem.h2
-rw-r--r--kernel/vmem.c9
-rw-r--r--kernel/vmem.h2
5 files changed, 27 insertions, 8 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index bdadd45..7b29730 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -31,6 +31,7 @@
void kernel_main(uint32_t eax,uint32_t ebx)
{
+
//
// Init Console
//
@@ -57,12 +58,12 @@ void kernel_main(uint32_t eax,uint32_t ebx)
// after this is set up we will be able to allocate and deallocate
// blocks of physical memory :)
//
- mem_init(info);
+ uint32_t kernel_blocks=mem_init(info);
//
// Activate Virtual Memory (paging)
//
- pdirectory *dir=vmem_new_space_dir(NULL);
+ pdirectory *dir=vmem_init(kernel_blocks);
//
// Setup Interrupts (code segment: 0x08)
@@ -100,15 +101,23 @@ void kernel_main(uint32_t eax,uint32_t ebx)
//
// Mount Root EXT2 ramimage
//
- fs_mount(0x945000);
+
+ fs_mount(info);
//
// Initialize Multitasking
//
- task_init(dir); //; this will never return!
+
+ task_init(dir);
+
//
+ // Abvoe should never return
+ //
+
+ panic(FOOLOS_MODULE_NAME,"reached end of kernel.c !!");
}
+
diff --git a/kernel/mem.c b/kernel/mem.c
index 7c55a67..ff8e97d 100644
--- a/kernel/mem.c
+++ b/kernel/mem.c
@@ -149,7 +149,8 @@ void pmmngr_free_block (void* p)
}
-void mem_init(multiboot_information *info)
+// returns index of first block outside of kerel-land
+uint32_t mem_init(multiboot_information *info)
{
if(info->flags&&1<<6)
{
@@ -226,6 +227,8 @@ void mem_init(multiboot_information *info)
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,
"Free 4K blocks: %d (first free: %d)",mem_free_blocks,mem_min_block);
+ return mem_min_block;
+
}
diff --git a/kernel/mem.h b/kernel/mem.h
index 32b1160..c7e905e 100644
--- a/kernel/mem.h
+++ b/kernel/mem.h
@@ -2,4 +2,4 @@
#include "multiboot.h"
physical_address* pmmngr_alloc_block ();
void pmmngr_free_block (physical_address* p);
-void mem_init(multiboot_information *info);
+uint32_t mem_init(multiboot_information *info);
diff --git a/kernel/vmem.c b/kernel/vmem.c
index 491f486..a8e4008 100644
--- a/kernel/vmem.c
+++ b/kernel/vmem.c
@@ -9,6 +9,8 @@
#include "lib/logger/log.h" // logger facilities
#define FOOLOS_MODULE_NAME "vmem"
+static uint32_t kernel_pages;
+
// TODO : why is the frame not 0xfffff??
enum PAGE_PTE_FLAGS
{
@@ -255,7 +257,7 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
uint32_t virt_addr=0;
// first pages are identity mapped
- for(int j=0;j<5;j++)
+ for(int j=0;j<kernel_pages;j++)
{
// this is the table for our page directory. It maps 1024*4096 bytes
@@ -434,3 +436,8 @@ void vmem_set_dir(pdirectory *dir)
x86_set_pdbr(dir);
}
+pdirectory* vmem_init(uint32_t kernel_blocks)
+{
+ kernel_pages=kernel_blocks/1024+1;
+ return vmem_new_space_dir(NULL);
+}
diff --git a/kernel/vmem.h b/kernel/vmem.h
index 7c7ffd0..d30c7cf 100644
--- a/kernel/vmem.h
+++ b/kernel/vmem.h
@@ -34,4 +34,4 @@ typedef struct pdirectory_struct {
pd_entry m_entries[PAGES_PER_DIR];
}pdirectory;
-pdirectory* vmem_init();
+pdirectory* vmem_init(uint32_t kernel_blocks);