diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/exceptions.c | 1 | ||||
| -rw-r--r-- | kernel/kernel.c | 2 | ||||
| -rw-r--r-- | kernel/kernel.h | 6 | ||||
| -rw-r--r-- | kernel/kmalloc.c | 16 | ||||
| -rw-r--r-- | kernel/kmalloc.h | 7 | ||||
| -rw-r--r-- | kernel/mem.c | 7 | ||||
| -rw-r--r-- | kernel/mem.h | 1 | ||||
| -rw-r--r-- | kernel/syscalls.c | 7 | ||||
| -rw-r--r-- | kernel/vmem.c | 1 |
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; } - |
