-
Notifications
You must be signed in to change notification settings - Fork 0
Description
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=dmclkJeś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);
}