Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - jgraef

Seiten: 1 2 3 [4]
61
tyndur / cdi.fs
« am: 11. February 2008, 16:20 »
Viele kennen es schon, für die Restlichen: cdi.fs ist als Interface für Dateisystem-Treiber gedacht.
BTW: Ich habe in letzter Zeit etwas mit fuse gearbeitet. Man könnte sich ja etwas davon inspirieren lassen.

Die 1. drei Funktions-Deklarationen sollten klar sein. cdi_fs_seterror() ermöglicht dem FS-Treiber einen error zu setzen (siehe ferror). Aber eigentlich müsste man das anderst machen, da man ja für jeden Filehandle ferror() machen kann.
cdi_fs_read_data() und cdi_fs_write_data() sind da um dem FS-Treiber Zugriff auf das Speichermedium zu geben.

#ifndef _CDI_FS_H_
#define _CDI_FS_H_

#include "types.h"
#include "cdi.h"
#include "cdi/lists.h"

#define CDI_FS_META_NONE       0 /* -/- Invalid Meta read        */
#define CDI_FS_META_MODE       1 /* r/w Get/Set permissions      */
#define CDI_FS_META_OWNER      2 /* r/w Get/Set owner            */
#define CDI_FS_META_GROUP      3 /* r/w Get/Set owner group      */
#define CDI_FS_META_TYPE       4 /* r/- Get file type            */
#define CDI_FS_META_SIZE       5 /* r/- Get file size            */
#define CDI_FS_META_USEDBLOCKS 6 /* r/- Get how many blocks used */
#define CDI_FS_META_CREATETIME 7 /* r/- Get creation time        */
#define CDI_FS_META_ACCESSTIME 8 /* r/- Get time of last access  */
#define CDI_FS_META_CHANGETIME 9 /* r/- Get time if last change  */

#define CDI_FS_ERROR_NONE    0 /* No Error */
#define CDI_FS_ERROR_ONS     1 /* Operation not supported */
#define CDI_FS_ERROR_FNF     2 /* File not found */
#define CDI_FS_ERROR_EOF     3 /* End of file */
#define CDI_FS_ERROR_UNKNOWN 4 /* Unknown error */

typedef enum {
  CDI_FS_TYPE_NONE     = 0, // Invalid file type
  CDI_FS_TYPE_FILE     = 1, // normal file
  CDI_FS_TYPE_DIR      = 2, // Directory
  CDI_FS_TYPE_FIF0     = 3, // First-In-First-Out-Pipe
  CDI_FS_TYPE_LIFO     = 4, // Last-In-First-Out-Pipe (Stack)
  CDI_FS_TYPE_BLOCKDEV = 5, // Block device
  CDI_FS_TYPE_CHARDEV  = 6, // Character device
  CDI_FS_TYPE_SYMLINK  = 7, // Symbolic link, points to another file
  CDI_FS_TYPE_SOCKET   = 8, // Unix socket
  CDI_FS_TYPE_BUFFER   = 9 // Buffer (like file but stored in RAM and will get deleted when closed)
} cdi_filetype_t;

struct cdi_fs_driver {
  struct cdi_driver drv;
  /**
   * Opens a file/pipe/etc and returns file descriptor
   *  @param path Path to file
   *  @return File descriptor (negative = Failure)
   */
  int (*open)(const char *path);
  /**
   * Closes a file
   *  @param fildes File descriptor
   *  @return 0 = Success
   */
  int (*close)(int fildes);
  /**
   * Creates an file/dir/pipe/etc
   *  @param path Path to file
   *  @param type Whether it is a file/dir/etc
   *  @param mode Permissions
   *  @return 0 = Success
   */
  int (*create)(const char *path,int type,mode_t mode);
  /**
   * Removes a file/dir/pipe/etc
   *  @param path Path to dir
   *  @return 0 = Success
   */
  int (*remove)(const char *path);
  /**
   * Puts filenames of files from dir in list
   *  @param path Path to dir
   *  @param content List with filenames
   *  @return 0 = Success
   */
  int (*listdir)(const char *path,cdi_list_t content);
  /**
   * Sets meta data of a file/dir/pipe/etc
   *  @param path Path to file/dir/pipe/etc
   *  @param which Which meta information to set
   *  @param value Value to set as meta
   *  @return 0 = Success
   */
  void (*setmeta)(const char *path,int which,int value);
  /**
   * Gets meta data of a file/dir/pipe/etc
   *  @param path Path to file/dir/pipe/etc
   *  @param which Which meta information to get
   *  @return Meta data
   */
  int (*getmeta)(const char *path,int which);
  /**
   * Reads from an opened file
   *  @param fildes File descriptor of opened file
   *  @return Byte readed
   */
  u8 (*read)(int fildes);
  /**
   * Writes to an opened file
   *  @param fildes File descriptor of opened file
   *  @param byte Byte to write
   */
  void (*write)(int fildes,u8 byte);
  char *device; ///< @note meinOS specific
};

