Je souhaite récupérer la structure dev_t
pour un disque entier, étant donné celle d'une partition sur le disque. C'est pour pour un pilote blkext
, comme nvme
.Noyau Linux: Comment obtenir dev_t du disque entier à partir d'un disque partitionné?
Quelque chose comme:
dev_t part_disk;
dev_t whole_disk = get_whole_disk_dev_t(part_disk);
Je voudrais que mon l'interface de get_whole_disk_dev_t()
être:
Argument: dev_t
: part_disk
Retour: dev_t
: whole_disk
Mon algorithme proposé:
- Récupère le chemin du disque partitionné à partir de
dev_t
par exemple "/ dev/nvme1n1p3". Je n'ai pas trouvé d'API pour obtenir le chemin dedev_t
. - une manipulation de Faites chaîne pour enlever « p3 », donnant le chemin disque entier
- passer le path_name du disque entier à
blk_lookup_devt
pour obtenir ledev_t
du disque entier.
i.e.whole_disk=blk_lookup_devt(path_name,0)
Est-ce la bonne approche ou est-il une meilleure approche? Si le premier, alors comment puis-je obtenir le chemin de dev_t
? P.S: J'ai besoin de mettre en œuvre ceci dans un pilote de périphérique (c'est-à-dire dans le contexte du noyau). Dans l'espace utilisateur, je sais que je peux utiliser l'API udev
.
[get_gendisk] (http://astro.temple.edu/~tue68607/wiki/html/kernel-api-2.6.29/re530.html) Peut-être que c'est ce que vous cherchez :-) –
get_gendisk n'est pas exporté, donc ne peut pas l'utiliser :( –
Lire différentes APIs Peut-être que vous trouverez ce que vous avez besoin [Block API] (https://www.kernel.org/doc/htmldocs/kernel-api/blkdev.html –