| Autor |
Nachricht |
Erhard Henkes
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 12167
|
Erhard Henkes Mitglied
23:03:03 24.10.2011 Titel: |
RAMDisk Neu-/Weiterentwicklung |
Zitieren |
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:
| C++: | RAM = {.motorOff = 0, .pollDisk = 0};
RAMDISK = {.readSector = 0, .writeSector = 0}; | |
fsmanager.c:
| C++: | case FS_INITRD:
return (((uint64_t)(uintptr_t)&INITRD << 32) | type);
fileSystem_t INITRD = {}; | |
Kette in ckernel.c:
| C++: | | void* ramdisk_start = initrd_install(ramdisk_install(), 0, RAMDISKSIZE); | |
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 | 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);
} | |
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 |
_________________ OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Zuletzt bearbeitet von Erhard Henkes am 18:18:16 28.10.2011, insgesamt 4-mal bearbeitet |
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|