En nuestra caja de Linux tenemos USB -> dispositivo serie que siempre se identificó como
/dev/ttyACM0
. Así que escribí una solicitud y hasta ayer, todo funcionó bien. Pero de repente (sí, durante la presentación remota ...) el dispositivo dejó de funcionar. Después de una investigación rápida, descubrí que la conexión cambió a /dev/ttyACM1
. Fue un poco inoportuno, pero ahora tengo un problema: ¿cómo identificar inequívocamente mi dispositivo? Al igual que, por ejemplo, la unidad de almacenamiento podría inicializarse usando UUID, aunque /dev/sd**
ha cambiado. ¿Hay alguna forma de hacer eso para los dispositivos en serie?
Ahora uso una solución estúpida:
for(int i = 0; i < 10; i ++)
{
m_port = std::string("/dev/ttyACM") + (char)('0' + i);
m_fd = open(m_port.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
}
El enlace al dispositivo que utilizamos.
/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0
. Esto podría ser suficiente para ti sin reglas personalizadas de udev.