RAMDisk Neu-/Weiterentwicklung


  • Mod

    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


Log in to reply