Dans mon pilote de noyau Linux, j'ai besoin de lancer struct inode pour struct btrfs_inode. Pour ce faire, j'ai regardé la mise en œuvre de btrfs_getattr
.inclure les en-têtes de noyau linux pour le système de fichiers btrfs
le code est assez simple:
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/ctree.h"
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/btrfs_inode.h"
static dev_t get_device_id_btrfs(struct inode* inode){
if (inode != NULL) {
struct btrfs_inode *btrfsInode;
btrfsInode = BTRFS_I(inode);
if (btrfsInode != NULL && btrfsInode->root != NULL) {
return btrfsInode->root->anon_dev;
}
}
return 0;
}
afin de compiler je dois ajouter les en-têtes au-dessus de la fonction:
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/ctree.h"
#include "/data/kernel/linux-4.1.21-x86_64/fs/btrfs/btrfs_inode.h"
Quel est le problème?
Je dois télécharger manuellement et inclure ctree.h et btrfs_inode.h, ils ne sont pas fournis dans le paquetage kernel-headers.
Sur chaque plate-forme, je compile mon pilote, j'ai une machine virtuelle spécifique pour la distribution/noyau, donc sur chaque machine virtuelle, je télécharge habituellement les en-têtes de paquets et tout se compile parfaitement.
btrfs a été introduit dans le noyau 3.0 ci-dessus.
Arent les en-têtes de btrfs devraient être là? existent-ils dans un autre paquet? peut-être fs-headers ou quelque chose comme ça?
Merci
en-têtes sous ' fs/btrfs' contient API ** private pour le pilote btrfs **: cette API est destinée à être utilisée * uniquement dans l'implémentation du pilote *. Donc, tout votre but - 'Je dois lancer struct inode à struct btrfs_inode' - n'est pas" bon ", parce que vous essayez ** d'utiliser l'API privée d'un autre **. Dans de tels cas, il n'y a pas d'approches communes pour obtenir une telle API. – Tsyvarev
suse résolu en appelant (inode-> i_op-> getattr (NULL, dentry, & kstat), je voulais éviter la surcharge et simplement faire le cast .. donc j'ai regardé dans l'implémentation de btrfs inode getattr – ilansch
Comment votre code sais que l'inode appartient à un système de fichiers btrfs? –