1 votos

¿Qué es exactamente lo que aparece en la lista de puertos serie y por qué no tienen un esquema de numeración "normal"?

En Mac uno puede listar sus puertos serie usando

ls /dev/tty.*

Según: https://stackoverflow.com/questions/3815211/mac-command-line-list-available-serial-ports

Pero algo que me desconcierta cuando hago esto es que veo la salida de los puertos serie que son específicos de los dispositivos que tengo:

sidharthghoshal@Sidharths-MBP webrtc-demo % ls /dev/tty.*

/dev/tty.Bluetooth-Incoming-Port    /dev/tty.Sidsworkheadphone-SPPDev    /dev/tty.usbmodem14301         /dev/tty.void_sound-SPPDev

Ahora "esperaría" que algo como el dispositivo USB que conecté /dev/tty.usbmodem14301 tendría un número de puerto normal y corriente como tty01 o tty02

pero cuando corro

    ls /dev/tty*

Veo lo que parecen ser TODOS LOS PUERTOS SERIALES POSIBLES: y ya no me resulta obvio cómo corresponder a un nombre como /dev/tty.usbmodem14301 a su número de puerto serie "real" (es posible que ni siquiera sea una pregunta bien definida y si no lo es me gustaría saber por qué, ya que me gustaría escribir algún código que diga efectivamente "leer datos de lo que sea que esté en el puerto USB #3").

/dev/tty.Bluetooth-Incoming-Port    /dev/ttyq3              /dev/ttyra              /dev/ttyse              /dev/ttyu5              /dev/ttyvc
/dev/tty.Sidsworkheadphone-SPPDev   /dev/ttyq4              /dev/ttyrb              /dev/ttysf              /dev/ttyu6              /dev/ttyvd
/dev/tty.usbmodem14301          /dev/ttyq5              /dev/ttyrc              /dev/ttyt0              /dev/ttyu7              /dev/ttyve
/dev/tty.void_sound-SPPDev      /dev/ttyq6              /dev/ttyrd              /dev/ttyt1              /dev/ttyu8              /dev/ttyvf
/dev/ttyp0              /dev/ttyq7              /dev/ttyre              /dev/ttyt2              /dev/ttyu9              /dev/ttyw0
/dev/ttyp1              /dev/ttyq8              /dev/ttyrf              /dev/ttyt3              /dev/ttyua              /dev/ttyw1
/dev/ttyp2              /dev/ttyq9              /dev/ttys0              /dev/ttyt4              /dev/ttyub              /dev/ttyw2
/dev/ttyp3              /dev/ttyqa              /dev/ttys000                /dev/ttyt5              /dev/ttyuc              /dev/ttyw3
/dev/ttyp4              /dev/ttyqb              /dev/ttys001                /dev/ttyt6              /dev/ttyud              /dev/ttyw4
/dev/ttyp5              /dev/ttyqc              /dev/ttys002                /dev/ttyt7              /dev/ttyue              /dev/ttyw5
/dev/ttyp6              /dev/ttyqd              /dev/ttys1              /dev/ttyt8              /dev/ttyuf              /dev/ttyw6
/dev/ttyp7              /dev/ttyqe              /dev/ttys2              /dev/ttyt9              /dev/ttyv0              /dev/ttyw7
/dev/ttyp8              /dev/ttyqf              /dev/ttys3              /dev/ttyta              /dev/ttyv1              /dev/ttyw8
/dev/ttyp9              /dev/ttyr0              /dev/ttys4              /dev/ttytb              /dev/ttyv2              /dev/ttyw9
/dev/ttypa              /dev/ttyr1              /dev/ttys5              /dev/ttytc              /dev/ttyv3              /dev/ttywa
/dev/ttypb              /dev/ttyr2              /dev/ttys6              /dev/ttytd              /dev/ttyv4              /dev/ttywb
/dev/ttypc              /dev/ttyr3              /dev/ttys7              /dev/ttyte              /dev/ttyv5              /dev/ttywc
/dev/ttypd              /dev/ttyr4              /dev/ttys8              /dev/ttytf              /dev/ttyv6              /dev/ttywd
/dev/ttype              /dev/ttyr5              /dev/ttys9              /dev/ttyu0              /dev/ttyv7              /dev/ttywe
/dev/ttypf              /dev/ttyr6              /dev/ttysa              /dev/ttyu1              /dev/ttyv8              /dev/ttywf
/dev/ttyq0              /dev/ttyr7              /dev/ttysb              /dev/ttyu2              /dev/ttyv9
/dev/ttyq1              /dev/ttyr8              /dev/ttysc              /dev/ttyu3              /dev/ttyva