void cdi_fs_driver_init(struct cdi_fs_driver* driver);
void cdi_fs_driver_destroy(struct cdi_fs_driver* driver);
void cdi_fs_driver_register(struct cdi_fs_driver* driver);
void cdi_fs_seterror(struct cdi_fs_driver* driver,int error);
void cdi_fs_read_data(struct cdi_fs_driver* driver,void *buffer,size_t count);
void cdi_fs_write_data(struct cdi_fs_driver* driver,void *buffer,size_t count);

#endif
62
tyndur / Re: Wir suchen...
« am: 11. February 2008, 16:07 »
Vielleicht postet du deinen Vorschlag für den Dateisystem-Teil mal im Forum? Ich schätze mal, hier kommt etwas mehr Feedback.

Wegen der Dokumentation weiß ich nicht, was man außer der doxygen-Ausgabe und vielleicht einer Grobübersicht noch brauchen könnte. Aber du kannst gern mal was im Wiki anlegen, den einen oder anderen Platzhalter werde ich schon auffüllen oder hier und dort eine Ergänzung anbringen.

Endlich mal Feedback mit dem ich was anfangen kann ;)
Ich werde dann gleich mal den FS-Teil hier posten und die Doxygen-Doku könnte ich auch mal wieder online stellen.
63
tyndur / Re: Wir suchen...
« am: 11. February 2008, 15:33 »
Hi,

Also, wie ihr sicher schon gemerkt habe, helfe ich gerne mit CDI zu entwickeln, da ich es auch schon für mein Betriebssystem am implementieren bin. Ich denke, dadurch, dass Entwickler von mehreren Betriebssystemen daran mithelfen könnte helfen, es Betriebssystemunabhängig zu halten. Man könnte ja mal eine Kategorie in der Wiki anlegen für CDI und es ein wenig dokumentieren. Also ich würde da gerne mithelfen.
64
Das Wiki / Re: Sinkende Aktivität
« am: 11. February 2008, 15:28 »
Hi,

Das mit dem Nachwuchs könnte damit zusammenhängen, dass viele Leute mit Lowlevel-Kram nichts mehr zu tun haben wollen, nach dem Motto "Die Technik ist ja schon da" und sich eher mit Highlevel-Kram beschäftigen.
65
Lowlevel-Coding / Re: A20/Multitasking
« am: 10. January 2008, 06:34 »
Hi,

Also ich kann dir auch nur Grub empfehlen. Einen eigenen Bootloader zu schreiben ist imho Zeitverschwendung. Guck dir ein Tutorial zu Grub in unserer Wiki an und programmiere dann direkt den Kernel.
66
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 06. January 2008, 18:09 »
Sorry, hab die letzte Seite übersehen :roll:
67
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 05. January 2008, 23:58 »
http://lowlevel.brainsware.org/wiki/index.php/C-Kernel_mit_Grub
Ist zwar eher für Linux, aber vom Prinzip her geht das so auch unter Windows. Musst halt "dd" und so haben.

Wenn du keinen C-Kernel haben willst, musst du nur das hier beachten:
http://lowlevel.brainsware.org/wiki/index.php/C-Kernel_mit_Grub#Grub-Image_erstellen
Da geht es darum, wie man OS-Image mit Grub auf Floppy bekommt.

Mein Vorschlag gilt natürlich nur, wenn du Grub benutzen willst, was ich für einfacher halte, da man sich keine Sorgen machen muss wie man den Kernel vom Floppy lädt.
Seiten: 1 2 3 [4]

Einloggen