kmod: prepare for kernel module loading

This commit is contained in:
RaphProductions 2025-05-17 11:51:28 +02:00
parent 30017592ad
commit d017412af5
3 changed files with 31 additions and 4 deletions

View file

@ -9,9 +9,12 @@ The Soaplin kernel is a new Unix-like operating system kernel.
* ELF loader * ELF loader
* ACPI * ACPI
* Symetric Multiprocessing (It runs code, but the scheduler is running on 1 processor.) * Symetric Multiprocessing (It runs code, but the scheduler is running on 1 processor.)
* Recovers from a faulty userspace process.
## Nearly done
* Virtual File System
## In the works ## In the works
* Virtual File System
* FPU support * FPU support
## To come ## To come
@ -21,9 +24,6 @@ The Soaplin kernel is a new Unix-like operating system kernel.
* TAR-based init ram disk * TAR-based init ram disk
* Video driver for Bochs graphics adapter, and the VMware display adapter. * Video driver for Bochs graphics adapter, and the VMware display adapter.
## Known bugs
* If a user process calls the syscall handler by using interrupts, the system may crash due to a Page Fault.
## Building ## Building
To build Soaplin, you must ensure you have these: To build Soaplin, you must ensure you have these:
* The Netwide Assembler (nasm) * The Netwide Assembler (nasm)

View file

@ -57,6 +57,11 @@ SECTIONS
.data : { .data : {
data_start_ld = .; data_start_ld = .;
*(.data .data.*) *(.data .data.*)
/* Exported kernel symbols */
__start_ksyms = .;
KEEP(*(.ksyms))
__stop_ksyms = .;
} :data } :data
/* NOTE: .bss needs to be the last thing mapped to :data, otherwise lots of */ /* NOTE: .bss needs to be the last thing mapped to :data, otherwise lots of */

22
kernel/src/dbg/export.h Normal file
View file

@ -0,0 +1,22 @@
#pragma once
#include <stdint.h>
// At Soaplin, we aren't doing module racism based on the license. (Ḭ̸̡̢̨̧̨̛͍͚̙̺̦̩͕̮̙̙̳̮͉̝̙̜͓̪͇̠̪̣̻̰͕̲̲̘̖̦͖͕͎̲̹͖̮̳̻̞̌͋̋̆͛̉͆ ̸̨͕͎̣̥͖͔̳̫̳͚̯̬̙̘͓̹̼̻̼̈̓̉ͅͅs̶̟͉̠̣̞͎͍̘̟̝̱̩̃͛̽͛̆͌̆̒̔̈́̎̿̐̈́͐̓̓͒͌̈̀̓͗̋̕͜͜͝͠͝͠ͅȩ̸̡̛͔̦̲̦̼̹̙̲͖͎̼̝̯̦̞̜͍̀̈́̈́͂̈́̍́̆̆̔͗́̆̀͑̀̔͆̄͐͐̆͠ę̸̨̢̢̧̛̛͕̱̯̲̦͕͖̦̝̯̮̤̫͙͔̲̬̯̗̗͈̬̳̙͙̼͉̩͚̼̮͚̖̰̗̤͓̘͂̾̒͋̀͂̏́̂̋̅̆̋̈̔̈́̀̔̈́̊̓͂͌̋̂́̍̀͒͊͊̓͌̃̚͘͜͝͠ ̸̧̡̧͍̼̹͇̞̘͇̯̞̣̝̲̳̦̟̱͇̥͈̟̝̹̳̫͕̜̬̥̯̬̟̤̖̹̙̩̰̈͗͆͌̊̽̾͝͝ͅy̵̡̡̢̞̭͔̰͔͔̖̥͕̙̳̯͍͉̦̦͓̥̞̝͖͕̰̼͖̲̮͚̲̜̰̱̘̯̤̌́̏̄̏́̈́̓ͅỡ̵̢̢̢̖̠͉̖̺̻̣̜̬̮͓̫͎͖͎̤̪̝̗̰͕͍͖̖̟͙͍̻̑͊̃̃̒̍̆̎̋̿͐̋̉̇̾͆̿̌̃̏̽̊̀͒̇̏̓̾̏̈́̓̿̏̚͠͝͝͝ͅu̸̧͕̟͉͉͖̰̝͕̞̪̖͙͙̅̒̅̂̑́,̶̢̡̡̧̛̲̬̞̘̻̗̩̫̗͓̪̬͚̗̖͕̰̣͙͍̯͇̩̭͎̖̝̬̻͖̟̩̙̩̝͓̤́̄̆̍̂̈̊̄͆̽̑̑̊̓̋͐̔̉̍͌̏̀̿͘͜͜͜ͅͅ ̴̢̛̛͈͚̳̣̮̬̲̲͈̮͓̭̗̈́̽̄͌̾̒́̔̌̐̽͋̓̄̉̆̑̃́̏̉̔̓̂̽̊͆̽̎̍̈͑́̌͑̍̕͘͘͝͠ͅL̵̙̯̦̬̱͍̣̹̱̝̓̒i̵̢̨̨̧̨̛̗̲͍͇̖̥̯͔̙̪̱͓̝̦̼̭̬̟̞̩̭͙̐̐͊̒͑̊͌̽̂̉͊̈́̌͒̆̐͐͒̉̀́̑́̅͛͐̕̕͝͝ͅͅņ̵̛͓̲͆̏̃̊̒̇̑̑̾̽͊̃͌̔́̌̈́̈́͛͆̒̀̿̎͒̑̃̈́̈́͂͐͂̕̚̕͘͜͠͠ư̸̧̯̤̲͚͖̯͖͈̠̽̏̈́̄̀͒̐̅̽̋̓̂̑̋̽͒̄̑̇̈́̆̈͛͆̿̈̉͆͗͊̎͂̇̽̋̅͊̀̚̚͝ś̶̛̗̥͇̖̠͓͆̀̅̓̓͆͆̐́̄͛̃͑̔̑̒͒͋͂̂́͋͂́͗̐͆̐̕͝͝͠)
typedef struct {
const char* name;
uint64_t addr;
uint64_t size;
} kernel_symbol_t;
#define EXPORT_SYMBOL(sym) \
static const kernel_symbol_t __ksym_##sym \
__attribute__((section(".ksyms"), used)) = { \
.name = #sym, \
.addr = (uint64_t)&sym, \
.size = sizeof(sym) \
}
extern const kernel_symbol_t __start_ksyms[];
extern const kernel_symbol_t __stop_ksyms[];