summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/exceptions.c1
-rw-r--r--kernel/kernel.c2
-rw-r--r--kernel/kernel.h6
-rw-r--r--kernel/kmalloc.c16
-rw-r--r--kernel/kmalloc.h7
-rw-r--r--kernel/mem.c7
-rw-r--r--kernel/mem.h1
-rw-r--r--kernel/syscalls.c7
-rw-r--r--kernel/vmem.c1
9 files changed, 38 insertions, 10 deletions
diff --git a/kernel/exceptions.c b/kernel/exceptions.c
index a092055..4ad87e8 100644
--- a/kernel/exceptions.c
+++ b/kernel/exceptions.c
@@ -126,7 +126,6 @@ uint32_t exception_handle(uint32_t esp, uint32_t irq)
klog("killing task in question!");
task_syscall(SYSCALL_EXIT,task_get_current_pid(),0,0);
- scheduler_wake_all();
return scheduler_run(esp,0);
}
diff --git a/kernel/kernel.c b/kernel/kernel.c
index ca82a5d..0239489 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -51,6 +51,7 @@ void kernel_main(uint32_t eax,uint32_t ebx)
// -- UNIT TESTING -- //
testing_kmalloc();
+ testing_mount();
// -- DISABLE LEGACY PIC -- //
klog("Remapping & Disabling Programmable Interrupt Controller (PIC) ...");
@@ -97,6 +98,7 @@ void kernel_main(uint32_t eax,uint32_t ebx)
// -- EXT2 RAM IMAGE -- //
klog("Check ext2 ram image ... ");
ext2_dump_info(VMEM_EXT2_RAMIMAGE);
+ ext2_mount("/");
// -- APIC -- //
klog("Advanced Programmable Interrupt Controller (APIC) config ...");
diff --git a/kernel/kernel.h b/kernel/kernel.h
index 83d89b8..e3d7590 100644
--- a/kernel/kernel.h
+++ b/kernel/kernel.h
@@ -22,12 +22,14 @@ REFERENCES
#ifndef FOOLOS_CONFIG_H
#define FOOLOS_CONFIG_H
-#define BIN_INIT "/bin/init"
-
//#define FOOLOS_UNIT_TESTING // Run Unit Tests
//#define FOOLOS_LOG_OFF // Turn off logging
//#define FOOLOS_COLORLESS // Turn off colors in log
+#define MAX_MOUNTS 10
+
+#define BIN_INIT "/bin/init"
+
#define FIFO_MAX_RINGBUFFERS 20
#define MAX_FIFOS 20
#define MAX_FD 20
diff --git a/kernel/kmalloc.c b/kernel/kmalloc.c
index 356aab0..6a7520a 100644
--- a/kernel/kmalloc.c
+++ b/kernel/kmalloc.c
@@ -116,3 +116,19 @@ void kbfree(uint32_t pos)
mark_free(blk,map[blk]);
spinlock_release(SPINLOCK_ALLOC);
}
+
+void kmalloc_sysfs(void (*f)(char *fmt, ...))
+{
+ uint32_t free=0;
+ uint32_t used=0;
+ for(int i=0;i<BLOCKS;i++)
+ {
+ if(map[i]) used++;
+ else free++;
+ }
+
+ f("kernel blocks allocation/deallocation");
+ f("total 4096kb blocks: %d (%d bytes)",BLOCKS,BLOCKS*4096);
+ f("used 4096kb blocks: %d (%d bytes)",used,used*4096);
+ f("free 4096kb blocks: %d (%d bytes)",free,free*4096);
+}
diff --git a/kernel/kmalloc.h b/kernel/kmalloc.h
index c7900c5..5ca4c8c 100644
--- a/kernel/kmalloc.h
+++ b/kernel/kmalloc.h
@@ -23,7 +23,10 @@
/** Allocate size*4096 bytes and returns a 32-bit address
* and 0 if fails.
* */
-uint32_t kballoc (uint32_t size);
+uint32_t kballoc (uint32_t size);
/** Free memory allocated before by supplying the address returned by kballoc */
-void kbfree (uint32_t addr);
+void kbfree (uint32_t addr);
+
+/** Get current status for sysfs */
+void kmalloc_sysfs(void (*f)(char *fmt, ...));
diff --git a/kernel/mem.c b/kernel/mem.c
index a77dfa4..52e08b6 100644
--- a/kernel/mem.c
+++ b/kernel/mem.c
@@ -227,3 +227,10 @@ uint32_t mem_init(multiboot_information *info)
return 0;
}
+
+void mem_sysfs(void (*f)(char *fmt, ...))
+{
+ f("physical memory manager");
+ f("free 4096kb blocks : %d",mem_free_blocks);
+ f("free bytes : %d",mem_free_blocks*4096);
+}
diff --git a/kernel/mem.h b/kernel/mem.h
index 6871e11..85fc688 100644
--- a/kernel/mem.h
+++ b/kernel/mem.h
@@ -29,3 +29,4 @@ uint32_t mem_init(multiboot_information *info);
void* mem_alloc_block ();
void mem_free_block(void* p);
uint32_t mem_get_free_blocks_count();
+void mem_sysfs(void (*f)(char *fmt, ...));
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 5205bf1..8b5040a 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -16,6 +16,7 @@
#include "scheduler.h"
#include "log.h"
#include "timer.h"
+#include "mount.h"
static fd fds[MAX_FD];
static uint32_t next_fd=0;
@@ -155,9 +156,7 @@ int syscall_read(int file, char *buf, int len)
//TODO: replace with dirent!
int syscall_readdir(const char *name,fs_dirent *dirs,int *pos)
{
- uint32_t inode = ext2_filename_to_inode(VMEM_EXT2_RAMIMAGE,name);
- if(inode==0)return 0;
- return ext2_read_dir(VMEM_EXT2_RAMIMAGE, inode, dirs, pos);
+ return mount_read_dir(name, dirs, pos);
}
// for non blocking io?
@@ -330,7 +329,7 @@ int syscall_open(char *name, int flags, int mode)
}
else
{
- fds[next_fd]=fd_from_path(name);
+ fds[next_fd]=mount_file_open(name);
if(*(uint32_t *)fds[next_fd].data==0)return -1;
}
diff --git a/kernel/vmem.c b/kernel/vmem.c
index 129ddb5..590722d 100644
--- a/kernel/vmem.c
+++ b/kernel/vmem.c
@@ -427,4 +427,3 @@ void vmem_init(multiboot_information *cfg_multiboot, acpi_information *cfg_acpi)
mod_start=mod->mod_start;
mod_end=mod->mod_end;
}
-