Sì, i filesystem in Linux possono essere implementati come moduli del kernel. Ma c'è anche l'interfaccia FUSE (Filesystem in USErspace), che può consentire a un normale processo di spazio utente di fungere da driver di filesystem. Se stai prototipando un nuovo filesystem, implementarlo prima utilizzando l'interfaccia FUSE potrebbe semplificare i test e lo sviluppo. Una volta elaborati gli interni del filesystem in formato FUSE, è possibile iniziare a implementare una versione del modulo del kernel ottimizzata per le prestazioni.
Ecco alcune informazioni di base sull'implementazione di un filesystem nello spazio del kernel. È piuttosto vecchio (dal 1996!), Ma questo dovrebbe almeno darti un'idea di base per il tipo di cose che devi fare.
Se si sceglie di accedere al percorso FUSE, ecco libfuse, l'implementazione di riferimento del lato spazio utente dell'interfaccia FUSE.
Driver del filesystem come modulo del kernel
Fondamentalmente, la funzione di inizializzazione del modulo del driver del file system deve semplicemente chiamare una register_filesystem()
funzione e assegnarle come parametro una struttura che include un puntatore a funzione che identifica la funzione nel driver del file system che verrà utilizzata come primo passo nell'identificazione del file system digitare e montarlo. Non succede più nulla in quella fase.
Quando viene montato un filesystem e viene specificato il tipo di filesystem in base al proprio driver, oppure viene eseguito il rilevamento automatico del tipo di filesystem, il layer Virtual FileSystem del kernel (VFS in breve) chiamerà quella funzione. Sostanzialmente dice "Ecco un puntatore a una rappresentazione a livello di kernel di un dispositivo a blocchi Linux standard. Dai un'occhiata, vedi se è qualcosa che puoi gestire, e poi dimmi cosa puoi fare con esso."
A quel punto, il tuo driver dovrebbe leggere tutto ciò di cui ha bisogno per verificare che sia il driver giusto per il filesystem, e quindi restituire una struttura che include puntatori a ulteriori funzioni che il tuo driver può fare con quel particolare filesystem. Oppure, se il driver del file system non riconosce i dati sul disco, si suppone che restituisca un risultato di errore appropriato, quindi VFS segnalerà un errore nello spazio utente o - se viene eseguito il rilevamento automatico del tipo di file system - chiederà un altro file system autista da provare.
Gli altri driver nel kernel forniranno l'interfaccia standard del dispositivo a blocchi, quindi il driver del filesystem non dovrà implementare il supporto hardware. Fondamentalmente, il driver del filesystem può leggere e scrivere blocchi di dischi usando le funzioni standard a livello di kernel con il puntatore del dispositivo fornito.
Il livello VFS prevede che il driver del file system renda disponibili una serie di funzioni standard per il livello VFS; alcuni di questi sono obbligatori affinché il livello VFS possa fare qualcosa di significativo con il filesystem, altri sono opzionali e puoi semplicemente restituire un NULL al posto di un puntatore a tale funzione opzionale.