Oui, les systèmes de fichiers sous Linux peuvent être implémentés en tant que modules du noyau. Mais il y a aussi l'interface FUSE (Filesystem in USErspace), qui peut permettre à un processus d'espace utilisateur normal d'agir comme un pilote de système de fichiers. Si vous prototypez un nouveau système de fichiers, l'implémenter d'abord à l'aide de l'interface FUSE pourrait faciliter les tests et le développement. Une fois que les composants internes du système de fichiers ont été élaborés sous forme FUSE, vous pouvez alors commencer à en implémenter une version de module de noyau optimisée pour les performances.
Voici quelques informations de base sur l'implémentation d'un système de fichiers dans l'espace noyau. C'est assez vieux (de 1996!), Mais cela devrait au moins vous donner une idée de base du genre de choses que vous devrez faire.
Si vous choisissez d'aller sur la route FUSE, voici libfuse, l'implémentation de référence du côté espace utilisateur de l'interface FUSE.
Pilote de système de fichiers en tant que module du noyau
Fondamentalement, la fonction d'initialisation de votre module de pilote de système de fichiers doit simplement appeler une register_filesystem()
fonction et lui donner comme paramètre une structure qui inclut un pointeur de fonction qui identifie la fonction dans votre pilote de système de fichiers qui sera utilisée comme première étape dans l'identification de votre système de fichiers tapez et montez-le. Il ne se passe plus rien à ce stade.
Lorsqu'un système de fichiers est en cours de montage et que le type de système de fichiers est spécifié pour correspondre à votre pilote ou que la détection automatique du type de système de fichiers est effectuée, la couche Virtual FileSystem du noyau (VFS pour faire court) appellera cette fonction. Il dit essentiellement "Voici un pointeur vers une représentation au niveau du noyau d'un périphérique bloc Linux standard. Jetez-y un œil, voyez si c'est quelque chose que vous pouvez gérer, puis dites-moi ce que vous pouvez en faire."
À ce stade, votre pilote est censé lire tout ce dont il a besoin pour vérifier que c'est le bon pilote pour le système de fichiers, puis renvoyer une structure qui inclut des pointeurs vers d'autres fonctions que votre pilote peut faire avec ce système de fichiers particulier. Ou si le pilote du système de fichiers ne reconnaît pas les données sur le disque, il est censé renvoyer un résultat d'erreur approprié, puis VFS signalera une défaillance dans l'espace utilisateur ou - si une détection automatique de type de système de fichiers est effectuée - demandera à un autre système de fichiers pilote à essayer.
Les autres pilotes du noyau fourniront l'interface de périphérique de bloc standard, de sorte que le pilote du système de fichiers n'aura pas à implémenter la prise en charge matérielle. Fondamentalement, le pilote du système de fichiers peut lire et écrire des blocs de disque à l'aide de fonctions standard au niveau du noyau avec le pointeur de périphérique qui lui est attribué.
La couche VFS s'attend à ce que le pilote du système de fichiers mette un certain nombre de fonctions standard à la disposition de la couche VFS; certains d'entre eux sont obligatoires pour que la couche VFS fasse quoi que ce soit de significatif avec le système de fichiers, d'autres sont facultatifs et vous pouvez simplement retourner un NULL à la place d'un pointeur vers une telle fonction facultative.