fat_io_lib finally works, implement virtual partition devices, manage devices via string keys
All checks were successful
Build documentation / build-and-deploy (push) Successful in 3m35s

This commit is contained in:
2026-03-01 00:00:27 +01:00
parent baa13fb695
commit 0533c2705d
37 changed files with 619 additions and 139 deletions

View File

@@ -122,7 +122,6 @@ void ioapic_route_irq (uint32_t vec, uint32_t irq, uint64_t flags, uint64_t lapi
uint32_t gsi = found_override ? override->gsi : irq;
ioapic = ioapic_find (gsi);
DEBUG ("%p\n", ioapic);
if (ioapic == NULL)
return;

View File

@@ -8,6 +8,8 @@
#include <amd64/msr.h>
#include <aux/compiler.h>
#include <device/device.h>
#include <device/partitions.h>
#include <devices.h>
#include <fs/vfs.h>
#include <irq/irq.h>
#include <libk/std.h>
@@ -17,7 +19,6 @@
#include <mm/pmm.h>
#include <proc/proc.h>
#include <proc/reschedule.h>
#include <ramdisk_device.h>
#include <sys/debug.h>
#include <sys/mm.h>
#include <sys/smp.h>
@@ -55,14 +56,19 @@ void bootmain (void) {
devices_init ();
vfs_init ();
struct device* ramdisk_device = device_find (RAMDISK_DEVICE);
struct reschedule_ctx rctx = {.cpu = thiscpu, .reschedule = false};
int ret = vfs_create_volume ("ramdisk", VFS_TARFS, ramdisk_device, NULL, &rctx);
struct reschedule_ctx rctx = {.cpu = NULL, .reschedule = false};
if (ret < 0) {
DEBUG ("could not mount ramdisk! (%d)\n", ret);
spin ();
}
struct device* ramdisk = device_find ("RD");
vfs_create_volume ("RD", VFS_TARFS, ramdisk);
struct device* vdisk = device_find ("VD");
device_probe_partitions (vdisk);
struct device* vdp0 = device_find ("VDp0");
vfs_create_volume ("VD", VFS_FAT32, vdp0);
vfs_volume_open (VFS_KERNEL, "VD", &rctx);
vfs_format (VFS_KERNEL, "VD");
vfs_volume_close (VFS_KERNEL, "VD", &rctx);
proc_pid_alloc_init ();
procgroup_pgid_alloc_init ();

View File

@@ -177,18 +177,18 @@ void intr_handler (void* stack_ptr) {
struct saved_regs* regs = stack_ptr;
spin_lock (&thiscpu->lock);
struct proc* proc_current = thiscpu->proc_current;
spin_lock (&proc_current->lock);
memcpy (&proc_current->pdata.regs, regs, sizeof (struct saved_regs));
spin_unlock (&proc_current->lock);
spin_unlock (&thiscpu->lock);
if (regs->trap <= 31) {
intr_exception (regs);
} else {
spin_lock (&thiscpu->lock);
struct proc* proc_current = thiscpu->proc_current;
spin_lock (&proc_current->lock);
memcpy (&proc_current->pdata.regs, regs, sizeof (struct saved_regs));
spin_unlock (&proc_current->lock);
spin_unlock (&thiscpu->lock);
lapic_eoi ();
struct irq* irq = irq_find (regs->trap);

View File

@@ -102,7 +102,7 @@ static void smp_bootstrap (struct limine_mp_info* mp_info) {
struct reschedule_ctx rctx = {.cpu = NULL, .reschedule = false};
struct proc* spin_proc = proc_from_file (VFS_KERNEL, "ramdisk", "/spin", &rctx);
struct proc* spin_proc = proc_from_file (VFS_KERNEL, "RD", "/spin", &rctx);
proc_register (spin_proc, thiscpu, NULL);
spin_lock (&spin_proc->cpu->lock);