diff options
| author | Miguel <m.i@gmx.at> | 2018-08-22 02:37:42 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-08-22 02:37:42 +0200 |
| commit | 9acb4d60a348db1bcaaba4fad44e2a7105d9c579 (patch) | |
| tree | fd392dbaeeb821cd293c3f2cbf56df2dc8807757 | |
| parent | 59038fc67c20a1f04e5d2fd5f9a444e707d1d3ea (diff) | |
tss works finally (for one usertask!)
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | kernel/scheduler.c | 2 | ||||
| -rw-r--r-- | kernel/usermode.c | 16 | ||||
| -rw-r--r-- | kernel/vmem.c | 11 |
4 files changed, 17 insertions, 16 deletions
@@ -149,13 +149,15 @@ $(KERNEL_IMG): $(ASM_MULTIBOOT_OBJ) $(ASM_OBJECTS) $(OBJECTS) run-qemu: all #qemu-system-i386 -enable-kvm disk.img -smp 4 -s #qemu-system-i386 -enable-kvm -s -kernel foolos.img -smp 4 -initrd userspace/ext2.img - qemu-system-i386 -enable-kvm $(FOOLOS_ISO) -smp 4 -serial stdio + qemu-system-i386 -enable-kvm $(FOOLOS_ISO) -smp 4 -serial stdio run-qemu-debug: all # qemu -enable-kvm -s -S ~/temp/FoolOs/disk.img # qemu -enable-kvm -s -singlestep disk.img # qemu-system-i386 -enable-kvm -s -S -kernel foolos.img -smp 4 -initrd userspace/ext2.img qemu-system-i386 -s -S $(FOOLOS_ISO) -smp 4 -serial stdio #-enable-kvm -smp 1 +monitor: + qemu-system-i386 -s -S $(FOOLOS_ISO) -smp 4 -monitor stdio # -serial stdio #-enable-kvm -smp 1 stop-qemu: killall qemu-system-i386 diff --git a/kernel/scheduler.c b/kernel/scheduler.c index d6e2c76..3136868 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -83,7 +83,7 @@ volatile uint32_t my_scheduler(uint32_t oldesp) current_task=pid; - vmem_set_dir(task_list[pid].vmem); + x86_set_page_directory(task_list[pid].vmem); return task_list[pid].esp; } diff --git a/kernel/usermode.c b/kernel/usermode.c index bb614d0..c700a61 100644 --- a/kernel/usermode.c +++ b/kernel/usermode.c @@ -23,12 +23,20 @@ void install_tss(int cpu_no){ // now fill each value // set values necessary sys_tss.ss0 = 0x10; //kernel data - sys_tss.esp0 = kballoc(4); + sys_tss.esp0 = kballoc(4)+4095; + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"esp0 =0x%08X ",sys_tss.esp0); // now set the IO bitmap (not necessary, so set above limit) // sys_tss.iomap = ( unsigned short ) sizeof( tss_struct ); } +void initfunc() +{ + while(1) + { + c2++; + } +} void userfunc() { @@ -38,11 +46,7 @@ void userfunc() // if we are pid 0, replace ourselves with /bin/init TODO: switch to usermode before! if(task_get_current_pid()==0) { - //usermode(&initfunc); - while(1) - { - c2++; - } + usermode(&initfunc); } // kernel worker thread on pid1 diff --git a/kernel/vmem.c b/kernel/vmem.c index fb19e75..f0fb9d3 100644 --- a/kernel/vmem.c +++ b/kernel/vmem.c @@ -172,6 +172,8 @@ pt_entry* vmmngr_ptable_lookup_entry (ptable* p, virtual_addr addr) return 0; } + + void vmem_free_dir(pdirectory *dir) { x86_paging_disable(); @@ -480,20 +482,13 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir) if(copy_dir==NULL) // this happens only on init { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"initializing virtual memory (paging)"); - vmem_set_dir(dir); + x86_set_page_directory(dir); } -//while(1); x86_paging_enable(); - return dir; } -void vmem_set_dir(pdirectory *dir) -{ - x86_set_page_directory(dir); -} - pdirectory* vmem_init(uint32_t kernel_blocks, uint32_t frameb_addr) { fb_addr=frameb_addr; |
