Actualmente estoy trabajando en una biblioteca de puertos serie que ya utiliza marcos especiales para obtener información sobre los puertos serie del sistema. Aunque los puertos seriales son un diseño fundamental en Unix, como lo demuestra una respuesta como esta, pensé que una buena manera de probar si un archivo es un puerto serial es probar el modo principal del dispositivo de caracteres
y verificar si esto es realmente un TTY
o no.
Rastreando en Internet, no pude encontrar ninguna documentación que hablara sobre los principales modos de TTY
s a través de unices. Bueno, solo hay una página de manual de Linux que indica que ptmx tiene el modo principal 5.
Aunque ya pregunté acerca de los detalles de implementación del dispositivo de caracteres tty basado en esta pregunta de Stack Overflow
, pensé que podría preguntarle a la comunidad de Unix Stack Exchange para averiguar cómo Los valores tty son estables en todas las variantes de Unix.
Por lo tanto, solicito su ayuda para crear una base de conocimiento del modo principal de todos sus archivos tty
en su(s) sistema(s), es decir:¿cuál es el modo principal de
- puertos serie reales?
- pseudo terminal (
PTS
) puertos? FTDI USB
¿Puertos serie?- otro
USB
¿Puertos serie?
Para obtener los valores para el modo principal de un dispositivo de caracteres, deberá buscar usando:
% stat -f " * %N: %Hr%n" /dev/tty* /dev/pts/*
* /dev/ttys001: 16
^^- major mode
o usando el viejo ls
:
% ls -l /dev/ttys001
crw--w---- 1 <user> tty 16, 1 Apr 30 03:25 /dev/ttys001
major mode -^^ ^^- minor mode
Puede poner información en su propia respuesta o ampliar la respuesta wiki de la comunidad con información adicional.
Respuesta aceptada:
Unix versión 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
(no hay pty todavía)
Linux 3.2.0 (debian sibilante).
Nota:también puede encontrarlos buscando /dev
para propiedad del grupo tty
y dialout
. Eso es algo de Debian.
- Consolas virtuales
/dev/tty[0-9]*
:4
- Puertos serie reales:
/dev/ttyS[0-9]+
:4
- Pseudoterminales:
/dev/pts/[0-9]+
:136/dev/pts/ptmx
:5
- Puerto serie USB FTDI:
/dev/ttyUSB[0-9]+
:188
- Puerto serie USB:(AVR integrado USB/Arduino Uno )
/dev/ttyACM[0-9]+
:166
Linux 3.4.0 (Android 4.4.2 / Nexus 5)
Nota:tiene todos los de Linux más:
- ttyACM (control de módem celular)
- (sin
/dev
entrada, aparentemente):166
- (sin
- ttyHSL (Bluetooth)
/dev/ttyHSL0
:247
- ttyHS (Bluetooth)
/dev/ttyHS99
:248
Darwin 13.1.0 (MacOS 10.9.2):
- Puertos serie reales:
/dev/ttys[0-9a-f]
:4
- Pseudoterminales:
/dev/ttys[0-9]{3}
:16
- Puerto serie USB FTDI:
/dev/tty.usbserial.*
:18
- Puerto serie USB:(AVR integrado USB/Arduino Uno )
/dev/tty.usbmodem.*
:18
Solaris 10x86/amd64:
-
Pseudoterminales:
/dev/pty[p-r][0-9a-f]
(maestro pty):25/dev/tty[p-r][0-9a-f]
(esclavo pty):26/dev/pts/[0-9]+
:24/dev/ptmx
:23
-
Dispositivos serie:
/dev/tty[abc...]
también conocido como/dev/term/[abc...]
o/dev/tty0[012..]
(serie uart, también):106- también como
/dev/ttyd[012...]
pero con diferente interfaz (dial, modem) también en 106 pero altos menores.
OpenBSD 6.0
Como se documenta en el comentario en /dev/MAKEDEV
- Puertos seriales PC/AT UART:
/dev/tty[0-7][0-9a-f]
:8/dev/cua[0-7][0-9a-f]
:8
- Puertos seriales de las Cícladas:
/dev/ttyc*
:38/dev/cuac*
:38
- Puertos seriales Virtio:
/dev/ttyVI*
:94
- Puertos serie USB:
/dev/ttyU[0-3]
:66/dev/cuaU[0-3]
:66
- terminales wscons:
/dev/tty[C-J][0-b]
:12
- Pseudoterminal maestro y esclavo (no 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 y TrueOS
FreeBSD (y sus derivados como TrueOS) es donde su idea muestra un defecto fatal. No no hay esquema de número de dispositivo mayor+menor en FreeBSD.
Los devfs
pseudo-sistema de archivos en FreeBSD, convencionalmente montado en /dev
, no utiliza un sistema mayor+menor para agrupar dispositivos en clases "principales" en absoluto. Más bien, el rdev para el dispositivo es el mismo que su número de i-nodo en el pseudo-sistema de archivos, con los i-nodos simplemente asignados en orden ascendente a medida que se generan los nodos del dispositivo, dependiendo del hardware exacto en la máquina en cuestión en ese momento.
Por lo tanto, el número de dispositivo no se puede usar como acceso directo para isatty()
.