On Fri, 11 Jan 2002 [EMAIL PROTECTED] wrote:

[ message mal posté, je laisse l'auteur poster l'original, mais vu que
j'ai déjà écrit la réponse cela serait dommage de la laisser tomber
]

> Dans le répertoire /dev/ , on trouve d'innonmbrables noms ne
> correspondant à rien, parce qu'ils désignent un matériel non présent sur
> la machine. Des noms pour je ne sais combien de disques durs, avec je ne

Juste. (détail technique: il ne s'agit pas vraiment/seulement de noms,
mais de points d'entrées de pilotes, liés au système de fichier sous un
device-special-file. Ce qui importe comme dans tous les UNIX pas
super-modernes ce sont les numéros MAJOR et MINOR, cf la sortie de ls -l
ainsi que /usr/src/linux/Documentation/devices.txt. Les noms sont des
conventions. mv /dev/sda /dev/truc_scsi_premier_disque change cette
convention). 

A cela j'ajoute qu'il faut distinguer:

   1 le support matériel compilé dans le kernel / disponible en module

        On peut avoir compilé le support IDE disque sans avoir celui-ci
        installé physiquement dans la machine (p.ex. une machine SCSI
        seulement)

        On peut avoir installé un périphérique sans avoir configuré
        son support (recompilation du kernel, activation du module
        concerné automatiquement ou manuellement).

           Exemple: Red Hat 7.2, si le disque où Linux est installé n'est
                    pas SCSI mais qu'il existe une carte SCSI dans le
                    système et que Red Hat peut la détecter
                    automatiquement, ne va pas charger le module noyau
                    carte correspondant (ni les gestionnaires
                    disques/tape/CD), mais configurer celui-ci via
                    kmod (/etc/modules.conf ou /etc/conf.modules). Au
                    premier accès à un périphérique existant ou non dans
                    /dev, le bus SCSI sera scanné par l'insertion du
                    pilote matériel, et seul à ce moment /proc/scsi/scsi
                    sera à jour.

                    [ comportement tout à fait logique d'ailleurs.
                      Seule critique: scanner le bus provoque en général
                      un SCSI RESET, certaines configurations (p.ex.
                      compression tape) peuvent disparaître
                      si le module est aussi déchargé automatiquement.
                      C'est une des raisons qui me fait préférer le
                      chargement en dur dans /etc/modules comme peut
                      le faire la Debian. L'autre étant que p.ex.
                      en 2.2.x, `st' avait parfois des problèmes à
                      allouer ses buffers DMA longtemps après le
                      démarrage. Autrement, on peut quand même saluer
                      le fait que la Red Hat détecte cette carte.
                    ]

   2 les périphériques installés dans la machine physiquement

        On peut dans certains cas détecter un périphérique sans avoir
        de support du tout pour. Ils apparaissent en général dans un
        bus système (PCI, PCMCIA, etc).

        P.ex: /sbin/lspci # ou cat /proc/pci

        cf le message sur cardctl pour PCMCIA p.ex.

   3 les périphériques détectés ET configurés

        Ceux-ci apparaissent en général dans les logs systèmes, et
        dans des fichiers de `ressources' (cat /proc/interrupts, etc).

> sais combien de partitions, etc. Pourquoi pas? Le problème, c'est de
> savoir quels sont les noms "actifs", je veux dire: les noms
> correspondant à un élément existant sur la machine, et reconnu par le

C'est légitime. Mais en vertu de ce qui précède, cette requête mélange
allégrement les trois catégories définies. Il faut comprendre que dans
certains cas il n'est même pas possible de déterminer si une carte X est
installée (ISA sans PnP p.ex.) sans le pilote déterminé, et/ou une
configuration correcte du matériel. Les machines modernes PC utilisent des
bus à autoconfiguration -- comme ceux que l'on trouvait dès 1985 sur des
machines genre Amiga -- voire des bus à autoconfiguration magouillée (ISA
PNP) plutôt que des adresses fixes, etc, et donc ce genre de problèmes se
pose de moins en moins. 

La seule chose que l'on peut regretter c'est que la catégorie 3 ne
provoque pas automatiquement une mise à jour de /dev. Mais cela
empêcherait bien sûr le chargement et la détection de matériel à la
demande (cf exemple Red Hat ci-dessus) si les périphériques non catégorie
3 n'étaient pas dans /dev. 

> système. Existe-t-il une commande permettant de savoir quels sont les
> noms "attribués"? 

- La commande dmesg donne nombre d'informations intéressantes quant au
  pilotes et périphériques détectés (catégorie 3, parfois catégorie 1 
  non 3 avec une erreur)

- lsmod donne les modules du kernel chargés, qui sur des kernels
  modulaires donne une bonne information sur la catégorie 3.

- certains fichiers dans /proc, comme /proc/interrupts donne les noms de
  pilotes associés à des interruptions (catégorie 3 toujours)

- il y a aussi /proc/scsi/scsi, /proc/pci/... etc, qui donnent
  des informations sur la catégorie 2, pas forcément catégorie 3.

- fdisk -l /dev/sda # donne les partitions définies

On a parlé à de nombreuses reprises de ce qui précède, lors du diagnostic
de problèmes / comment savoir comment est accédé un périphérique.

Une alternative intéressante à l'ancien modèle /dev UNIX est le devfs, le
device file-system, une spécificité Linux, où les entrées sont générées
dynamiquement en fonction des périphériques effectivement disponibles
(enfin c'est l'impression que cela donne -- pas encore essayé). 

devfs est disponible comme patch à 2.2.x et comme option de compilation de
2.4.x: à ma connaissance aucune distribution ne propose ce système par
défaut pour le moment.

Les modifications de droits d'accès sont alors perdus (configurés selon
une table fixe, encore que l'on peut aussi les restaurer si nécessaire à
l'aide d'un daemon en user-space). 

Je n'ai pour l'instant aucune expérience de devfs. Je ne sais pas, en
particulier, dans quelle mesure devfs empêche le chargement à la demande
de modules (genre: mount /dev/scd0 /mnt -> chargement modules SCSI,
bas-niveau chip, sr).

Un avantage certain de devfs est un nommage plus UNIX des disques
physiques: au lieu de p.ex. /dev/sdb (deuxième disque SCSI) on aura alors
/dev/bus/scsi/0/0/3/0, si p.ex. ce deuxième disque SCSI se trouve sur le
SCSI ID 3. Faire ainsi peut sembler plus compliqué: c'est cependant la
seule méthode pour éviter des changements de noms de disques physiques en
cas d'insertion de périphériques avec ID plus petite. Maintenant que les
`labels' se généralisent sur les partitions, cela est moins important,
mais les labels se trouvent au niveau du système de fichier, pas des block
devices ou des périphériques non disques: cela reste important p.ex.  pour
l'accès générique aux périphériques SCSI (/dev/sgX), qu'on utilise pour le
gravage de CD, ou la configuration/interrogation bas niveau de
périphériques disques ou cassettes: p.ex. savoir le nombre d'erreurs
corrigées en DDS/DAT, ou encore l'accès direct raw-device. 

[ je ne connais pas en détail le nommage de devfs, ce qui précède est
l'idée générale ]

Tout ça pour dire qu'un ls /dev, pour le moment, ne donne pas d'indication
sur le matériel supporté par le kernel, le matériel présent dans le
système, ni une intersection entre ces deux.

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se désabonner aussi.

Répondre à