3voto

Jose Chavez Puntos 645

Tienes razón en que estos nombres son simplemente un "nombre bonito para el usuario", y no la referencia "real" del dispositivo tal y como la utiliza el propio sistema operativo.

En realidad, puedes crear cualquier nombre que quieras utilizar para tus puertos serie, siempre que hagan referencia al dispositivo correcto. Sin embargo, no es referenciado por un simple "número de puerto" (como se esperaría en, por ejemplo, versiones anteriores de Windows) - sino que son referenciados por un tipo de dispositivo, número de dispositivo mayor y número de dispositivo menor - en la tradición de Unix.

Si miras, por ejemplo, tu dispositivo Bluetooth, puedes encontrar los números ejecutando un comando como este en el Terminal:

stat  -f "Name: %N%n%tType: %HT%n%tMajor: %Hr%n%tMinor: %Lr%n%n" /dev/tty.Bluetooth-Incoming-Port

Esto mostrará el tipo de dispositivo (que siempre es "carácter" para los puertos serie) y los números de dispositivo mayor y menor.

Puede crear un nuevo "nombre" para su dispositivo mediante la función mknod de mando. Elige un nombre y un lugar en el sistema de archivos, y asegúrate de elegir el tipo de dispositivo correcto y los números mayor y menor, y tendrás una nueva forma de acceder a tu dispositivo.

Así se explica cómo el sistema pasa de este nombre aparentemente "aleatorio" a los números de dispositivo que se utilizan internamente. Sin embargo, saber que hay un contador interno de "puerto serie USB nº 1" y "puerto serie USB nº 2", etc., no ayuda mucho a la hora de programar la búsqueda del dispositivo correcto cuando hay varios conectados.

Si estás acostumbrado al sistema operativo Linux, quizá sepas que utilizan un programa llamado udevd para (entre otras cosas) crear una forma común de asignar los dispositivos conectados a los archivos de dispositivos. Con ella podrías crear reglas para especificar sus nombres para dispositivos específicos, de modo que no importa cuándo o en qué puerto esté conectado, siempre podrás referirte a él con un nombre específico. Sin embargo, MacOS no utiliza tal udevd programa.

En cuanto a los nombres de los propios dispositivos (los nombres por defecto), en realidad son elegidos por el controlador para cada tipo de dispositivo. Es decir, no hay un esquema de nomenclatura común que se aplique a todos los tipos de dispositivos.

En particular para su dispositivo serial USB que tenía los extraños números "14301" en el nombre - esto se ve típicamente con el controlador de chipset USB-a-RS-232. El "14301" es en realidad el número de serie de ese chip. Esto puede ser una forma práctica de identificar consistentemente un dispositivo serial USB específico - sin importar el orden en que se conecten.

Si tienes una configuración más complicada, te recomiendo un programa llamado serial-monitor disponible aquí . Te permite listar todos los puertos serie disponibles con mucha información, y te permite filtrar esa lista por criterios como número de serie, fabricante, producto o incluso número de puerto. De esta forma, puedes obtener desde "dispositivo fabricado por la empresa XYZ" hasta "/dev/cu.usbserial-9812938". Es muy útil cuando se hacen scripts.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X