Bonjour,
Je suis étudiant et je doit faire un fs permettant de simuler une calculatrice tres basique sur un noyau 2.4.20.
Le fs tourne bien j'arrive a faire tout ce qui m'interesse a un point de détails la création de fichier.
Je m'explique tous les dossier et fichiers sont générés automatiquement (les chiffres et les operateurs), mais il me reste a donner a l'utilisateur la possibilité de créer un fichier zmemory pour stocker les calculs.
J'ai donc naivement implémenté la fonction create de mon inode operations avec un printk m'indiquant que je passe par la.
Probleme je n'y passe pas pour une sombre raison de permission. Par contre je passe deux fois dans mon lookup.
Je pense que mon probleme viens de mon lookup. Je renvoi toujours null mais j'ai lu des doc indiquant qu'il fallait renvoyer un dentry negatif dans le cas d'un fichier non trouvé.
Voici le code de mon lookup :
Désolé si mon code vous semble tres naif c'est le premier fs que je fait et je me suis grandement inspiré de ramfs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 struct dentry * my_lookup (struct inode * dir,struct dentry * den){ printk("<1>my lookup\n"); int mode; struct inode *in; if (den->d_name.name[0] == 'e' || den->d_name.name[0] == 'z') { mode = S_IFREG|0755; } else { mode = S_IFDIR|0755; } if (den->d_name.name[0] != 'z') { in = make_inode(dir->i_sb, mode, make_data(dir->u.generic_ip, den->d_name.name[0])); } else { printk("<1>creation fichier Z\n"); if (memory != NULL) in = memory; else { //in = memory = make_inode(dir->i_sb, mode, NULL); } } if (den->d_name.name[0] != 'z' || memory != NULL) d_add(den, in); return NULL;
Je vous remercie d'avance pour toute l'aide que vous pourrez m'apporter.
Je me tiens a votre disposition pour tout renseignements suplémentaires.
Partager