mirror of
https://github.com/subhobhai943/SUB-OS.git
synced 2026-10-25 16:52:29 +00:00
64 lines
1.8 KiB
C
64 lines
1.8 KiB
C
#include <kernel/module.h>
|
|
#include <lib/string.h>
|
|
#include <kernel/printk.h>
|
|
|
|
static kernel_module_t modules_table[MAX_MODULES];
|
|
static size_t module_count = 0;
|
|
|
|
void module_init_subsystem(void) {
|
|
memset(modules_table, 0, sizeof(modules_table));
|
|
module_count = 0;
|
|
|
|
// Register built-in kernel modules
|
|
module_load("e1000", NULL, NULL, 48128);
|
|
module_load("ata_piix", NULL, NULL, 32768);
|
|
module_load("ac97_audio", NULL, NULL, 24576);
|
|
module_load("fat32", NULL, NULL, 36864);
|
|
module_load("ext2", NULL, NULL, 40960);
|
|
module_load("tts_synth", NULL, NULL, 16384);
|
|
|
|
printk(KERN_INFO "MODULE: Dynamic Kernel Module Loader ready (%llu core modules loaded)\n",
|
|
(uint64_t)module_count);
|
|
}
|
|
|
|
int module_load(const char* name, int (*init_fn)(void), void (*cleanup_fn)(void), size_t size) {
|
|
if (!name || module_count >= MAX_MODULES) return -1;
|
|
|
|
kernel_module_t* mod = &modules_table[module_count];
|
|
strncpy(mod->name, name, sizeof(mod->name) - 1);
|
|
strcpy(mod->version, "1.0.0");
|
|
strcpy(mod->author, "SUB-OS Core Team");
|
|
strcpy(mod->description, "Built-in Kernel Subsystem Module");
|
|
mod->size = size > 0 ? size : 4096;
|
|
mod->init = init_fn;
|
|
mod->cleanup = cleanup_fn;
|
|
mod->loaded = true;
|
|
|
|
if (init_fn) init_fn();
|
|
module_count++;
|
|
return 0;
|
|
}
|
|
|
|
int module_unload(const char* name) {
|
|
if (!name) return -1;
|
|
for (size_t i = 0; i < module_count; i++) {
|
|
if (strcmp(modules_table[i].name, name) == 0) {
|
|
if (modules_table[i].cleanup) {
|
|
modules_table[i].cleanup();
|
|
}
|
|
modules_table[i].loaded = false;
|
|
return 0;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
size_t module_get_count(void) {
|
|
return module_count;
|
|
}
|
|
|
|
const kernel_module_t* module_get(size_t index) {
|
|
if (index >= module_count) return NULL;
|
|
return &modules_table[index];
|
|
}
|