RAMDisk Neu-/Weiterentwicklung
-
z.Z. hängt die RAMDisk noch am VFS von James Molloy und hat das von ihm entwickelte einfache Filesystem.
Tragen wir die zukünftige Schnittstelle zusammen:
devicemanager.c:
RAM = {.motorOff = 0, .pollDisk = 0}; RAMDISK = {.readSector = 0, .writeSector = 0};
fsmanager.c:
case FS_INITRD: return (((uint64_t)(uintptr_t)&INITRD << 32) | type); fileSystem_t INITRD = {};
Kette in ckernel.c:
void* ramdisk_start = initrd_install(ramdisk_install(), 0, RAMDISKSIZE);
void* initrd_install(disk_t* disk, size_t partitionID, size_t size) { void* ramdisk_start = malloc(size, 0, "initrd-RAMD-start"); // shell via incbin in data.asm memcpy(ramdisk_start, &file_data_start, (uintptr_t)&file_data_end - (uintptr_t)&file_data_start); /// TODO: ==> device/filesystem manager fs_root = install_initrd(ramdisk_start); //... return (ramdisk_start); }
fs_node_t* install_initrd(void* location) { // Initialise the main and file header pointers and populate the root directory. initrd_header = (initrd_header_t*)location; file_headers = (initrd_file_header_t*)(location + sizeof(initrd_header_t)); // Initialise the root directory. kdebug(3, "rd_root: "); /// TODO: ==> device/filesystem manager initrd_root = malloc(sizeof(fs_node_t), 0, "initrd-root"); strcpy(initrd_root->name, "dev"); initrd_root->mask = initrd_root->uid = initrd_root->gid = initrd_root->inode = initrd_root->length = 0; //... // Initialise the /dev directory (required!) kdebug(3, "rd_dev: "); /// TODO: ==> device/filesystem manager initrd_dev = malloc(sizeof(fs_node_t), 0, "initrd-dev"); strcpy(initrd_dev->name, "ramdisk"); initrd_dev->mask = initrd_dev->uid = initrd_dev->gid = initrd_dev->inode = initrd_dev->length = 0; //... initrd_dev->readdir = &initrd_readdir; initrd_dev->finddir = &initrd_finddir; //... return (initrd_root); }
Die ersten Schritte:
- Design eines eigenen Filesystems (oder zunächst Verwendung des bisherigen RAMDisk FS, das noch versuchsweise von James Molloy stammt)
- C-Programm, um shell.elf in dieses FS Format "einzupacken"
- Kernel-RAMDisk-Modul, um shell.elf zu finden und zu laden