Je travaille actuellement sur une bibliothèque de ports série qui utilise déjà des frameworks spéciaux pour obtenir des informations sur les ports série du système. Bien que les ports série soient une conception fondamentale sous Unix - comme le prouve une réponse comme celle-ci - j'ai pensé qu'un bon moyen de tester si un fichier est un port série est de tester le mode principal du périphérique de caractères
et de vérifier s'il s'agit en fait d'un TTY
ou pas.
En rampant sur Internet, je n'ai trouvé aucune documentation parlant des principaux modes de TTY
s à travers les unités. Eh bien, il n'y a qu'une seule page de manuel Linux indiquant que ptmx a le mode majeur 5.
Bien que j'aie déjà posé des questions sur les détails d'implémentation du périphérique de caractères tty basé sur cette question Stack Overflow
, j'ai pensé que je pourrais demander à la communauté Unix Stack Exchange de savoir comment les valeurs tty sont stables dans toutes les versions d'Unix.
Donc, je demande votre aide pour construire une base de connaissances du mode Major de tous vos fichiers tty
sur votre système, c'est-à-dire :quel est le mode majeur de
- de vrais ports série ?
- pseudo terminal (
PTS
) ports ? FTDI USB
Ports série ?- autre
USB
Ports série ?
Pour obtenir les valeurs du mode majeur d'un périphérique de caractères, vous devez utiliser :
% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
* /dev/ttys001: 16
^^- major mode
ou en utilisant le bon vieux ls
:
% ls -l /dev/ttys001
crw--w---- 1 <user> tty 16, 1 Apr 30 03:25 /dev/ttys001
major mode -^^ ^^- minor mode
Vous pouvez mettre des informations dans la réponse de votre choix ou étendre la réponse du wiki communautaire avec des informations supplémentaires.
Réponse acceptée :
Unix version 7 (1979) :
# ls -l /dev/console /dev/tty?*
crw--w--w- 1 root 0, 0 Sep 22 06:46 /dev/console
crw-rw-r-- 1 root 0, 1 Sep 22 05:47 /dev/tty1
crw-rw-r-- 1 root 0, 2 Sep 22 05:47 /dev/tty2
(pas encore de pty)
Linux 3.2.0 (debian wheezy).
Remarque :vous pouvez également les trouver en recherchant /dev
pour appartenant au groupe tty
et dialout
. C'est un truc Debian.
- Consoles virtuelles
/dev/tty[0-9]*
:4
- Ports série réels :
/dev/ttyS[0-9]+
:4
- Pseudo-terminaux :
/dev/pts/[0-9]+
:136/dev/pts/ptmx
:5
- Port série USB FTDI :
/dev/ttyUSB[0-9]+
:188
- Port série USB :(AVR intégré USB/Arduino Uno )
/dev/ttyACM[0-9]+
:166
Linux 3.4.0 (Android 4.4.2/Nexus 5)
Remarque :a tous ceux de Linux plus :
- ttyACM (contrôle du modem cellulaire)
- (pas de
/dev
entrée, apparemment):166
- (pas de
- ttyHSL (Bluetooth)
/dev/ttyHSL0
:247
- ttyHS (Bluetooth)
/dev/ttyHS99
:248
Darwin 13.1.0 (Mac OS 10.9.2) :
- Ports série réels :
/dev/ttys[0-9a-f]
:4
- Pseudo-terminaux :
/dev/ttys[0-9]{3}
:16
- Port série USB FTDI :
/dev/tty.usbserial.*
:18
- Port série USB :(AVR intégré USB/Arduino Uno )
/dev/tty.usbmodem.*
:18
Solaris 10 x86/amd64 :
-
Pseudo-terminaux :
/dev/pty[p-r][0-9a-f]
(maître pty):25/dev/tty[p-r][0-9a-f]
(esclave pty):26/dev/pts/[0-9]+
:24/dev/ptmx
:23
-
Périphériques série :
/dev/tty[abc...]
alias/dev/term/[abc...]
ou/dev/tty0[012..]
(série uart, également):106- aussi comme
/dev/ttyd[012...]
mais avec une interface différente (cadran, modem) également sur 106 mais mineurs élevés.
OpenBSD 6.0
Comme documenté dans le commentaire dans /dev/MAKEDEV
- Ports série PC/AT UART :
/dev/tty[0-7][0-9a-f]
:8/dev/cua[0-7][0-9a-f]
:8
- Ports série Cyclades :
/dev/ttyc*
:38/dev/cuac*
:38
- Ports série Virtio :
/dev/ttyVI*
:94
- Ports série USB :
/dev/ttyU[0-3]
:66/dev/cuaU[0-3]
:66
- terminaux wscons :
/dev/tty[C-J][0-b]
:12
- Pseudo terminal maître et esclave (non UNIX 98)
/dev/pty[p-zP-T][0-9a-zA-Z]
:6/dev/tty[p-zP-T][0-9a-zA-Z]
:5
FreeBSD 10.0 et TrueOS
FreeBSD (et ses dérivés tels que TrueOS) est l'endroit où votre idée montre un défaut fatal. Il n'y a pas schéma de numéros de périphérique majeur + mineur dans FreeBSD.
Le devfs
pseudo-système de fichiers sur FreeBSD, monté de manière conventionnelle sur /dev
, n'utilise pas du tout un système majeur + mineur pour regrouper les appareils en classes " majeures ". Plutôt, le rdev pour le périphérique est le même que son numéro d'i-node dans le pseudo-système de fichiers, les i-nodes étant simplement attribués dans l'ordre croissant au fur et à mesure que les nœuds de périphérique sont générés, en fonction du matériel exact sur la machine à ce moment-là.
Ainsi, le numéro de périphérique ne peut pas être utilisé comme raccourci pour isatty()
.