2012-10-04 6 views
7

Tôi sẽ viết một chương trình trong C sẽ mở kết nối qua cổng nối tiếp và "nghe" các lệnh đến, sau đó nó sẽ thực hiện một số hành động và báo cáo lại trạng thái.Tôi làm cách nào để biết cổng nối tiếp nào được sử dụng trên Linux?

Kết nối sẽ qua RS232 (Cổng nối tiếp) và tôi đang cố gắng hiểu cách biết cổng nào sẽ mở.

Khi sử dụng cửa sổ, nếu tôi kết nối thiết bị nối tiếp USB của mình, tôi thấy "Cổng kết nối USB nối tiếp (COM4)" hiển thị trong trình quản lý thiết bị ... nhưng ở phía Linux tôi không xem bất kỳ thay đổi nào trong khu vực /sys/class/tty hoặc /dev, tôi thấy ttyS0 thông qua ttyS7 có mặt mọi lúc (tôi giả sử là S là viết tắt của nối tiếp dựa trên what I've read).

Vậy làm cách nào để biết kết nối nào để kết nối?

EDIT
Trong khi tôi đang phát triển này trên một hộp OpenSUSE 12.1 (3.1 kernel), chương trình cuối cùng sẽ được chạy trên uClinux trên một bảng chạy một hạt nhân 2.4Linux, vì vậy tôi đang tìm các giải pháp C tinh khiết sẽ hoạt động trên các hạt cũ hơn

FYI: hệ thống tệp /sys như đã lưu ý trong câu trả lời cho this post không tồn tại cho đến khi hạt nhân 2.6 và các ràng buộc của tôi buộc phải gắn vào những thứ có sẵn trong hạt nhân 2.4.

+1

Rất có thể bộ điều hợp cổng nối tiếp USB của bạn sẽ hiển thị dưới dạng '/ dev/ttyUSB0 '. Ngoài ra kiểm tra [câu hỏi này] (http://stackoverflow.com/questions/2530096/) nếu bạn cần một cách để liệt kê các cổng nối tiếp. –

+0

pyserial có thể được trợ giúp ở đây. – Prasanth

+0

@PhilippeGauthier - Điều đó sẽ rất tiếc khi tôi không biết liệu người dùng có sử dụng cáp nối tiếp hay cáp nối tiếp nối tiếp hay không. : ( – Mike

Trả lời

3

Lệnh dmesg sẽ hiển thị thông báo hạt nhân khi mô-đun được cắm vào sẽ cung cấp tên thiết bị của nó.

Các hệ thống tập tin /proc cũng giống như quản lý thiết bị trên cửa sổ - nơi nào đó trong sẽ có một danh sách các thiết bị tty

+1

Hình như đọc dmesg sẽ làm việc tốt:' [827.528859] usb 2-2: công cụ chuyển đổi pl2303 giờ được gắn với ttyUSB0' Vì vậy, tôi có thể thấy thiết bị của tôi trên/dev/ttyUSB0, cảm ơn! – Mike

1

Hai thứ tôi đã sử dụng: Trong trường hợp thứ hai nó sẽ giúp nếu bạn có thể gửi một tin nhắn đến thiết bị nối tiếp và có nó đáp ứng; điều này rõ ràng chỉ hoạt động nếu thiết bị sẽ trả lời một tin nhắn.

0

Check-out /proc/tty/driver/serial - bạn sẽ thấy một UART như 16550A thay vì unknownrx nên> 0 cho các cổng hiện có. Nếu bạn phải đoán cổng nào sẽ được sử dụng, hãy mở tất cả các cổng có sẵn. Sau đó, bạn cần phải thiết lập cổng cho nhu cầu của bạn (baudrate, chẵn lẻ, bit, vv) hoặc cố gắng đoán baudrate đến vv.

+1

Và cũng kiểm tra '/ proc/tty/driver/usbserial'. – sawdust