Skip to content

Dodać implementację modułu #3

@JohnAmadis

Description

@JohnAmadis

Z założenia moduł ma działać tak:

user montuje go w DMVFS (podając po prostu dmdfs jako parametr - jest błąd w README. Proszę, abyś po tym zadaniu też poprawił opis). Następnie dmdfs przeszukuje katalog, do którego ściężkę dostał jako parametr do mount - w tym katalogu powinny się znajdować pliki konfiguracyjne *.ini dla driverów.

Każdy plik konfiguracyjny powinien mieć nagłówek w postaci:

; Nazwa drivera, który powinien obsłużyć tę konfigurację
[main]
driver_name=dmclk

Jeśli w pliku konfiguracyjnym nie ma nazwy drivera (driver_name) to wtedy jako nazwa drivera powinna zostać wykorzystana nazwa pliku - czyli np jeśli plik nazywał się dmclk.ini to znaczy, że jest to konfiguracja dla modułu o nazwie dmclk.

Po zamontowaniu dmdfs powinien przeszukać podany katalog konfiguracyjny i spróbować skonfigurować wszystkie sterowniki według tych konfiguracji.

Każdy driver musi implementować interfejs:
https://github.com/choco-technologies/dmdrvi

I to jego powinniśmy używać do konfiguracji (dokładnie funkcji dmdrvi_create).

Driver nam powinien zwrócić dmdrvi_dev_num_t a z tego możemy odczytać jakie pliki powinniśmy stworzyć (pamiętaj, że ten system plików będzie zamontowany w ścieżce /dev, więc dodawanie takiego prefixu nie jest potrzebne

Tutaj masz przykład jakie pliki powinny być tworzone:

#include "dmdrvi.h"

// Create driver context - driver assigns device numbers
dmdrvi_dev_num_t dev_num;  // Output parameter
dmdrvi_context_t ctx = dmdrvi_create(NULL, &dev_num);

// Check what numbering scheme the driver uses
if (dev_num.flags == DMDRVI_NUM_NONE) {
    // Device file: /dev/dmclk
    Dmod_Printf("Device: /dev/dmclk\n");
} else if (dev_num.flags & DMDRVI_NUM_MINOR) {
    // Device file: /dev/dmspi0/0, /dev/dmspi0/1, etc.
    // Driver uses both major and minor (directory structure)
    Dmod_Printf("Device: /dev/dmspi%d/%d\n", dev_num.major, dev_num.minor);
} else if (dev_num.flags & DMDRVI_NUM_MAJOR) {
    // Device file: /dev/dmuart0, /dev/dmuart1, etc.
    // Driver uses major number only
    Dmod_Printf("Device: /dev/dmuart%d\n", dev_num.major);
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions