diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/interrupts.c | 5 | ||||
| -rw-r--r-- | kernel/kernel.c | 18 | ||||
| -rw-r--r-- | kernel/kernel.h | 1 | ||||
| -rw-r--r-- | kernel/log.h | 8 | ||||
| -rw-r--r-- | kernel/mem.c | 9 | ||||
| -rw-r--r-- | kernel/mem.h | 4 | ||||
| -rw-r--r-- | kernel/syscalls.c | 7 |
7 files changed, 40 insertions, 12 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c index 94c1bb1..94eda2e 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -106,11 +106,12 @@ uint32_t interrupt_handler(uint32_t esp, uint32_t irq) */ void interrupts_init(uint16_t sel) { - klog("initializing Mouse and Kb input buffers"); + klog("Initializing Mouse and Kb input buffers"); + fixme("use a regular pipe-file"); kb_in=ringbuffer_init(1);// 4096 bytes ringbuffer; mouse_in=ringbuffer_init(1);// 4096 bytes ringbuffer; - klog("initializing. IDT: 0x%08x, IDTD: 0x%08X",&idt,&idtd); + klog("Initializing. IDT: 0x%08x, IDTD: 0x%08X",&idt,&idtd); // Default interrupt handling for(int i=0; i<INT_MAX; i++) diff --git a/kernel/kernel.c b/kernel/kernel.c index 072cebb..20bfab6 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -13,6 +13,7 @@ //-- clean below headers --// #include "sysfs.h" +#include "pipe.h" #include "testing/testing.h" #include "ext2.h" #include "apic.h" @@ -62,8 +63,8 @@ void kernel_main(uint32_t eax,uint32_t ebx) // -- GET CONFIGS -- // klog("Read Multiboot Structures ..."); multiboot_information *cfg_multiboot; - cfg_multiboot=multiboot_read(eax, ebx,false); - elf_multiboot_read(cfg_multiboot); // just show kernel section headers + cfg_multiboot=multiboot_read(eax, ebx,true); // true-silent + // elf_multiboot_read(cfg_multiboot); // just show kernel section headers klog("Read Advanced Power Configuration Interface (ACPI) Structures ..."); acpi_information cfg_acpi; @@ -96,13 +97,12 @@ void kernel_main(uint32_t eax,uint32_t ebx) x86_set_page_directory(dir); x86_paging_enable(); - // -- EXT2 RAM IMAGE -- // - klog("Check ext2 ram image ... "); + // -- MOUNTS -- // + klog("Mounting ... "); ext2_dump_info(VMEM_EXT2_RAMIMAGE); ext2_mount("/"); - - // -- MOUNT SYSFS --// - sysfs_mount("/sys/"); + sysfs_mount("/sys"); + pipe_mount("/sys/pipes"); // -- APIC -- // klog("Advanced Programmable Interrupt Controller (APIC) config ..."); @@ -111,7 +111,7 @@ void kernel_main(uint32_t eax,uint32_t ebx) // -- VESA -- // fixme("tell terminal syscall somehow if we are vga or textmode"); - klog("Video Electronics Standards Association (VESA) init ... "); // TODO check if text or fb? + klog("Video Electronics Standards Association (VESA) init ... "); // binfont has to fit in ONE ext2 block // fixme("support binfonts spanning multiple blocks?"); @@ -121,7 +121,7 @@ void kernel_main(uint32_t eax,uint32_t ebx) // -- STDIN/STDOUT -- // fixme("do not force order"); // now needed since ids are allocated 0,1,2... - klog("stdin/stdout init ..."); + klog("Streams and Pipes init ..."); uint32_t sstderr = syscall_open("~stderr",0,0); // stderr 2 uint32_t sstdout; if(cfg_multiboot->framebuffer_type==2) // EGA-standard text mode diff --git a/kernel/kernel.h b/kernel/kernel.h index e3d7590..5f21bc6 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -25,6 +25,7 @@ REFERENCES //#define FOOLOS_UNIT_TESTING // Run Unit Tests //#define FOOLOS_LOG_OFF // Turn off logging //#define FOOLOS_COLORLESS // Turn off colors in log +#define HIDE_FIXME #define MAX_MOUNTS 10 diff --git a/kernel/log.h b/kernel/log.h index 74f8776..3a8c746 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -34,7 +34,13 @@ void log(bool color,char *module_name, int prio, char *format_string, ...); #define klog(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__), 10, LOG_LABEL_INFO __VA_ARGS__) #define kpanic(...) {log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) ,0, LOG_LABEL_PANIC __VA_ARGS__ ); while(1);} + +#ifdef HIDE_FIXME +#define fixme(...) {} +#else #define fixme(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) , 10, LOG_LABEL_FIX __VA_ARGS__) +#endif + #define testlog(...) log(FOOLOS_LOG_COLOR,__FILE__ ":" S2(__LINE__) , 10,LOG_LABEL_TEST __VA_ARGS__) #endif @@ -46,4 +52,6 @@ void log(bool color,char *module_name, int prio, char *format_string, ...); #define fixme(...) {} #endif + + #endif diff --git a/kernel/mem.c b/kernel/mem.c index 97450d4..d8ac66a 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -15,6 +15,9 @@ extern uint32_t kernel_end[]; extern uint32_t stack_top[]; extern uint32_t stack_bottom[]; +// sysfs inpue +uint32_t sysfs_in=128; + //memory map bit array. Each bit represents a 4KB memory block, //so uint32_t represents 8*4 blocks static uint32_t _mmngr_memory_map[PMMNGR_MAP_SIZE]; //128KiB @@ -233,4 +236,10 @@ void mem_sysfs(ringbuffer *r, void (*f)(ringbuffer *r,char *fmt, ...)) f(r,"physical memory manager"); f(r,"free 4096kb blocks : %d",mem_free_blocks); f(r,"free bytes : %d",mem_free_blocks*4096); + f(r,"in value : 0x%08X",sysfs_in); +} + +void mem_sysfs_set(uint32_t set) +{ + sysfs_in=set; } diff --git a/kernel/mem.h b/kernel/mem.h index 5de95a9..6223f0a 100644 --- a/kernel/mem.h +++ b/kernel/mem.h @@ -27,7 +27,11 @@ * This is required for memory map et al. */ 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(ringbuffer *r, void (*f)(ringbuffer *r, char *fmt, ...)); +void mem_sysfs_set(uint32_t in); diff --git a/kernel/syscalls.c b/kernel/syscalls.c index aa20616..4f6508a 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -165,7 +165,12 @@ int syscall_read(int file, char *buf, int len) //TODO: replace with dirent! int syscall_readdir(const char *name,fs_dirent *dirs,int *pos) { - return mount_read_dir(name, dirs, pos); + int ret=mount_read_dir(name, dirs, pos); + if(ret==-1) + { + set_errno(ENOENT); + } + return ret; } // for non blocking io? |
