still working on a more robust vfs
This commit is contained in:
@@ -26,12 +26,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/kbd.c.o",
|
"obj/kernel/vfs.c.o",
|
||||||
"kernel/kbd.c"
|
"kernel/vfs.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/kbd.c",
|
"file": "/home/slinky/source/RockOS/kernel/vfs.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/kbd.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/vfs.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -43,12 +43,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/gdt.c.o",
|
"obj/kernel/kmain.c.o",
|
||||||
"kernel/gdt.c"
|
"kernel/kmain.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/gdt.c",
|
"file": "/home/slinky/source/RockOS/kernel/kmain.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/gdt.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/kmain.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -67,74 +67,6 @@
|
|||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic.c",
|
"file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic.c.o"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/ps2/ps2.c.o",
|
|
||||||
"kernel/drivers/ps2/ps2.c"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2.c",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2.c.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/iso/iso.c.o",
|
|
||||||
"kernel/drivers/iso/iso.c"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/iso/iso.c",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/iso/iso.c.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/ide/ide.c.o",
|
|
||||||
"kernel/drivers/ide/ide.c"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/ide/ide.c",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/ide/ide.c.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/vga/vga.c.o",
|
|
||||||
"kernel/drivers/vga/vga.c"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/vga/vga.c",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/vga/vga.c.o"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
@@ -179,12 +111,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/scheduler.c.o",
|
"obj/kernel/drivers/vga/vga.c.o",
|
||||||
"kernel/scheduler.c"
|
"kernel/drivers/vga/vga.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/scheduler.c",
|
"file": "/home/slinky/source/RockOS/kernel/drivers/vga/vga.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/scheduler.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/vga/vga.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -196,12 +128,97 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/elf.c.o",
|
"obj/kernel/drivers/ide/ide.c.o",
|
||||||
"kernel/elf.c"
|
"kernel/drivers/ide/ide.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/elf.c",
|
"file": "/home/slinky/source/RockOS/kernel/drivers/ide/ide.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/elf.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/ide/ide.c.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/drivers/ps2/ps2.c.o",
|
||||||
|
"kernel/drivers/ps2/ps2.c"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2.c",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2.c.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/drivers/iso/iso.c.o",
|
||||||
|
"kernel/drivers/iso/iso.c"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/drivers/iso/iso.c",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/iso/iso.c.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/gdt.c.o",
|
||||||
|
"kernel/gdt.c"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/gdt.c",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/gdt.c.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/memory/mm.c.o",
|
||||||
|
"kernel/memory/mm.c"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/memory/mm.c",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/memory/mm.c.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/kbd.c.o",
|
||||||
|
"kernel/kbd.c"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/kbd.c",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/kbd.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -237,6 +254,23 @@
|
|||||||
"file": "/home/slinky/source/RockOS/kernel/interrupts.c",
|
"file": "/home/slinky/source/RockOS/kernel/interrupts.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/interrupts.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/interrupts.c.o"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/elf.c.o",
|
||||||
|
"kernel/elf.c"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/elf.c",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/elf.c.o"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
@@ -254,57 +288,6 @@
|
|||||||
"file": "/home/slinky/source/RockOS/kernel/syscall.c",
|
"file": "/home/slinky/source/RockOS/kernel/syscall.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/syscall.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/syscall.c.o"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/kmain.c.o",
|
|
||||||
"kernel/kmain.c"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/kmain.c",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/kmain.c.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/lib/tasks.c.o",
|
|
||||||
"kernel/lib/tasks.c"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/lib/tasks.c",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/lib/tasks.c.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/lib/ringbuf.c.o",
|
|
||||||
"kernel/lib/ringbuf.c"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/lib/ringbuf.c",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/lib/ringbuf.c.o"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
@@ -332,12 +315,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/lib/strtok.c.o",
|
"obj/kernel/lib/memory.c.o",
|
||||||
"kernel/lib/strtok.c"
|
"kernel/lib/memory.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/lib/strtok.c",
|
"file": "/home/slinky/source/RockOS/kernel/lib/memory.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/lib/strtok.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/lib/memory.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -366,12 +349,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/lib/memory.c.o",
|
"obj/kernel/lib/ringbuf.c.o",
|
||||||
"kernel/lib/memory.c"
|
"kernel/lib/ringbuf.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/lib/memory.c",
|
"file": "/home/slinky/source/RockOS/kernel/lib/ringbuf.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/lib/memory.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/lib/ringbuf.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -383,12 +366,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/vfs.c.o",
|
"obj/kernel/lib/tasks.c.o",
|
||||||
"kernel/vfs.c"
|
"kernel/lib/tasks.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/vfs.c",
|
"file": "/home/slinky/source/RockOS/kernel/lib/tasks.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/vfs.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/lib/tasks.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -400,12 +383,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/memory/mm.c.o",
|
"obj/kernel/lib/strtok.c.o",
|
||||||
"kernel/memory/mm.c"
|
"kernel/lib/strtok.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/memory/mm.c",
|
"file": "/home/slinky/source/RockOS/kernel/lib/strtok.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/memory/mm.c.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/lib/strtok.c.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -417,46 +400,12 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/drivers/pic/pic.S.o",
|
"obj/kernel/scheduler.c.o",
|
||||||
"kernel/drivers/pic/pic.S"
|
"kernel/scheduler.c"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic.S",
|
"file": "/home/slinky/source/RockOS/kernel/scheduler.c",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic.S.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/scheduler.c.o"
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/ps2/ps2.S.o",
|
|
||||||
"kernel/drivers/ps2/ps2.S"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2.S",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2.S.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/drivers/pit/pit.S.o",
|
|
||||||
"kernel/drivers/pit/pit.S"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/drivers/pit/pit.S",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/pit/pit.S.o"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -475,40 +424,6 @@
|
|||||||
"file": "/home/slinky/source/RockOS/kernel/syscall.S",
|
"file": "/home/slinky/source/RockOS/kernel/syscall.S",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/syscall.S.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/syscall.S.o"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/interrupts.S.o",
|
|
||||||
"kernel/interrupts.S"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/interrupts.S",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/interrupts.S.o"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"arguments": [
|
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
|
||||||
"-c",
|
|
||||||
"-ffreestanding",
|
|
||||||
"-O2",
|
|
||||||
"-Wall",
|
|
||||||
"-Wextra",
|
|
||||||
"-Ikernel",
|
|
||||||
"-o",
|
|
||||||
"obj/kernel/boot/boot.S.o",
|
|
||||||
"kernel/boot/boot.S"
|
|
||||||
],
|
|
||||||
"directory": "/home/slinky/source/RockOS",
|
|
||||||
"file": "/home/slinky/source/RockOS/kernel/boot/boot.S",
|
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/boot/boot.S.o"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
@@ -536,12 +451,46 @@
|
|||||||
"-Wextra",
|
"-Wextra",
|
||||||
"-Ikernel",
|
"-Ikernel",
|
||||||
"-o",
|
"-o",
|
||||||
"obj/kernel/scheduler.S.o",
|
"obj/kernel/drivers/pic/pic.S.o",
|
||||||
"kernel/scheduler.S"
|
"kernel/drivers/pic/pic.S"
|
||||||
],
|
],
|
||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/scheduler.S",
|
"file": "/home/slinky/source/RockOS/kernel/drivers/pic/pic.S",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/scheduler.S.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/pic/pic.S.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/drivers/pit/pit.S.o",
|
||||||
|
"kernel/drivers/pit/pit.S"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/drivers/pit/pit.S",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/pit/pit.S.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/drivers/ps2/ps2.S.o",
|
||||||
|
"kernel/drivers/ps2/ps2.S"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/drivers/ps2/ps2.S",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/drivers/ps2/ps2.S.o"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
@@ -560,6 +509,40 @@
|
|||||||
"file": "/home/slinky/source/RockOS/kernel/memory/mm.S",
|
"file": "/home/slinky/source/RockOS/kernel/memory/mm.S",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/memory/mm.S.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/memory/mm.S.o"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/boot/boot.S.o",
|
||||||
|
"kernel/boot/boot.S"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/boot/boot.S",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/boot/boot.S.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/scheduler.S.o",
|
||||||
|
"kernel/scheduler.S"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/scheduler.S",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/scheduler.S.o"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"arguments": [
|
"arguments": [
|
||||||
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
@@ -576,5 +559,22 @@
|
|||||||
"directory": "/home/slinky/source/RockOS",
|
"directory": "/home/slinky/source/RockOS",
|
||||||
"file": "/home/slinky/source/RockOS/kernel/gdt.S",
|
"file": "/home/slinky/source/RockOS/kernel/gdt.S",
|
||||||
"output": "/home/slinky/source/RockOS/obj/kernel/gdt.S.o"
|
"output": "/home/slinky/source/RockOS/obj/kernel/gdt.S.o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"arguments": [
|
||||||
|
"/home/slinky/opt/cross/bin/i686-elf-gcc",
|
||||||
|
"-c",
|
||||||
|
"-ffreestanding",
|
||||||
|
"-O2",
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Ikernel",
|
||||||
|
"-o",
|
||||||
|
"obj/kernel/interrupts.S.o",
|
||||||
|
"kernel/interrupts.S"
|
||||||
|
],
|
||||||
|
"directory": "/home/slinky/source/RockOS",
|
||||||
|
"file": "/home/slinky/source/RockOS/kernel/interrupts.S",
|
||||||
|
"output": "/home/slinky/source/RockOS/obj/kernel/interrupts.S.o"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
#include <drivers/cpio/cpio.h>
|
#include <drivers/cpio/cpio.h>
|
||||||
|
|
||||||
#include <lib/memory.h>
|
#include <lib/memory.h>
|
||||||
|
#include <lib/string.h>
|
||||||
|
|
||||||
#define MAX_INITRD_FILES 64
|
#define MAX_INITRD_FILES 64
|
||||||
static vfs_node_t cpio_nodes[MAX_INITRD_FILES];
|
|
||||||
static uint32_t cpio_node_count = 0;
|
|
||||||
|
|
||||||
static uint32_t parse_hex_ascii(const char *str, int len) {
|
static uint32_t parse_hex_ascii(const char *str, int len) {
|
||||||
uint32_t result = 0;
|
uint32_t result = 0;
|
||||||
@@ -20,13 +19,15 @@ static uint32_t parse_hex_ascii(const char *str, int len) {
|
|||||||
static vfs_node_t* cpio_find(vfs_node_t* _dir, const char* name) {
|
static vfs_node_t* cpio_find(vfs_node_t* _dir, const char* name) {
|
||||||
if (!(_dir->flags & VFS_DIRECTORY)) return NULL;
|
if (!(_dir->flags & VFS_DIRECTORY)) return NULL;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < cpio_node_count; i++) {
|
vfs_node_t* child = _dir->first_child;
|
||||||
if (strcmp(cpio_nodes[i].name, name) == 0) {
|
while (child != NULL) {
|
||||||
return &cpio_nodes[i];
|
if (strcmp(child->name, name) == 0) {
|
||||||
|
return child;
|
||||||
}
|
}
|
||||||
|
child = child->next_sibling;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL; // File not found
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t cpio_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) {
|
static uint32_t cpio_read(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer) {
|
||||||
@@ -38,18 +39,47 @@ static uint32_t cpio_read(struct vfs_node* node, uint32_t offset, uint32_t size,
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static vfs_node_t* cpio_get_or_create(vfs_node_t* root_node, const char* path) {
|
||||||
|
vfs_node_t* current = root_node;
|
||||||
|
|
||||||
|
char path_cpy[256];
|
||||||
|
strcpy(path_cpy, path);
|
||||||
|
|
||||||
|
char* sav = NULL;
|
||||||
|
char* tkn = strtok_r(path_cpy, "/", &sav);
|
||||||
|
|
||||||
|
while (tkn != NULL) {
|
||||||
|
char* next_tkn = strtok_r(NULL, "/", &sav);
|
||||||
|
|
||||||
|
vfs_node_t* next_node = cpio_find(current, tkn);
|
||||||
|
if (!next_node) {
|
||||||
|
next_node = kalloc(sizeof(vfs_node_t));
|
||||||
|
memset((void*)next_node, 0, sizeof(vfs_node_t));
|
||||||
|
|
||||||
|
strcpy(next_node->name, tkn);
|
||||||
|
next_node->flags = VFS_DIRECTORY;
|
||||||
|
next_node->find = cpio_find;
|
||||||
|
|
||||||
|
next_node->next_sibling = current->first_child;
|
||||||
|
current->first_child = next_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
current = next_node;
|
||||||
|
tkn = next_tkn;
|
||||||
|
}
|
||||||
|
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
vfs_node_t* cpio_read_fs(uint32_t _vaddr) {
|
vfs_node_t* cpio_read_fs(uint32_t _vaddr) {
|
||||||
cpio_header_t* header = (cpio_header_t*)_vaddr;
|
cpio_header_t* header = (cpio_header_t*)_vaddr;
|
||||||
|
|
||||||
vfs_node_t* cpio_root = kalloc(sizeof(vfs_node_t));
|
vfs_node_t* cpio_root = kalloc(sizeof(vfs_node_t));
|
||||||
memset((uint8_t*)cpio_root, 0, sizeof(vfs_node_t));
|
memset((uint8_t*)cpio_root, 0, sizeof(vfs_node_t));
|
||||||
|
|
||||||
strcpy(cpio_root->name, "cpio_root");
|
strcpy(cpio_root->name, "cpio_root");
|
||||||
|
cpio_root->flags = VFS_DIRECTORY;
|
||||||
|
cpio_root->find = cpio_find;
|
||||||
|
|
||||||
cpio_root->flags |= VFS_DIRECTORY;
|
|
||||||
cpio_root->finddir = cpio_find;
|
|
||||||
|
|
||||||
uint32_t cnt = 0;
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (strncmp(header->c_magic, "070701", 6) != 0 &&
|
if (strncmp(header->c_magic, "070701", 6) != 0 &&
|
||||||
strncmp(header->c_magic, "070702", 6) != 0) {
|
strncmp(header->c_magic, "070702", 6) != 0) {
|
||||||
@@ -59,34 +89,50 @@ vfs_node_t* cpio_read_fs(uint32_t _vaddr) {
|
|||||||
uint32_t namesize = parse_hex_ascii(header->c_namesize, 8);
|
uint32_t namesize = parse_hex_ascii(header->c_namesize, 8);
|
||||||
uint32_t filesize = parse_hex_ascii(header->c_filesize, 8);
|
uint32_t filesize = parse_hex_ascii(header->c_filesize, 8);
|
||||||
uint32_t mode = parse_hex_ascii(header->c_mode, 8);
|
uint32_t mode = parse_hex_ascii(header->c_mode, 8);
|
||||||
|
char* filename = (char*)header + sizeof(cpio_header_t);
|
||||||
char* filename = (char*)header + sizeof(cpio_header_t);
|
|
||||||
|
|
||||||
if (strcmp(filename, "TRAILER!!!") == 0) {
|
if (strcmp(filename, "TRAILER!!!") == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t file_data_offset = sizeof(cpio_header_t) + namesize;
|
uint32_t file_data_offset = (sizeof(cpio_header_t) + namesize + 3) & ~3;
|
||||||
file_data_offset = (file_data_offset + 3) & ~3; // align to 4 bytes
|
|
||||||
|
|
||||||
uint8_t* file_data = (uint8_t*)header + file_data_offset;
|
uint8_t* file_data = (uint8_t*)header + file_data_offset;
|
||||||
|
|
||||||
if (strcmp(".", filename) != 0 && cnt < MAX_INITRD_FILES) {
|
if (strcmp(".", filename) != 0) {
|
||||||
vfs_node_t* current = &cpio_nodes[cpio_node_count++];
|
vfs_node_t* parent = cpio_get_or_create(cpio_root, filename);
|
||||||
memset((uint8_t*)current, 0, sizeof(vfs_node_t));
|
|
||||||
|
|
||||||
strcpy(current->name, filename);
|
char* base_name = filename;
|
||||||
current->size = filesize;
|
for (int i = strlen(filename) - 1; i >= 0; i--) {
|
||||||
|
if (filename[i] == '/') {
|
||||||
|
base_name = &filename[i + 1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
current->flags = VFS_FILE;
|
vfs_node_t* current = cpio_find(parent, base_name);
|
||||||
current->read = cpio_read;
|
if (!current) {
|
||||||
current->data = file_data;
|
current = kalloc(sizeof(vfs_node_t));
|
||||||
|
memset((void*)current, 0, sizeof(vfs_node_t));
|
||||||
|
strcpy(current->name, base_name);
|
||||||
|
|
||||||
|
current->next_sibling = parent->first_child;
|
||||||
|
parent->first_child = current;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((mode & 0xF000) == 0x4000) {
|
||||||
|
current->flags = VFS_DIRECTORY;
|
||||||
|
current->find = cpio_find;
|
||||||
|
} else {
|
||||||
|
current->flags = VFS_FILE;
|
||||||
|
current->size = filesize;
|
||||||
|
current->data = file_data;
|
||||||
|
current->read = cpio_read;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t next_header_offset = file_data_offset + filesize;
|
uint32_t next_header_offset = (file_data_offset + filesize + 3) & ~3;
|
||||||
next_header_offset = (next_header_offset + 3) & ~3;
|
|
||||||
header = (cpio_header_t*)((uint8_t*)header + next_header_offset);
|
header = (cpio_header_t*)((uint8_t*)header + next_header_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cpio_root;
|
return cpio_root;
|
||||||
}
|
}
|
||||||
@@ -2,63 +2,64 @@
|
|||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
char* strtok_r(char *s, const char *delim, char **saveptr) {
|
static size_t kernel_strspn(const char *s, const char *accept) {
|
||||||
|
const char *p;
|
||||||
|
const char *a;
|
||||||
|
size_t count = 0;
|
||||||
|
|
||||||
|
for (p = s; *p != '\0'; ++p) {
|
||||||
|
for (a = accept; *a != '\0'; ++a) {
|
||||||
|
if (*p == *a)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (*a == '\0')
|
||||||
|
return count;
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *kernel_strpbrk(const char *s, const char *accept) {
|
||||||
|
while (*s != '\0') {
|
||||||
|
const char *a = accept;
|
||||||
|
while (*a != '\0') {
|
||||||
|
if (*s == *a) {
|
||||||
|
return (char *)s;
|
||||||
|
}
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *strtok_r(char *str, const char *delim, char **saveptr) {
|
||||||
char *token;
|
char *token;
|
||||||
|
|
||||||
if (!saveptr) {
|
if (str == NULL) {
|
||||||
|
str = *saveptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str == NULL || *str == '\0') {
|
||||||
|
*saveptr = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!s) {
|
str += kernel_strspn(str, delim);
|
||||||
s = *saveptr;
|
if (*str == '\0') {
|
||||||
}
|
*saveptr = NULL;
|
||||||
|
|
||||||
if (!s || *s == '\0') {
|
|
||||||
*saveptr = s;
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (*s != '\0') {
|
token = str;
|
||||||
const char *d = delim;
|
str = kernel_strpbrk(token, delim);
|
||||||
int is_delim = 0;
|
|
||||||
while (*d != '\0') {
|
if (str == NULL) {
|
||||||
if (*s == *d) {
|
*saveptr = NULL;
|
||||||
is_delim = 1;
|
} else {
|
||||||
break;
|
*str = '\0';
|
||||||
}
|
*saveptr = str + 1;
|
||||||
d++;
|
|
||||||
}
|
|
||||||
if (!is_delim) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
s++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*s == '\0') {
|
|
||||||
*saveptr = s;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
token = s;
|
|
||||||
|
|
||||||
while (*s != '\0') {
|
|
||||||
const char *d = delim;
|
|
||||||
int is_delim = 0;
|
|
||||||
while (*d != '\0') {
|
|
||||||
if (*s == *d) {
|
|
||||||
is_delim = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
d++;
|
|
||||||
}
|
|
||||||
if (is_delim) {
|
|
||||||
*s = '\0';
|
|
||||||
*saveptr = s + 1;
|
|
||||||
return token;
|
|
||||||
}
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
|
|
||||||
*saveptr = s;
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
@@ -102,7 +102,7 @@ static int32_t sys_pty(int* slave_fd) {
|
|||||||
master->size = 0;
|
master->size = 0;
|
||||||
master->read = pty_master_read;
|
master->read = pty_master_read;
|
||||||
master->write = pty_master_write;
|
master->write = pty_master_write;
|
||||||
master->finddir = NULL;
|
master->find = NULL;
|
||||||
master->data = pty;
|
master->data = pty;
|
||||||
|
|
||||||
vfs_node_t* slave =(vfs_node_t*)kalloc(sizeof(vfs_node_t));
|
vfs_node_t* slave =(vfs_node_t*)kalloc(sizeof(vfs_node_t));
|
||||||
@@ -110,7 +110,7 @@ static int32_t sys_pty(int* slave_fd) {
|
|||||||
slave->size = 0;
|
slave->size = 0;
|
||||||
slave->read = pty_slave_read;
|
slave->read = pty_slave_read;
|
||||||
slave->write = pty_slave_write;
|
slave->write = pty_slave_write;
|
||||||
slave->finddir = NULL;
|
slave->find = NULL;
|
||||||
slave->data = pty;
|
slave->data = pty;
|
||||||
|
|
||||||
file_t* fmaster = (file_t*)kalloc(sizeof(file_t));
|
file_t* fmaster = (file_t*)kalloc(sizeof(file_t));
|
||||||
|
|||||||
36
kernel/vfs.c
36
kernel/vfs.c
@@ -16,7 +16,7 @@ vfs_node_t* vfs_create_root() {
|
|||||||
|
|
||||||
root->flags |= VFS_DIRECTORY;
|
root->flags |= VFS_DIRECTORY;
|
||||||
root->size = 0;
|
root->size = 0;
|
||||||
root->finddir = NULL;
|
root->find = NULL;
|
||||||
|
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
@@ -27,10 +27,9 @@ void vfs_mount(vfs_node_t* _mnt, vfs_node_t* _fs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vfs_node_t* vfs_find(const char* path) {
|
vfs_node_t* vfs_find(const char* path) {
|
||||||
if (path[0] != '/') return NULL;
|
|
||||||
vfs_node_t* current = root;
|
vfs_node_t* current = root;
|
||||||
|
|
||||||
char* sav;
|
char* sav = NULL;
|
||||||
|
|
||||||
size_t path_sz = strlen(path) + 1;
|
size_t path_sz = strlen(path) + 1;
|
||||||
char* path_cpy = kalloc(path_sz);
|
char* path_cpy = kalloc(path_sz);
|
||||||
@@ -38,25 +37,36 @@ vfs_node_t* vfs_find(const char* path) {
|
|||||||
memcpy(path, path_cpy, path_sz);
|
memcpy(path, path_cpy, path_sz);
|
||||||
|
|
||||||
char* tkn = strtok_r(path_cpy, "/", &sav);
|
char* tkn = strtok_r(path_cpy, "/", &sav);
|
||||||
|
|
||||||
while (tkn != NULL) {
|
while (tkn != NULL) {
|
||||||
kprintf("Found tkn: %s\n");
|
if (!current || !current->find) {
|
||||||
|
current = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
current = current->find(current, tkn);
|
||||||
|
|
||||||
|
if (current == NULL) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tkn = strtok_r(NULL, "/", &sav);
|
||||||
}
|
}
|
||||||
|
|
||||||
kfree(path_cpy);
|
kfree(path_cpy);
|
||||||
|
|
||||||
const char* cmp = path + 1;
|
|
||||||
if (*cmp == '\0') return current;
|
|
||||||
|
|
||||||
if (current->finddir) {
|
|
||||||
return current->finddir(current, cmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
vfs_node_t* vfs_mkdir(vfs_node_t* parent, const char* name) {
|
vfs_node_t* vfs_mkdir(vfs_node_t* parent, const char* name) {
|
||||||
vfs_node_t* node = kalloc(sizeof(vfs_node_t));
|
if (!parent || !name) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(name) == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent->mkdir(parent, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int vfs_open(const char* _path, int flags) {
|
int vfs_open(const char* _path, int flags) {
|
||||||
|
|||||||
@@ -15,15 +15,20 @@ struct vfs_node;
|
|||||||
typedef uint32_t (*read_type_t)(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer);
|
typedef uint32_t (*read_type_t)(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer);
|
||||||
typedef uint32_t (*write_type_t)(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer);
|
typedef uint32_t (*write_type_t)(struct vfs_node* node, uint32_t offset, uint32_t size, uint8_t* buffer);
|
||||||
typedef struct vfs_node* (*finddir_type_t)(struct vfs_node* node, const char* name);
|
typedef struct vfs_node* (*finddir_type_t)(struct vfs_node* node, const char* name);
|
||||||
|
typedef struct vfs_node* (*mkdir_type_t)(struct vfs_node* node, const char* name);
|
||||||
|
|
||||||
typedef struct vfs_node {
|
typedef struct vfs_node {
|
||||||
char name[128];
|
char name[128];
|
||||||
uint32_t flags; // File, directory, device, etc.
|
uint32_t flags; // File, directory, device, etc.
|
||||||
uint32_t size; // Size of file in bytes
|
uint32_t size; // Size of file in bytes
|
||||||
|
|
||||||
|
struct vfs_node* first_child;
|
||||||
|
struct vfs_node* next_sibling;
|
||||||
|
|
||||||
read_type_t read;
|
read_type_t read;
|
||||||
write_type_t write;
|
write_type_t write;
|
||||||
finddir_type_t finddir;
|
finddir_type_t find;
|
||||||
|
mkdir_type_t mkdir;
|
||||||
|
|
||||||
struct vfs_node* mnt;
|
struct vfs_node* mnt;
|
||||||
void* data;
|
void* data;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ rm -f initrd/*.elf
|
|||||||
cp programs/bin/* initrd
|
cp programs/bin/* initrd
|
||||||
|
|
||||||
cd initrd
|
cd initrd
|
||||||
|
mkdir -p dev
|
||||||
mkdir -p output
|
mkdir -p output
|
||||||
find . -depth -print | cpio -o -H newc > output/initrd.img
|
find . -depth -print | cpio -o -H newc > output/initrd.img
|
||||||
cd ..
|
cd ..
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user