process #9
@@ -14,7 +14,7 @@ The basics that I'm targeting are:
|
||||
### Basic utility of what we call a "kernel"
|
||||
|
||||
- Fix terminal driver (backspace issues, scrolling) OR add Flanterm or equivalent
|
||||
- Implement tasks, and task switching
|
||||
- Implement tasks, and task switching + context switching and spinlock acquire/release
|
||||
- Load an executable
|
||||
- Filesystem (TAR for read-only initfs, then maybe read-write using FAT12/16/32 or easier fs) w/ VFS layer
|
||||
- Getting to userspace (syscalls)
|
||||
|
||||
30
src/config.h
Normal file
30
src/config.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief PepperOS configuration file
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
/* version */
|
||||
#define PEPPEROS_VERSION_MAJOR "0"
|
||||
#define PEPPEROS_VERSION_MINOR "0"
|
||||
#define PEPPEROS_VERSION_PATCH "1"
|
||||
|
||||
/* process */
|
||||
#define PROCESS_NAME_MAX 64
|
||||
#define PROCESS_STACK_SIZE 0x10000 // 64kb
|
||||
|
||||
/* kernel */
|
||||
#define KERNEL_BASE 0xFFFFFFFF80000000ULL
|
||||
// 2 MB should be enough (as of now, the whole kernel ELF is around 75kb)
|
||||
#define KERNEL_SIZE 0x200000
|
||||
|
||||
/* heap */
|
||||
#define KHEAP_SIZE (16*1024*1024)
|
||||
|
||||
/* term */
|
||||
#define TERM_HISTORY_MAX_LINES 256
|
||||
|
||||
#endif
|
||||
@@ -1,4 +1,8 @@
|
||||
; Assembly stub for the IDT
|
||||
;
|
||||
; @author xamidev <xamidev@riseup.net>
|
||||
; @brief Stub for Interrupt Descriptor Table handlers
|
||||
; @license GPL-3.0-only
|
||||
;
|
||||
|
||||
bits 64
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Interrupt Descriptor Table setup and dispatching
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include "idt.h"
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Interrupt Descriptor Table setup and dispatching
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef IDT_H
|
||||
#define IDT_H
|
||||
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
// PS/2 Keyboard support
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief PS/2 Keyboard driver
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include "io/serial/serial.h"
|
||||
#include "ps2.h"
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief PS/2 Keyboard driver
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef PS2_H
|
||||
#define PS2_H
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Debug serial driver
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include <kernel.h>
|
||||
#include "serial.h"
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Debug serial driver
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef SERIAL_H
|
||||
#define SERIAL_H
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Framebuffer-based terminal driver
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
// Terminal output
|
||||
/*
|
||||
There are a couple of bugs here and there but for now I don't care too much
|
||||
@@ -10,6 +16,7 @@ because this shitty implementation will be replaced one day by Flanterm
|
||||
#include <kernel.h>
|
||||
#include "term.h"
|
||||
#include "mem/misc/utils.h"
|
||||
#include "config.h"
|
||||
|
||||
extern struct boot_context boot_ctx;
|
||||
|
||||
@@ -37,7 +44,7 @@ static Cursor cursor = {0, 0};
|
||||
static uint8_t* fb;
|
||||
static struct limine_framebuffer* framebuffer;
|
||||
|
||||
uint8_t lines_length[MAX_LINES];
|
||||
uint8_t lines_length[TERM_HISTORY_MAX_LINES];
|
||||
|
||||
static inline size_t term_max_cols(void)
|
||||
{
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Framebuffer-based terminal driver
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef TERM_H
|
||||
#define TERM_H
|
||||
|
||||
|
||||
10
src/kernel.h
10
src/kernel.h
@@ -1,10 +1,12 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Kernel global macros
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef KERNEL_H
|
||||
#define KERNEL_H
|
||||
|
||||
#define PEPPEROS_VERSION_MAJOR "0"
|
||||
#define PEPPEROS_VERSION_MINOR "0"
|
||||
#define PEPPEROS_VERSION_PATCH "1"
|
||||
|
||||
enum ErrorCodes
|
||||
{
|
||||
ENOMEM,
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief PepperOS kernel entry point
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <limine.h>
|
||||
@@ -16,6 +22,7 @@
|
||||
#include "mem/heap/kheap.h"
|
||||
#include "sched/process.h"
|
||||
#include "sched/scheduler.h"
|
||||
#include "config.h"
|
||||
|
||||
// Limine version used
|
||||
__attribute__((used, section(".limine_requests")))
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Global Descriptor Table (for legacy reasons)
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include "gdt.h"
|
||||
#include <stdint.h>
|
||||
#include "io/serial/serial.h"
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Global Descriptor Table (for legacy reasons)
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef GDT_H
|
||||
#define GDT_H
|
||||
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Kernel heap
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include "kheap.h"
|
||||
#include "mem/paging/paging.h"
|
||||
#include "mem/paging/pmm.h"
|
||||
#include <stddef.h>
|
||||
#include <kernel.h>
|
||||
#include "sched/process.h"
|
||||
#include "config.h"
|
||||
|
||||
extern uint64_t kernel_phys_base;
|
||||
extern uint64_t kernel_virt_base;
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Kernel heap
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef KHEAP_H
|
||||
#define KHEAP_H
|
||||
|
||||
@@ -6,9 +12,6 @@
|
||||
// When the kernel heap is ready, we can alloc our VM object linked list
|
||||
// and then continue working on the VMM.
|
||||
|
||||
// 16MB should be enough for some linked lists
|
||||
#define KHEAP_SIZE (16*1024*1024)
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Common memory utilities
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <limine.h>
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Common memory utilities
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef MEM_UTILS_H
|
||||
#define MEM_UTILS_H
|
||||
|
||||
@@ -8,6 +14,7 @@ void* memset(void* s, int c, size_t n);
|
||||
void* memmove(void *dest, const void* src, size_t n);
|
||||
int memcmp(const void* s1, const void* s2, size_t n);
|
||||
|
||||
// DEBUG
|
||||
void memmap_display(struct limine_memmap_response* response);
|
||||
void hhdm_display(struct limine_hhdm_response* hhdm);
|
||||
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief x64 4-level paging implementation
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include "paging.h"
|
||||
#include "pmm.h"
|
||||
#include <kernel.h>
|
||||
#include <stddef.h>
|
||||
#include <limine.h>
|
||||
#include "config.h"
|
||||
|
||||
/*
|
||||
Paging on x86 uses four different page table levels:
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief x64 4-level paging implementation
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef PAGING_H
|
||||
#define PAGING_H
|
||||
|
||||
#define PAGE_SIZE 4096
|
||||
#define BITS_PER_ROW 64
|
||||
|
||||
#include <stdint.h>
|
||||
#include <limine.h>
|
||||
@@ -40,10 +45,4 @@ extern uint64_t hhdm_off;
|
||||
#define PTE_HUGE (1ULL << 7)
|
||||
#define PTE_NOEXEC (1ULL << 63)
|
||||
|
||||
// Specified in linker.ld
|
||||
#define KERNEL_BASE 0xFFFFFFFF80000000ULL
|
||||
|
||||
// 2 MB should be enough (as of now, the whole kernel ELF is around 75kb)
|
||||
#define KERNEL_SIZE 0x200000
|
||||
|
||||
#endif
|
||||
@@ -1,4 +1,8 @@
|
||||
// OMG here we are. I'm cooked.
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Physical memory manager from freelist
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
/*
|
||||
pmm - Physical Memory Manager
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Physical memory manager from freelist
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef PAGING_PMM_H
|
||||
#define PAGING_PMM_H
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Virtual memory manager
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
/*
|
||||
The VMM (virtual memory manager) will have two roles:
|
||||
- mapping pages
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Virtual memory manager
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef VMM_H
|
||||
#define VMM_H
|
||||
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Process linked list implementation
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include "process.h"
|
||||
#include "mem/heap/kheap.h"
|
||||
#include "kernel.h"
|
||||
#include "string/string.h"
|
||||
#include "mem/gdt/gdt.h"
|
||||
#include "config.h"
|
||||
|
||||
struct process_t* processes_list;
|
||||
struct process_t* current_process;
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Process definition
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef PROCESS_H
|
||||
#define PROCESS_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include "config.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -10,9 +17,6 @@ typedef enum
|
||||
DEAD
|
||||
} status_t;
|
||||
|
||||
#define PROCESS_NAME_MAX 64
|
||||
#define PROCESS_STACK_SIZE 0x10000 // 64kb
|
||||
|
||||
struct process_t
|
||||
{
|
||||
size_t pid;
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Round-robin scheduler
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include "kernel.h"
|
||||
#include "process.h"
|
||||
|
||||
@@ -35,6 +41,6 @@ struct cpu_status_t* scheduler_schedule(struct cpu_status_t* context)
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG("SCHEDULER CALLED: current_process=%p", current_process);
|
||||
DEBUG("current_process={pid=%u name='%s'}", current_process->pid, current_process->name);
|
||||
return current_process->context;
|
||||
}
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Round-robin scheduler
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef SCHEDULER_H
|
||||
#define SCHEDULER_H
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief String manipulation utilities
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
char* strcpy(char *dest, const char *src)
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief String manipulation functions
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef STRING_H
|
||||
#define STRING_H
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief Programmable Interval Timer init and enabling
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include "io/serial/serial.h"
|
||||
#include <kernel.h>
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* @author xamidev <xamidev@riseup.net>
|
||||
* @brief PIT functions
|
||||
* @license GPL-3.0-only
|
||||
*/
|
||||
|
||||
#ifndef TIMER_H
|
||||
#define TIMER_H
|
||||
|
||||
|
||||
Reference in New Issue
Block a user