Skip to topic | Skip to bottom
Home
Minfo
Minfo.Tp7r1.3 - 21 Oct 2007 - 18:19 - NicolasNobelistopic end

Start of topic | Skip to actions

USFS (Ultra Simple File System)

Le but de ce TP est d'implémenter un système de fichiers le plus simple possible.
USFS est un système de fichiers contenant uniquement un fichier nommé usfs. On ne peut rien faire avec ce fichier ni avec le système de fichiers : la seule opération possible est de lister ce dernier.

Voici quelques liens de documentation pour ce TP : VFS, VFS (alt), Signatures des fonctions de l'API du kernel.

Indications

  • Votre module nécessitera linux/fs.h.

  • Comme les pilotes de périphériques, les systèmes de fichiers doivent être enregistrés. Utilisez donc la fonction register_filesystem dans l'initialisation du module pour ajouter votre système de fichiers (identiquement, utilisez la fonction unregister_filesystem au déchargement du module)
    • Ces deux appels nécessitent une struct file_system_type représentant votre système de fichiers. Les attributs name, read_super, next et fs_flags doivent être initialisés, avec 0 comme valeur pour ce dernier attribut.
    • La fonction read_super est celle qui va initialiser le système de fichiers. Théoriquement, cette fonction devrait vérifier si le superbloc passé en paramètre correspond au bon type de système de fichier. Ici, elle n'initialise que la dentry (et donc l'inode) du répertoire racine (superbloc). Utilisez new_inode pour créer l'inode, et d_alloc_root pour créer la dentry de cette inode.
    • Un système de fichier bien enregistré doit apparaître avec la commande cat /proc/filesystems.

  • Seules les opérations sur les dossiers doivent être implémentées et ce afin de faire apparaître usfs dans la sortie d'un ls.
    • Pour cela, dans la structure struct inode_operations de l'inode du superbloc (membre i_op), seul le lookup est implémenté.
      • Le lookup doit vérifier si nom du dentry passé en paramètre est un fichier existant, et le cas échéant, appeler la fonction d_add (voir cours).
    • Quant à la structure struct file_operations de l'inode du superbloc (membre i_fop), elle ne concerne ici qu'un dossier puisqu'il est précisé que l'on ne peut rien faire sur les fichiers.
      • Ainsi, la méthode read sera donc en fait generic_read_dir pour laisser le VFS manipuler le dossier. Le VFS appellera alors la méthode readdir qu'il faut implémenter.
      • La méthode readdir devra renvoyer les entrées ".", "..", "usfs" en utilisant la fonction filldir donnée en paramètre (voir cours).

Tests

  • Créez un point de montage dans /tmp/ avec mkdir.
  • Vous ne chargerez pas directement votre module pour le tester mais vous laisserez mount s'en charger à votre place : mount -t usfs none pointdemontage.
  • Pour effectuer un autre test, pensez à démonter le montage avant de décharger le module !

  • Exemple de test concluant (notez le numéro d'inode de /tmp/. égal à celui de /tmp/usfs/..):
    ls -ai /tmp/usfs => 1240 .  16321 .. 1243 usfs
    ls -ai /tmp/ => 16321 . 23418 usfs

En plus...

Pour ceux qui ont fini, vous pouvez améliorer le système de fichiers pour qu'il contienne plusieurs fichiers dont vous choisirez les noms. Le contenu de ces fichiers sera simplement leur nom.

-- NicolasNobelis - 21 Oct 2007
to top


You are here: Minfo > ApprofondissementSysteme > Tp7

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback