Bonjour à tous,
voila je me suis renseigné un peu sur le service udev et je sais qu'il crée les fichiers /dev/sd* des que le noyau ajoute un nouveau fichier dans /sys/
Donc je peux faire un open("/dev/sdb1", …) mais avec le vrai chemin : open("/sys/",…) et ca ne devrait pas poser de probleme pour le noyau. Mais quand je met ma clée USB, ou se trouve le fichier dans /sys qui fait référence à ma clée usb.
il y a peut etre beaucoup de confusion dans mes propos, donc merci d'avance pour votre aide.
# un peu d'inspiration
Posté par MicP . Évalué à 2. Dernière modification le 08 juillet 2020 à 15:16.
Bonjour
Je n'ai pas très bien compris ce que tu veux faire,
mais les retours des deux lignes de commandes suivantes,
lancées avec les privilèges du compte
root
pourraient t'inspirer.
Tu peux les lancer en même temps, chacune dans son émulateur de terminal,
et après les avoir lancées, regarde ce qu'il se passe.
Pour en sortir, il faudra faire un
Ctrl+C
udisksctl monitor
udevadm monitor
Bien sûr, n'hésite pas à aller lire les pages man de ces deux commandes.
[^] # Re: un peu d'inspiration
Posté par MicP . Évalué à 1.
Je voulais écrire :
… et après les avoir lancées, connecte/déconnecte une clef USB et regarde ce qu'il se passe.
# les UUID sont la pour cela
Posté par NeoX . Évalué à 2. Dernière modification le 08 juillet 2020 à 21:09.
ta clef USB à un ID, cet identifiant est renseigné dans /dev/disk/by-id/
ex :
tu peux le trouver par d'autres moyens :
ainsi peut importe ton système tu peux utiliser l'ID pour monter ta clef et travailler dessus à partir d'un script.
sinon tu as aussi les UUIDs ou les PARTUUID, visible avec
blkid
# clef USB et sous-répertoire du répertoire /sys/
Posté par MicP . Évalué à 4. Dernière modification le 08 juillet 2020 à 22:46.
Une clef USB ou un disque n'a pas d'UUID,
c'est le système de fichier d'une partition d'un disque ou d'une partition d'une clef USB (ou autre support) qui, si cette partition a été formaté, aura alors un UUID qui permettra d'identifier ce système de fichiers, et comme une clef USB n'a pas de système de fichiers elle ne peut être montée, seul un système de fichiers peut-être monté.
Dans l'arborescence du répertoire
/dev/disk/
il n'y a aucun lien vers ou sous-répertoire du répertoire/sys/
Par contre, à l'insertion d'une clef USB, le retour de la ligne de commande
udevadm monitor
ne donne que des sous-répertoires du répertoire
/sys/
et en même temps, au moment de l'insertion de cette même clef USB
le retour de la ligne de commande
udiskscl monitor
donnera un peu plus de précisions :Il y a toujours cette confusion entre le contenant et le contenu
qui embrouille les débutants qui finissent par ne même plus arriver à comprendre à quoi servent une table des partitions, une partition, et un système de fichiers.
Et les utilisateurs de Windows sont encore plus perdus quand ils voient apparaître sur leur machine des disques supplémentaires qui n'existent pas puisque ce ne sont en fait que de simples partitions.
Finalement, certains vont un jour ou l'autre simplement faire ce qu'ils lisent partout :
ils formatent leur disque ou leur clef USB sans penser que c'est une partition qu'il faut formater et que pour pouvoir créer une partition, il faut d'abord créer ou qu'il existe déjà une table des partitions, ou/et ils essayent de monter un disque ou une clef USB.
[^] # Re: clef USB et sous-répertoire du répertoire /sys/
Posté par cosmoff . Évalué à 1.
merci pour vos réponses. Mais je me suis tres mal exprimé. Ma vrai question est comment udev.service arrive à transformer des fichiers qu'il trouve dans le réportoire /sys vers un fichier block qu'il place dans /dev. et lorsqu'on fait un open("/dev/sdb1"), comment le noyau sait que l'on parle d'une clée USB car pour le noyau les périphériques se trouve dans son répertoire /sys
[^] # Re: clef USB et sous-répertoire du répertoire /sys/
Posté par MicP . Évalué à 4. Dernière modification le 09 juillet 2020 à 11:52.
En gros (très gros même …) :
Regarde la suite d'évènements retournés par la ligne de commande
udevadm monitor
on y voit qu'il y a des messages du noyau et de udev qui communiquent en plus entre eux pour savoir ce qu'il faut faire avec ce nouveau périphérique USB détecté.
Les USBids que la clef USB retourne permettent à udevd, grâce à la liste qui est dans
/var/lib/usbutils/usb.ids
, de savoir qu'il s'agit d'une interface USB <-> SATAet en fonction des règles udev, il va créer le fichier de périphérique qui va permettre d'accéder à cette clef USB.
Dans l'exemple que j'ai cité dans mon précédent message, la clef USB que j'ai utilisé n'avait même pas de table des partitions, mais refais le même test avec une clef USB qui a une table des partitions et une ou plusieurs partitions formatées, et tu verras beaucoup d'autres messages et informations intéressantes autant dans les retours de
udisksctl monitor
que deudevadm monitor
. Regarde aussi le retour de la commandedmesg
# Quelques liens
Posté par MicP . Évalué à 1.
Bonjour
Quelques liens :
https://www.linuxembedded.fr/2014/09/maitriser-les-services-gnulinux-a-laide-de-systemd/
https://www.linuxembedded.fr/2015/07/comprendre-dbus/
https://www.linuxembedded.fr/2015/05/une-introduction-a-udev/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.