summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-22 02:37:42 +0200
committerMiguel <m.i@gmx.at>2018-08-22 02:37:42 +0200
commit9acb4d60a348db1bcaaba4fad44e2a7105d9c579 (patch)
treefd392dbaeeb821cd293c3f2cbf56df2dc8807757
parent59038fc67c20a1f04e5d2fd5f9a444e707d1d3ea (diff)
tss works finally (for one usertask!)
-rw-r--r--Makefile4
-rw-r--r--kernel/scheduler.c2
-rw-r--r--kernel/usermode.c16
-rw-r--r--kernel/vmem.c11
4 files changed, 17 insertions, 16 deletions
diff --git a/Makefile b/Makefile
index cde9d5d..b38f49a 100644
--- a/Makefile
+++ b/Makefile
@@ -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;