Thật không may, các cổng nối tiếp không phải là PlugNPlay, vì vậy kernel không biết thiết bị nào đã được cắm. Sau khi đọc hướng dẫn HowTo tôi đã có ý tưởng làm việc.
Thư mục /dev/
của unix như OSes chứa các tệp có tên là ttySn (với n là một số) . Hầu hết chúng không tương ứng với các thiết bị hiện có. Để tìm cái nào làm, hãy ra lệnh:
$ dmesg | grep ttyS
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[ 0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2
Trên đây là một ví dụ đầu ra của PC của tôi. Bạn có thể thấy việc khởi tạo một vài cổng nối tiếp:
ttyS0
, ttyS1
, ttyS4
, ttyS5
.
Một trong số chúng sẽ có điện áp dương khi cắm thiết bị. Vì vậy, bằng cách so sánh nội dung của tệp /proc/tty/driver/serial
có và không có thiết bị được cắm, chúng ta có thể dễ dàng tìm thấy các ttyS liên quan đến thiết bị của mình. Vì vậy, bây giờ làm:
$ sudo cat /proc/tty/driver/serial> /tmp/1
(un) cắm thiết bị
$ sudo cat /proc/tty/driver/serial> /tmp/2
Tiếp theo kiểm tra sự khác biệt giữa hai tập tin. Dưới đây là một đầu ra của PC của tôi:
$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR
Bằng cách so sánh ba số với đầu ra dmesg, chúng ta có thể xác định được số nào là cổng:
[ 0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Do đó, thiết bị của chúng tôi là /dev/ttyS0
, nhiệm vụ đã hoàn thành!