Trong hộp Linux của chúng tôi, chúng tôi có USB -> thiết bị nối tiếp luôn được xác định là
/dev/ttyACM0
. Vì vậy, tôi đã viết một ứng dụng và cho đến ngày hôm qua, mọi thứ đều hoạt động tốt. Nhưng đột nhiên (vâng, trong khi trình bày từ xa ...) thiết bị đã ngừng hoạt động. Sau khi nghiên cứu nhanh, tôi thấy rằng kết nối đã thay đổi thành /dev/ttyACM1
. Đó là một chút không kịp thời, nhưng bây giờ tôi có một vấn đề - làm thế nào để xác định rõ ràng thiết bị của tôi? Giống như, ví dụ, ổ lưu trữ có thể được khởi tạo bằng UUID mặc dù /dev/sd**
đã thay đổi. Có một số cách để làm điều đó cho các thiết bị nối tiếp?
Bây giờ tôi sử dụng một cách giải quyết ngu ngốc:
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);
}
Các liên kết đến thiết bị chúng tôi sử dụng.
/dev/serial/by-id/usb-XXXX_USB2.0-Serial-if00-port0
. Điều này có thể là đủ cho bạn mà không có quy tắc udev tùy chỉnh.