From 38b1273c7e3a52ae929f36fe07e29bc68ef95102 Mon Sep 17 00:00:00 2001 From: Miguel Date: Mon, 3 Sep 2018 00:07:20 +0200 Subject: clean filenames etc --- Makefile | 4 +++ asm/asm_gdt.h | 7 +++++ asm/asm_gdt.s | 39 ++++++++++++++++++++++++ asm/asm_mp.asm | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ asm/asm_mp.h | 2 ++ asm/gdt.h | 1 - asm/gdt.s | 42 -------------------------- asm/mp.asm | 89 ------------------------------------------------------ asm/mp.h | 2 -- kernel/gdt.c | 2 -- kernel/kernel.c | 2 +- kernel/mp.c | 5 --- kernel/scheduler.c | 33 ++++++++++++++++++++ kernel/usermode.c | 45 --------------------------- kernel/usermode.h | 0 15 files changed, 175 insertions(+), 187 deletions(-) create mode 100644 asm/asm_gdt.h create mode 100644 asm/asm_gdt.s create mode 100644 asm/asm_mp.asm create mode 100644 asm/asm_mp.h delete mode 100644 asm/gdt.h delete mode 100644 asm/gdt.s delete mode 100644 asm/mp.asm delete mode 100644 asm/mp.h delete mode 100644 kernel/usermode.c delete mode 100644 kernel/usermode.h diff --git a/Makefile b/Makefile index 75e5059..d450745 100644 --- a/Makefile +++ b/Makefile @@ -214,3 +214,7 @@ gitweb_readme: ### DOC ### doxygen: clean doxygen doxy.cfg + +## headers ## +list_headers: + find asm/ driver/ fs/ kernel/ lib/ -iname *.h -exec basename {} \; | sort | uniq -c diff --git a/asm/asm_gdt.h b/asm/asm_gdt.h new file mode 100644 index 0000000..523b783 --- /dev/null +++ b/asm/asm_gdt.h @@ -0,0 +1,7 @@ +/** + * @file + * http://wiki.osdev.org/GDT_Tutorial + */ + +/** call as asm_setup_gdt(GDT,sizeof(GDT)) */ +void asm_setup_gdt(uint32_t addr, uint32_t size) diff --git a/asm/asm_gdt.s b/asm/asm_gdt.s new file mode 100644 index 0000000..0e163fc --- /dev/null +++ b/asm/asm_gdt.s @@ -0,0 +1,39 @@ +.global asm_setup_gdt + +asm_setup_gdt: + + // re-fill gdt_descriptor with new GDT location and size + movl 4(%esp),%eax + movl %eax, gdt_descriptor+2 + + movw 8(%esp),%ax + movw %ax, gdt_descriptor + // + + lgdt gdt_descriptor #load new descriptor table! + + // reload to take effect + reloadSegments: + + #Reload CS register containing code selector: + jmp $0x08,$reload_CS # 0x08 points at the new code selector + + reload_CS: + mov $0x10, %ax #0x10 points at the new data selector + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + mov %ax, %ss + + tss_flush: + + movw $0x2B,%ax # Load the index of our TSS structure - The index is + # 0x28, as it is the 5th selector and each is 8 bytes + # long, but we set the bottom two bits (making 0x2B) + # so that it has an RPL of 3, not zero. + ltr %ax # Load 0x2B into the task state register. + + ret + +ret diff --git a/asm/asm_mp.asm b/asm/asm_mp.asm new file mode 100644 index 0000000..f0eb9c0 --- /dev/null +++ b/asm/asm_mp.asm @@ -0,0 +1,89 @@ +global smp_start +extern smp_main +; master boot record for application processors +;[org 0x7000] +smp_start: +[bits 16] + + cli ;switch off interrupts! + lgdt [gdt_descriptor] ;load descriptor table! + + ;switch on 32-bit protected mode + mov eax, cr0 + or eax,0x1 + mov cr0, eax + + jmp 0x8:init_pm + +[bits 32] + + +LLOCK: dd 0 + +init_pm: + + mov ax, 0x10 + mov ds, ax + mov ss, ax + mov es, ax + mov fs, ax + mov gs, ax + + mov ebp, 0x8000 + mov esp, ebp + + call boot_32_pm ;continue booting in 32-bit protected mode + +boot_32_pm: + hlt + jmp boot_32_pm + + ;mov eax, 1 ; semaphore + ;xchg eax, [LLOCK] + ;cmp eax,1 + ;hlt + ;je $ + ;jmp $ ; loop forever here + + ;call [0x8010] ;kernel_ap ;jump into our Kernel! + call smp_main + + jmp $ ; should never be reached + + +gdt_start: + +gdt_null: ;null descriptor (2 x 4 bytes) + dd 0x0 + dd 0x0 + +gdt_code: + ; flags: + ; present: 1 / privilege: 00 / type: 1 + ; code: 1 / conforming: 0 / readable: 1 / accessed: 0 + ; granularity: 1 / 16-bit default: 1 / 64-bit seg: 0 / AVL: 0 + dw 0xffff ;limit + dw 0x0 ;base + db 0x0 ;base + db 10011010b ;flags + db 11001111b ;flags & seg.limit + db 0x0 ;base + +gdt_data: + ; flags: + ; code: 0 / expand down: 0 / writable: 1 / accessed: 0 + dw 0xffff + dw 0x0 + db 0x0 + db 10010010b + db 11001111b + db 0x0 + +gdt_end: + +gdt_descriptor: + dw gdt_end-gdt_start-1 + dd gdt_start + +CODE_SEG equ gdt_code - gdt_start +DATA_SEG equ gdt_data - gdt_start diff --git a/asm/asm_mp.h b/asm/asm_mp.h new file mode 100644 index 0000000..3ace14a --- /dev/null +++ b/asm/asm_mp.h @@ -0,0 +1,2 @@ +/** Application processors */ +void smp_start(); diff --git a/asm/gdt.h b/asm/gdt.h deleted file mode 100644 index f5bcbd3..0000000 --- a/asm/gdt.h +++ /dev/null @@ -1 +0,0 @@ -void asm_setup_gdt(uint32_t addr, uint32_t size) diff --git a/asm/gdt.s b/asm/gdt.s deleted file mode 100644 index c155ce9..0000000 --- a/asm/gdt.s +++ /dev/null @@ -1,42 +0,0 @@ -//http://wiki.osdev.org/GDT_Tutorial -.global asm_setup_gdt -//.global tss_flush - -// call as setup_gdt(GDT,sizeof(GDT)) -asm_setup_gdt: - - // re-fill gdt_descriptor with new GDT location and size - movl 4(%esp),%eax - movl %eax, gdt_descriptor+2 - - movw 8(%esp),%ax - movw %ax, gdt_descriptor - // - - lgdt gdt_descriptor #load new descriptor table! - - // reload to take effect - reloadSegments: - - #Reload CS register containing code selector: - jmp $0x08,$reload_CS # 0x08 points at the new code selector - - reload_CS: - mov $0x10, %ax #0x10 points at the new data selector - mov %ax, %ds - mov %ax, %es - mov %ax, %fs - mov %ax, %gs - mov %ax, %ss - - tss_flush: - - movw $0x2B,%ax # Load the index of our TSS structure - The index is - # 0x28, as it is the 5th selector and each is 8 bytes - # long, but we set the bottom two bits (making 0x2B) - # so that it has an RPL of 3, not zero. - ltr %ax # Load 0x2B into the task state register. - - ret - -ret diff --git a/asm/mp.asm b/asm/mp.asm deleted file mode 100644 index f0eb9c0..0000000 --- a/asm/mp.asm +++ /dev/null @@ -1,89 +0,0 @@ -global smp_start -extern smp_main -; master boot record for application processors -;[org 0x7000] -smp_start: -[bits 16] - - cli ;switch off interrupts! - lgdt [gdt_descriptor] ;load descriptor table! - - ;switch on 32-bit protected mode - mov eax, cr0 - or eax,0x1 - mov cr0, eax - - jmp 0x8:init_pm - -[bits 32] - - -LLOCK: dd 0 - -init_pm: - - mov ax, 0x10 - mov ds, ax - mov ss, ax - mov es, ax - mov fs, ax - mov gs, ax - - mov ebp, 0x8000 - mov esp, ebp - - call boot_32_pm ;continue booting in 32-bit protected mode - -boot_32_pm: - hlt - jmp boot_32_pm - - ;mov eax, 1 ; semaphore - ;xchg eax, [LLOCK] - ;cmp eax,1 - ;hlt - ;je $ - ;jmp $ ; loop forever here - - ;call [0x8010] ;kernel_ap ;jump into our Kernel! - call smp_main - - jmp $ ; should never be reached - - -gdt_start: - -gdt_null: ;null descriptor (2 x 4 bytes) - dd 0x0 - dd 0x0 - -gdt_code: - ; flags: - ; present: 1 / privilege: 00 / type: 1 - ; code: 1 / conforming: 0 / readable: 1 / accessed: 0 - ; granularity: 1 / 16-bit default: 1 / 64-bit seg: 0 / AVL: 0 - dw 0xffff ;limit - dw 0x0 ;base - db 0x0 ;base - db 10011010b ;flags - db 11001111b ;flags & seg.limit - db 0x0 ;base - -gdt_data: - ; flags: - ; code: 0 / expand down: 0 / writable: 1 / accessed: 0 - dw 0xffff - dw 0x0 - db 0x0 - db 10010010b - db 11001111b - db 0x0 - -gdt_end: - -gdt_descriptor: - dw gdt_end-gdt_start-1 - dd gdt_start - -CODE_SEG equ gdt_code - gdt_start -DATA_SEG equ gdt_data - gdt_start diff --git a/asm/mp.h b/asm/mp.h deleted file mode 100644 index 3ace14a..0000000 --- a/asm/mp.h +++ /dev/null @@ -1,2 +0,0 @@ -/** Application processors */ -void smp_start(); diff --git a/kernel/gdt.c b/kernel/gdt.c index 562fbd5..d1ed382 100644 --- a/kernel/gdt.c +++ b/kernel/gdt.c @@ -2,8 +2,6 @@ #include "kernel/kernel.h" #include "kernel/gdt.h" -#include "usermode.h" - #include #define GDT_SIZE 6 diff --git a/kernel/kernel.c b/kernel/kernel.c index 9381091..7058a8a 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -58,7 +58,7 @@ void kernel_main(uint32_t eax,uint32_t ebx) // https://wiki.osdev.org/Symmetric_Multiprocessing klog("Symmetric Multi Processing (SMP) start ... "); smp_log_procdata(&procdata); - smp_start_aps(&procdata); + //smp_start_aps(&procdata); klog("Vritual Memory / Paging init ... "); pdirectory *dir=vmem_init(kernel_blocks,(uint32_t)info->framebuffer_addr); diff --git a/kernel/mp.c b/kernel/mp.c index e03f224..5cd58ac 100644 --- a/kernel/mp.c +++ b/kernel/mp.c @@ -1,13 +1,10 @@ #include "kernel/kernel.h" - #include #include "asm/x86.h" #include "smp.h" - - typedef struct mp_fps_struct { uint32_t sig; //signature "_MP_" @@ -49,8 +46,6 @@ typedef struct mp_config_struct }mp_config; - - typedef struct proc_struct { uint8_t type; //0=processor diff --git a/kernel/scheduler.c b/kernel/scheduler.c index cfd0fcd..5316438 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -292,3 +292,36 @@ volatile void task_set_brk(uint32_t brk) { task_list[current_task].brk=brk; } + +void userfunc() +{ + + // we need enable here again (since the pushed eflags have it disabled)! + x86_sti(); + + // if we are pid 0, replace ourselves with /bin/init and enter usermode + if(task_get_current_pid()==0) + { + uint32_t alloc; + uint32_t entry_global=load_elf(BIN_INIT,&alloc); + task_set_brk(alloc); + asm_usermode(entry_global); + } + + // kernel worker thread: SLEEPER + if(task_get_current_pid()==1) + { + while(1) + { + __asm__("hlt"); + } + } + + // kernel worker thread: SYSCALL CHECKER + if(task_get_current_pid()==2) + { + task_syscall_worker(); + } +} + + diff --git a/kernel/usermode.c b/kernel/usermode.c deleted file mode 100644 index ee8b9db..0000000 --- a/kernel/usermode.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "usermode.h" - -#include "syscalls.h" -#include "kmalloc.h" - -#include "asm/usermode.h" -#include "asm/x86.h" -#include "scheduler.h" -#include "kernel.h" -#include "fs/elf.h" - -#include - -void userfunc() -{ - - // we need enable here again (since the pushed eflags have it disabled)! - x86_sti(); - - // if we are pid 0, replace ourselves with /bin/init and enter usermode - if(task_get_current_pid()==0) - { - uint32_t alloc; - uint32_t entry_global=load_elf(BIN_INIT,&alloc); - task_set_brk(alloc); - asm_usermode(entry_global); - } - - // kernel worker thread: SLEEPER - if(task_get_current_pid()==1) - { - while(1) - { - __asm__("hlt"); - } - } - - // kernel worker thread: SYSCALL CHECKER - if(task_get_current_pid()==2) - { - task_syscall_worker(); - } -} - - diff --git a/kernel/usermode.h b/kernel/usermode.h deleted file mode 100644 index e69de29..0000000 -- cgit v1.2.3